module Util where
import Data.Attoparsec.Text
import Data.Attoparsec.Types as TP
import Data.Either
import Data.Text as T
import Test.HUnit
testParser :: TP.Parser Text a -> String -> Assertion
testParser f v = fromEither (parseOnly f $ T.pack v)
expectParse :: (Eq a, Show a) => TP.Parser Text a -- ^ Parser under test
-> Text -- ^ Message under test
-> Either String a -- ^ Expected parse result
-> Assertion
expectParse p t (Left _) = assertBool "Expected parse failure"
(isLeft (parseOnly p t))
expectParse p t a = assertBool msg (r == a)
where r = parseOnly p t
msg = Prelude.unwords
["Expected parse to", show a, ". Got", show r]
fromEither :: Either String a -> Assertion
fromEither (Left e) = assertBool e False
fromEither (Right _) = assertBool "" True