module Main (main) where
import Control.Monad
import Test.Tasty
import Test.Tasty.HUnit
import qualified System.Directory as Dir
import qualified System.Process as Proc
main :: IO ()
main = defaultMain $ testGroup "Tests"
[ testCase "Class1" $ runTest "Class1.hs"
, testCase "Data1" $ runTest "Data1.hs"
, testCase "Data2" $ runTest "Data2.hs"
, testCase "Data3" $ runTest "Data3.hs"
, testCase "Data4" $ runTest "Data4.hs"
, testCase "KindSig1" $ runTest "KindSig1.hs"
, testCase "Pat1" $ runTest "Pat1.hs"
, testCase "Pat2" $ runTest "Pat2.hs"
, testCase "Ty1" $ runTest "Ty1.hs"
, testCase "Ty2" $ runTest "Ty2.hs"
, testCase "Ty3" $ runTest "Ty3.hs"
, testCase "Ty4" $ runTest "Ty4.hs"
, testCase "Ty5" $ runTest "Ty5.hs"
, testCase "Ty6" $ runTest "Ty6.hs"
, testCase "Var1" $ runTest "Var1.hs"
, testCase "Var2" $ runTest "Var2.hs"
, testCase "Var3" $ runTest "Var3.hs"
, testCase "Var4" $ runTest "Var4.hs"
, testCase "Var5" $ runTest "Var5.hs"
]
testModulePath :: String -> FilePath
testModulePath name = "test-modules/" <> name
-- copy the input file contents to the module file to be compiled
prepTest :: FilePath -> IO ()
prepTest modFile = do
inp <- readFile (modFile ++ ".input")
writeFile modFile inp
runTest :: FilePath -> Assertion
runTest name = do
let modFile = testModulePath name
prepTest modFile
(_, _, _, h) <- Proc.createProcess $
Proc.proc "cabal" ["build", "test-modules:" ++ takeWhile (/= '.') name]
void $ Proc.waitForProcess h
updatedMod <- readFile modFile
expectedMod <- readFile $ modFile ++ ".expected"
assertEqual "Expected update" expectedMod updatedMod
Dir.removeFile modFile