import Control.Concurrent (threadDelay)
import Test.Tasty
import Test.Tasty.ExpectedFailure
import Test.Tasty.Golden
import Test.Tasty.HUnit
-- n.b. running via `cabal v2-test` outputs plaintext, but running via
-- `cabal v2-run test:expected-fail-tests` will generate colorized
-- output. It's adviseable to visually inspect this output to ensure
-- that "PASS (unexpected)" is rendered in Red and "FAIL (expected)"
-- is rendered in Green.
main = defaultMain $
localOption (mkTimeout 1000000) $ -- 1s
testGroup "Expected Failures" $
[ testCase "clearly good" $ 1 + 1 @=? 2
, expectFail $ testCase "clearly bad" $ 1 + 1 @=? 3
-- n.b. uncomment this to observe the results of a test that was
-- , expectFail $ testCase "also good" $ 1 + 2 @=? 3
, expectFail $ expectFail $ testCase "two wrongs make a right" $ 1 + 1 @=? 2
, expectFail $ testCase "throws failure" $ fail "bad"
, expectFail $ testCase "throws error" $ error "also bad"
, expectFail $ testCase "takes too long" $ threadDelay 2000000
, expectFail $ goldenVsString "hello" "hello.out" $ return $ error "not golden"
]