remarks-0.1.9: test/Parser/BlackBoxTests.hs
{-# LANGUAGE DeriveGeneric #-}
module Parser.BlackBoxTests ( allTests ) where
import Ast
import Parser
import Test.Tasty
import Test.Tasty.HUnit
-- import Test.Tasty.QuickCheck
import Test.Tasty.Golden
import Text.PrettyPrint.GenericPretty
unitTests :: TestTree
unitTests = testGroup "Unit tests"
[ testCase "Lone header line" $
parseString "# A: 0/0\n" @?=
Right
[ Judgement (Header ("A",0.0,0.0), [], [], [])
]
, testCase "A couple same-depth header lines" $
parseString "# A: 0/0\n# B: 0/0\n" @?=
Right
[ Judgement (Header ("A",0.0,0.0), [], [], [])
, Judgement (Header ("B",0.0,0.0), [], [], [])
]
, testCase "A simple hierarchy of headers" $
parseString "# A: 0/0\n## B: 0/0\n" @?=
Right
[ Judgement (Header ("A",0.0,0.0), [], [],
[ Judgement (Header ("B",0.0,0.0), [], [], [])
])
]
, testCase "A couple simple hierarchies" $
parseString "# A: 0/0\n## B: 0/0\n# C: 0/0\n" @?=
Right
[ Judgement (Header ("A",0.0,0.0), [], [],
[ Judgement (Header ("B",0.0,0.0), [], [], [])
])
, Judgement (Header ("C",0.0,0.0), [], [], [])
]
]
qcTests :: TestTree
qcTests = testGroup "QuickCheck tests" []
golden' :: String -> TestTree
golden' basename =
goldenVsFile name fref fout $ do
p <- parseFile fin
writeFile fout $ (pretty p) ++ "\n"
where
prefix = "test/golden/"
name = basename ++ ".mrk"
fin = prefix ++ name
fref = prefix ++ basename ++ ".ref"
fout = prefix ++ basename ++ ".out"
goldenTests :: TestTree
goldenTests = testGroup "Golden tests"
[ golden' "deep-judgement"
, golden' "some-top-level-judgements"
, golden' "some-judgements"
]
allTests :: TestTree
allTests = testGroup "Black-box parser tests"
[ unitTests, qcTests, goldenTests ]