Refactor Selftest, add more tests for matchVersionedFilePath.
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Tue, 16 Feb 2016 23:10:12 +0000 (23:10 +0000)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Tue, 16 Feb 2016 23:10:12 +0000 (23:10 +0000)
src/Rules/Selftest.hs

index 5fafda5..70a4023 100644 (file)
@@ -15,24 +15,42 @@ instance Arbitrary Way where
 instance Arbitrary WayUnit where
     arbitrary = arbitraryBoundedEnum
 
+test :: Testable a => a -> Action ()
+test = liftIO . quickCheck
+
 selftestRules :: Rules ()
 selftestRules =
     "selftest" ~> do
-        test $ \(x :: Way) -> read (show x) == x
-        test $ \n xs ->
-            let res = chunksOfSize n xs
-            in concat res == xs && all (\r -> length r == 1 || length (concat r) <= n) res
-        test $ chunksOfSize 3 ["a","b","c","defg","hi","jk"] == [["a","b","c"],["defg"],["hi"],["jk"]]
-
-        test $ matchVersionedFilePath "foo/bar"  ".a" "foo/bar.a"     == True
-        test $ matchVersionedFilePath "foo/bar"  ".a" "foo\\bar.a"    == True
-        test $ matchVersionedFilePath "foo/bar"  "a"  "foo/bar.a"     == True
-        test $ matchVersionedFilePath "foo/bar"  ""   "foo/bar.a"     == False
-        test $ matchVersionedFilePath "foo/bar"  "a"  "foo/bar-0.1.a" == True
-        test $ matchVersionedFilePath "foo/bar-" "a"  "foo/bar-0.1.a" == True
-        test $ matchVersionedFilePath "foo/bar/" "a"  "foo/bar-0.1.a" == False
-
-        -- TODO: add automated tests for matchVersionedFilePath too
-
-test :: Testable a => a -> Action ()
-test = liftIO . quickCheck
+        testWays
+        testChunksOfSize
+        testMatchVersionedFilePath
+
+testWays :: Action ()
+testWays = do
+    putBuild $ "==== Read Way, Show Way"
+    test $ \(x :: Way) -> read (show x) == x
+
+testChunksOfSize :: Action ()
+testChunksOfSize = do
+    putBuild $ "==== chunksOfSize"
+    test $ chunksOfSize 3 [  "a", "b", "c" ,  "defg" ,  "hi" ,  "jk"  ]
+                       == [ ["a", "b", "c"], ["defg"], ["hi"], ["jk"] ]
+    test $ \n xs ->
+        let res = chunksOfSize n xs
+        in concat res == xs && all (\r -> length r == 1 || length (concat r) <= n) res
+
+testMatchVersionedFilePath :: Action ()
+testMatchVersionedFilePath = do
+    putBuild $ "==== matchVersionedFilePath"
+    test $ matchVersionedFilePath "foo/bar"  ".a" "foo/bar.a"     == True
+    test $ matchVersionedFilePath "foo/bar"  ".a" "foo\\bar.a"    == False
+    test $ matchVersionedFilePath "foo/bar"  "a"  "foo/bar.a"     == True
+    test $ matchVersionedFilePath "foo/bar"  ""   "foo/bar.a"     == False
+    test $ matchVersionedFilePath "foo/bar"  "a"  "foo/bar-0.1.a" == True
+    test $ matchVersionedFilePath "foo/bar-" "a"  "foo/bar-0.1.a" == True
+    test $ matchVersionedFilePath "foo/bar/" "a"  "foo/bar-0.1.a" == False
+
+    test $ \prefix suffix -> forAll versions $ \version ->
+        matchVersionedFilePath prefix suffix (prefix ++ version ++ suffix)
+  where
+    versions = listOf . elements $ '-' : '.' : ['0'..'9']