rattle-0.2: test/Test/Trace.hs
module Test.Trace(main) where
import Control.Monad
import Data.List.Extra
import Test.Type
import Development.Shake.Command
import System.Directory
import System.FilePath
check got want = do
want <- mapM canonicalizePath want
nubOrd got `intersect` want === want
traceWrite :: [FSATrace FilePath] -> [FilePath] -> IO ()
traceWrite ts = check [t | FSAWrite t <- ts]
traceRead :: [FSATrace FilePath] -> [FilePath] -> IO ()
traceRead ts = check [t | FSARead t <- ts]
main =
forM_ [Nothing, Just Shell] $ \opts -> do
putStrLn "Check GCC works"
writeFile "helloworld.h" "#include <stdio.h>\n"
writeFile "helloworld.c" $ unlines
["#include \"helloworld.h\""
,"int main(){"
," printf(\"Hello World!\\n\");"
," return 0;"
,"}"
]
xs <- cmd opts "gcc -c helloworld.c"
traceRead xs ["helloworld.c","helloworld.h"]
traceWrite xs ["helloworld.o"]
xs <- cmd opts "gcc helloworld.o -o helloworld.exe"
traceRead xs ["helloworld.o"]
traceWrite xs ["helloworld.exe"]
xs <- cmd opts $ "." </> "helloworld.exe"
traceRead xs ["helloworld.exe"]
putStrLn "Check curl works"
-- Require the Shell below because of https://github.com/jacereda/fsatrace/issues/28
xs <- cmd opts Shell "curl -sSL http://example.com/ -o example.txt"
traceWrite xs ["example.txt"]