packages feed

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 ]