1 {-# LANGUAGE DataKinds #-} -- For using P.viewGrammar
2 {-# LANGUAGE FlexibleContexts #-} -- For using P.Grammar Char
3 {-# LANGUAGE Rank2Types #-}
4 {-# LANGUAGE TypeApplications #-}
5 module Golden.Parser where
7 import Control.Monad (Monad(..))
8 import Data.Either (Either(..))
9 import Data.Function (($))
10 import Data.Functor ((<$>))
12 import Data.Semigroup (Semigroup(..))
13 import Data.String (IsString(..))
14 import Data.Text.IO (readFile)
16 import Test.Tasty.Golden
17 import Text.Show (Show(..))
18 import System.IO.Unsafe (unsafePerformIO)
19 import System.FilePath ((<.>), (</>), dropExtensions, takeBaseName)
20 import qualified Data.List as List
21 import qualified System.IO.Error as IO
22 import qualified System.Directory as IO
23 import qualified Control.Exception as IO
29 goldens = testGroup "Parser" $
30 (\f -> List.zipWith f parsers [1::Int ..]) $ \(P p) g ->
31 let parserDir = "test/Golden/Parser/G"<>show g in
33 ((parserDir </>) <$>) $
35 List.filter (List.isSuffixOf ".input.txt") $
38 (IO.listDirectory parserDir)
40 if IO.isDoesNotExistError exn
44 testGroup ("G"<>show g) $ (<$> inputs) $ \inp ->
45 goldenVsStringDiff (takeBaseName (dropExtensions inp)) goldenDiff
46 (dropExtensions inp<.>"expected.txt") $ do