1 module Golden.Splice where
3 import Control.Monad (Monad(..))
5 import Data.Function (($))
6 import Data.Functor ((<$>))
7 import Data.Semigroup (Semigroup(..))
8 import Text.Show (Show(..))
9 import System.FilePath ((</>), (<.>))
10 import System.IO (writeFile)
11 import System.Directory (removeFile)
12 import qualified Data.List as List
15 import Build_symantic_parser
16 import Golden.Splice.Utils
17 import qualified Grammar
20 goldens = testGroup "Splice" $
21 (<$> [1::Int .. List.length Grammar.grammars]) $ \g ->
22 let spliceFile = "test/Golden/Splice/"</>"G"<>show g<.>"hs" in
25 writeFile (rootDir</>spliceFile) $ List.unlines
26 [ "module Splice where"
27 , "import Data.Text (Text)"
28 , "import qualified Symantic.Parser as P"
29 , "import qualified Grammar"
31 , "splice = $$(P.runParser @Text Grammar.g"<>show g<>")"
33 return (rootDir</>spliceFile))
35 (\_io -> testSplice spliceFile)