module Test (allTests) where
import System.Exit (ExitCode (..))
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.ExpectedFailure (expectFailBecause)
import Test.Tasty.Process
second :: Integer
second = 1000000
simpleTest :: TestTree
simpleTest =
setTimeout (1 * second) $
processTest
"Simple test"
defaultProcess
{ process = proc "test-executable-simple" []
, stdoutCheck = equals "Hello, world!\n"
, stderrCheck = equals "Hello, stderr!\n"
, exitCodeCheck = equals ExitSuccess
}
echoTest :: TestTree
echoTest =
setTimeout (1 * second) $
processTest
"Echo test"
defaultProcess
{ process = proc "test-executable-echo" []
, input = Just "Echo!"
, stdoutCheck = equals "Echo!"
}
failedEchoTest :: TestTree
failedEchoTest =
expectFailBecause "Expected '!ochE', but get 'Echo!'" $
processTest
"Failed echo test"
defaultProcess
{ process = proc "test-executable-echo" []
, input = Just "Echo!"
, stdoutCheck = equals "!ochE"
}
exitCodeTest :: TestTree
exitCodeTest =
processTest
"Exit code test"
defaultProcess
{ process = proc "test-executable-exitcode" []
, exitCodeCheck = equals (ExitFailure 123)
}
failedExitCodeTest :: TestTree
failedExitCodeTest =
expectFailBecause "Expected exit code 321, but get 123" $
processTest
"Failed exit code test"
defaultProcess
{ process = proc "test-executable-exitcode" []
, exitCodeCheck = equals (ExitFailure 321)
}
timeoutTest :: TestTree
timeoutTest =
expectFailBecause "Should timeout after 1s" $
setTimeout (1 * second) $
processTest
"Timeout test"
defaultProcess
{ process = proc "test-executable-sleep" []
}
allTests :: TestTree
allTests =
testGroup
"Test"
[ simpleTest
, echoTest
, failedEchoTest
, exitCodeTest
, failedExitCodeTest
, timeoutTest
]