{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE CPP #-}
-- Basically a copy of TestText with tests for chunks and no tests for partial
-- input
module TestTextLazy ( tests ) where
import Distribution.TestSuite as TestSuite
import Replace.Attoparsec.Text.Lazy
import Data.Attoparsec.Text.Lazy as A
import qualified Data.Text.Lazy as T
tests :: IO [Test]
tests = return
[ Test $ streamEditTest "x to o" (string "x") (const "o") "x x x" "o o o"
, Test $ streamEditTest "x to o inner" (string "x") (const "o") " x x x " " o o o "
, Test $ streamEditTest "ordering" (string "456") (const "ABC") "123456789" "123ABC789"
, Test $ streamEditTest "empty input" (match (fail "")) fst "" ""
, Test $ chunkTest "all chunks are processed" (string "x") (const "y") ["x", "x", "x"] id "yyy"
, Test $ chunkTest "matches across chunks" (string "abcd") (const "y") ["ab", "cd", "ab", "cd"] id "yy"
, Test $ chunkTest "multiple matches in one chunks" (string "x") (const "y") ["xxx", "xx"] id "yyyyy"
]
where
chunkTest nam sep editor input post expected = TestInstance
{ run = do
let output = post $ streamEdit sep editor (T.fromChunks input)
if (output == expected)
then pure (Finished Pass)
else return (Finished $ TestSuite.Fail
$ "got " <> show (T.toChunks output) <> " expected " <> show (T.toChunks expected))
, name = "chunkTest " ++ nam
, tags = []
, options = []
, setOption = \_ _ -> Left "no options supported"
}
streamEditTest nam sep editor input expected = TestInstance
{ run = do
let output = streamEdit sep editor input
if (output == expected)
then return (Finished Pass)
else return (Finished $ TestSuite.Fail
$ "got " <> show output <> " expected " <> show expected)
, name = "streamEdit " ++ nam
, tags = []
, options = []
, setOption = \_ _ -> Left "no options supported"
}