1 {-# OPTIONS_GHC -Wno-missing-signatures #-}
2 {-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-}
3 module Golden.Splice where
5 import Data.Either (Either(..))
6 import Data.Function (($))
7 import Data.Functor ((<$>))
9 import Data.List ((++))
10 import Data.String (String, IsString(..))
11 import Data.Text (Text)
12 import Symantic.Parser (ParsingError, optimizeMachine, generateCode)
13 import System.FilePath (dropExtensions, takeBaseName, (</>), (<.>))
16 import Test.Tasty.Golden (goldenVsStringDiff)
17 import Text.Show (Show(..))
18 import qualified Data.List as List
19 import qualified Language.Haskell.TH as TH
20 import qualified Language.Haskell.TH.HideName as TH
21 import qualified System.Process as Process
24 import qualified Grammar
25 import Symantic.Parser.Grammar (optimizeGrammar)
28 goldens = testGroup "Splice"
29 [ let spliceFile = getGoldenDir $ "Splice/"</>"G"++show gNum<.>"expected"<.>"txt" in
30 goldenVsStringDiff (takeBaseName (dropExtensions spliceFile)) goldenDiff spliceFile $ do
32 fromString <$> Process.readProcess "ormolu"
33 [ "-o", "-XBangPatterns"
35 , "-o", "-XTypeApplications"
36 , "-o", "-XUnboxedTuples"
38 (show (TH.ppr ({-TH.hideName-} (TH.unType tExp))))
39 | (gNum, splice) <- List.zip [1::Int ..] splices
42 splices :: [IO (TH.TExp (Text -> Either (ParsingError Text) String))]
43 splices = (<$> Grammar.grammars) $ \g -> TH.runQ $ do
46 optimizeMachine $ optimizeGrammar g
47 TH.examineCode $ generateCode mach
49 [ s1,s2,s3,s4,s5,s6,s7,s8,s9
50 ,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19