{-# LANGUAGE CPP #-}
import Test.Tasty
import Test.Tasty.HUnit
import Test.Tasty.Golden
import System.IO.Temp
import System.FilePath
import System.Directory
import System.Process
import Data.List (sort)
touch f = writeFile f ""
diff ref new = ["diff", "-u", ref, new]
main = defaultMain $ testGroup "Tests"
[ testCase "findByExtension" $
withSystemTempDirectory "golden-test" $ \basedir -> do
createDirectory (basedir </> "d1")
createDirectory (basedir </> "d1" </> "d2")
touch (basedir </> "f1.c")
touch (basedir </> "f2.h")
touch (basedir </> "f2.exe")
touch (basedir </> "d1" </> "g1.c")
touch (basedir </> "d1" </> "d2" </> "h1.c")
touch (basedir </> "d1" </> "d2" </> "h1.exe")
touch (basedir </> "d1" </> "d2" </> "h1")
files <- findByExtension [".c", ".h"] basedir
sort files @?= (sort . map (basedir </>))
["d1/d2/h1.c","d1/g1.c","f1.c","f2.h"]
#ifdef BUILD_EXAMPLE
, withResource
(do
tmp0 <- getCanonicalTemporaryDirectory
tmp <- createTempDirectory tmp0 "golden-test"
callProcess "cp" ["-r", "example", tmp]
return tmp
)
({-removeDirectoryRecursive-}const $ return ()) $ \tmpIO ->
testGroup "Example test suite"
[ goldenVsFileDiff
"before --accept"
diff
"tests/golden/before-accept.golden"
"tests/golden/before-accept.actual"
(do
tmp <- tmpIO
our <- getCurrentDirectory
-- The sed invocation is used to get rid of the differences
-- caused by random file names in goldenVsStringDiff and by the
-- timings.
--
-- NB: cannot use multiline literals because of CPP.
callCommand ("cd " ++ tmp ++ " && example | " ++
"sed -Ee 's/[[:digit:]-]+\\.actual/.actual/g; s/ \\([[:digit:].]+s\\)//' > " ++
our</>"tests/golden/before-accept.actual || true")
)
, after AllFinish "/before --accept/" $ goldenVsFileDiff
"with --accept"
diff
"tests/golden/with-accept.golden"
"tests/golden/with-accept.actual"
(do
tmp <- tmpIO
our <- getCurrentDirectory
callCommand ("cd " ++ tmp ++ " && example --accept | sed -Ee 's/ \\([[:digit:].]+s\\)//' > " ++ our </>"tests/golden/with-accept.actual")
)
, after AllFinish "/with --accept/" $ goldenVsFileDiff
"after --accept"
diff
"tests/golden/after-accept.golden"
"tests/golden/after-accept.actual"
(do
tmp <- tmpIO
our <- getCurrentDirectory
callCommand ("cd " ++ tmp ++ " && example | sed -Ee 's/ \\([[:digit:].]+s\\)//' > " ++ our</>"tests/golden/after-accept.actual")
)
]
#endif
]