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