1module Test.TestUtil where
2
3import Test.QuickCheck.Property
4import Test.Tasty
5import Test.Tasty.HUnit
6import Test.Tasty.QuickCheck
7
8assertFailure' :: String -> IO a
9assertFailure' s = do
10    _ <- assertFailure s -- returns () in some versions
11    return undefined
12
13assertJust :: Maybe a -> IO a
14assertJust (Just a) = return a
15assertJust Nothing = assertFailure' "Nothing"
16
17class NameTest a where
18    nameTest :: String -> a -> TestTree
19
20instance NameTest [TestTree] where
21    nameTest = testGroup
22
23instance NameTest Assertion where
24    nameTest = Test.Tasty.HUnit.testCase
25
26instance NameTest Property where
27    nameTest = testProperty
28
29instance NameTest Result where
30    nameTest name = nameTest name . property
31
32instance (Arbitrary a, Show a, Testable b) => NameTest (a -> b) where
33    nameTest name = nameTest name . property
34
35tgroup :: (Show a, NameTest t) => [a] -> (a -> t) -> [TestTree]
36tgroup aa f = fmap (\a -> nameTest (show a) $ f a) aa
37