on master help sign in
Re-enable some tests
commitbfa10560f87b1843f9302a70f6c9333fc2731e88 authorJasper Van der Jeugt <m@jaspervdj.be> dateTue 20 Nov 2012, 11:36 (14 years ago) parentb1f70c3
8 files changed+117−149
src/Hakyll/Core/Item.hs+6 tests/Hakyll/Core/DependencyAnalyzer/Tests.hs−70 tests/Hakyll/Core/Identifier/Tests.hs+23−11 tests/Hakyll/Core/Store/Tests.hs+27−26 tests/Hakyll/Core/UnixFilter/Tests.hs+26−39 tests/TestSuite.hs+7−1 tests/TestSuite/Util.hs+14−2 tests/data/russian.md+14
src/Hakyll/Core/Item.hs+6
@@ -5,6 +5,7 @@
55module Hakyll.Core.Item
66 ( Item (..)
77 , itemSetBody
8+ , itemM
89 ) where
910
1011
@@ -39,3 +40,8 @@ instance Binary a => Binary (Item a) where
3940--------------------------------------------------------------------------------
4041itemSetBody :: a -> Item b -> Item a
4142itemSetBody x (Item i _) = Item i x
43+
44+
45+--------------------------------------------------------------------------------
46+itemM :: Monad m => (a -> m b) -> Item a -> m (Item b)
47+itemM f (Item i b) = f b >>= \b' -> return (Item i b')
tests/Hakyll/Core/DependencyAnalyzer/Tests.hsdeleted−70
@@ -1,70 +0,0 @@
1−module Hakyll.Core.DependencyAnalyzer.Tests where
2−
3−import Control.Arrow (second)
4−import qualified Data.Set as S
5−import Data.Monoid (mempty)
6−
7−import Test.Framework
8−import Test.Framework.Providers.HUnit
9−import Test.HUnit hiding (Test)
10−
11−import Hakyll.Core.DirectedGraph
12−import Hakyll.Core.DependencyAnalyzer
13−
14−tests :: [Test]
15−tests =
16− [ testCase "step [1]" step1
17− , testCase "step [2]" step2
18− ]
19−
20−step1 :: Assertion
21−step1 = Just (S.fromList [1, 2, 5, 6, 7, 8, 9]) @?=
22− stepAll (makeDependencyAnalyzer graph isOutOfDate prev)
23− where
24− node = curry $ second S.fromList
25−
26− graph = fromList
27− [ node (8 :: Int) [2, 4, 6]
28− , node 2 [4, 3]
29− , node 4 [3]
30− , node 6 [4]
31− , node 3 []
32− , node 9 [5]
33− , node 5 [7]
34− , node 1 [7]
35− , node 7 []
36− ]
37−
38− prev = fromList
39− [ node 8 [2, 4, 6]
40− , node 2 [4, 3]
41− , node 4 [3]
42− , node 6 [4]
43− , node 3 []
44− , node 9 [5]
45− , node 5 [7]
46− , node 1 [7]
47− , node 7 [8]
48− ]
49−
50− isOutOfDate = (`elem` [5, 2, 6])
51−
52−step2 :: Assertion
53−step2 = Nothing @?= stepAll (makeDependencyAnalyzer graph isOutOfDate mempty)
54− where
55− node = curry $ second S.fromList
56−
57− -- Cycle: 4 -> 7 -> 5 -> 9 -> 4
58− graph = fromList
59− [ node (1 :: Int) [6]
60− , node 2 [3]
61− , node 3 []
62− , node 4 [1, 7, 8]
63− , node 5 [9]
64− , node 6 [3]
65− , node 7 [5]
66− , node 8 [2]
67− , node 9 [4]
68− ]
69−
70− isOutOfDate = const True
tests/Hakyll/Core/Identifier/Tests.hs+23−11
@@ -1,21 +1,30 @@
1+--------------------------------------------------------------------------------
12{-# LANGUAGE OverloadedStrings #-}
23module Hakyll.Core.Identifier.Tests
34 ( tests
45 ) where
56
6−import Test.Framework
7−import Test.HUnit hiding (Test)
87
9−import Hakyll.Core.Identifier
10−import Hakyll.Core.Identifier.Pattern
11−import TestSuite.Util
8+--------------------------------------------------------------------------------
9+import Test.Framework (Test, testGroup)
10+import Test.HUnit ((@=?))
1211
13−tests :: [Test]
14−tests = concat
12+
13+--------------------------------------------------------------------------------
14+import Hakyll.Core.Identifier
15+import Hakyll.Core.Identifier.Pattern
16+import TestSuite.Util
17+
18+
19+--------------------------------------------------------------------------------
20+tests :: Test
21+tests = testGroup "Hakyll.Core.Identifier.Tests" $ concat
1522 [ captureTests
1623 , matchesTests
1724 ]
1825
26+
27+--------------------------------------------------------------------------------
1928captureTests :: [Test]
2029captureTests = fromAssertions "capture"
2130 [ Just ["bar"] @=? capture "foo/**" "foo/bar"
@@ -35,12 +44,15 @@ captureTests = fromAssertions "capture"
3544 , Nothing @=? capture "\\*.jpg" "foo.jpg"
3645 ]
3746
47+
48+--------------------------------------------------------------------------------
3849matchesTests :: [Test]
3950matchesTests = fromAssertions "matches"
40− [ True @=? matches (list ["foo.markdown"]) "foo.markdown"
41− , False @=? matches (list ["foo"]) (Identifier (Just "foo") "foo")
42− , True @=? matches (regex "^foo/[^x]*$") "foo/bar"
43− , False @=? matches (regex "^foo/[^x]*$") "foo/barx"
51+ [ True @=? matches (fromList ["foo.markdown"]) "foo.markdown"
52+ , False @=? matches (fromList ["foo"]) (setVersion (Just "x") "foo")
53+ , True @=? matches (fromVersion (Just "xz")) (setVersion (Just "xz") "bar")
54+ , True @=? matches (fromRegex "^foo/[^x]*$") "foo/bar"
55+ , False @=? matches (fromRegex "^foo/[^x]*$") "foo/barx"
4456 , True @=? matches (complement "foo.markdown") "bar.markdown"
4557 , False @=? matches (complement "foo.markdown") "foo.markdown"
4658 ]
tests/Hakyll/Core/Store/Tests.hs+27−26
@@ -7,12 +7,12 @@ module Hakyll.Core.Store.Tests
77
88--------------------------------------------------------------------------------
99import Data.Typeable (typeOf)
10−import Test.Framework
11−import Test.Framework.Providers.HUnit
12−import Test.Framework.Providers.QuickCheck2
10+import Test.Framework (Test, testGroup)
11+import Test.Framework.Providers.HUnit (testCase)
12+import Test.Framework.Providers.QuickCheck2 (testProperty)
1313import qualified Test.HUnit as H
14−import Test.QuickCheck
15−import Test.QuickCheck.Monadic
14+import qualified Test.QuickCheck as Q
15+import qualified Test.QuickCheck.Monadic as Q
1616
1717
1818--------------------------------------------------------------------------------
@@ -21,8 +21,8 @@ import TestSuite.Util
2121
2222
2323--------------------------------------------------------------------------------
24−tests :: [Test]
25−tests =
24+tests :: Test
25+tests = testGroup "Hakyll.Core.Store.Tests"
2626 [ testProperty "simple get . set" simpleSetGet
2727 , testProperty "persistent get . set" persistentSetGet
2828 , testCase "WrongType get . set" wrongType
@@ -30,33 +30,34 @@ tests =
3030
3131
3232--------------------------------------------------------------------------------
33−simpleSetGet :: Property
34−simpleSetGet = monadicIO $ do
35− key <- pick arbitrary
36− value <- pick arbitrary
37− store <- run $ makeStoreTest
38− run $ Store.set store key (value :: String)
39− value' <- run $ Store.get store key
40− assert $ Store.Found value == value'
33+simpleSetGet :: Q.Property
34+simpleSetGet = Q.monadicIO $ do
35+ key <- Q.pick Q.arbitrary
36+ value <- Q.pick Q.arbitrary
37+ store <- Q.run newTestStore
38+ Q.run $ Store.set store key (value :: String)
39+ value' <- Q.run $ Store.get store key
40+ Q.assert $ Store.Found value == value'
41+ Q.run cleanTestStore
4142
4243
4344--------------------------------------------------------------------------------
44−persistentSetGet :: Property
45−persistentSetGet = monadicIO $ do
46− key <- pick arbitrary
47− value <- pick arbitrary
48− store1 <- run $ makeStoreTest
49− run $ Store.set store1 key (value :: String)
45+persistentSetGet :: Q.Property
46+persistentSetGet = Q.monadicIO $ do
47+ key <- Q.pick Q.arbitrary
48+ value <- Q.pick Q.arbitrary
49+ store1 <- Q.run newTestStore
50+ Q.run $ Store.set store1 key (value :: String)
5051 -- Now Create another store from the same dir to test persistence
51− store2 <- run $ makeStoreTest
52− value' <- run $ Store.get store2 key
53− assert $ Store.Found value == value'
52+ store2 <- Q.run newTestStore
53+ value' <- Q.run $ Store.get store2 key
54+ Q.assert $ Store.Found value == value'
55+ Q.run cleanTestStore
5456
5557
5658--------------------------------------------------------------------------------
5759wrongType :: H.Assertion
58−wrongType = do
59− store <- makeStoreTest
60+wrongType = withTestStore $ \store -> do
6061 -- Store a string and try to fetch an int
6162 Store.set store ["foo", "bar"] ("qux" :: String)
6263 value <- Store.get store ["foo", "bar"] :: IO (Store.Result Int)
tests/Hakyll/Core/UnixFilter/Tests.hs+26−39
@@ -1,50 +1,37 @@
1+--------------------------------------------------------------------------------
12{-# LANGUAGE OverloadedStrings #-}
23module Hakyll.Core.UnixFilter.Tests
3− where
4+ ( tests
5+ ) where
46
5−import Control.Arrow ((>>>))
6−import qualified Data.Map as M
77
8−import Test.Framework (Test)
9−import Test.Framework.Providers.HUnit (testCase)
10−import qualified Test.HUnit as H
11−import qualified Data.Text.Lazy as TL
12−import qualified Data.Text.Lazy.Encoding as TL
8+--------------------------------------------------------------------------------
9+import Test.Framework (Test, testGroup)
10+import Test.Framework.Providers.HUnit (testCase)
11+import qualified Test.HUnit as H
1312
14−import Hakyll.Core.Compiler
15−import Hakyll.Core.Resource.Provider.Dummy
16−import Hakyll.Core.UnixFilter
17−import TestSuite.Util
1813
19−tests :: [Test]
20−tests =
14+--------------------------------------------------------------------------------
15+import Hakyll.Core.Compiler
16+import Hakyll.Core.Item
17+import Hakyll.Core.UnixFilter
18+import TestSuite.Util
19+
20+
21+--------------------------------------------------------------------------------
22+tests :: Test
23+tests = testGroup "Hakyll.Core.UnixFilter.Tests"
2124 [ testCase "unixFilter rev" unixFilterRev
2225 ]
2326
27+
28+--------------------------------------------------------------------------------
2429unixFilterRev :: H.Assertion
25−unixFilterRev = do
26− provider <- dummyResourceProvider $ M.singleton "foo" $
27− TL.encodeUtf8 $ TL.pack text
28− output <- runCompilerJobTest compiler "foo" provider ["foo"]
29− H.assert $ rev text == lines output
30+unixFilterRev = withTestStore $ \store -> do
31+ provider <- newTestProvider store
32+ output <- testCompilerDone store provider "russian.md" compiler
33+ expected <- testCompilerDone store provider "russian.md" getResourceString
34+ H.assert $ rev (itemBody expected) == lines (itemBody output)
3035 where
31− compiler = getResource >>> getResourceString >>> unixFilter "rev" []
32− rev = map reverse . lines
33−
34−text :: String
35−text = unlines
36− [ "Статья 18"
37− , ""
38− , "Каждый человек имеет право на свободу мысли, совести и религии; это"
39− , "право включает свободу менять свою религию или убеждения и свободу"
40− , "исповедовать свою религию или убеждения как единолично, так и сообща с"
41− , "другими, публичным или частным порядком в учении, богослужении и"
42− , "выполнении религиозных и ритуальных обрядов."
43− , ""
44− , "Статья 19"
45− , ""
46− , "Каждый человек имеет право на свободу убеждений и на свободное выражение"
47− , "их; это право включает свободу беспрепятственно придерживаться своих"
48− , "убеждений и свободу искать, получать и распространять информацию и идеи"
49− , "любыми средствами и независимо от государственных границ."
50− ]
36+ compiler = getResourceString >>= itemM (unixFilter "rev" [])
37+ rev = map reverse . lines
tests/TestSuite.hs+7−1
@@ -5,12 +5,15 @@ module Main
55
66
77--------------------------------------------------------------------------------
8−import Test.Framework (defaultMain)
8+import Test.Framework (defaultMain)
99
1010
1111--------------------------------------------------------------------------------
1212import qualified Hakyll.Core.Dependencies.Tests
13+import qualified Hakyll.Core.Identifier.Tests
1314import qualified Hakyll.Core.Provider.Tests
15+import qualified Hakyll.Core.Store.Tests
16+import qualified Hakyll.Core.UnixFilter.Tests
1417import qualified Hakyll.Web.Template.Tests
1518
1619
@@ -18,6 +21,9 @@ import qualified Hakyll.Web.Template.Tests
1821main :: IO ()
1922main = defaultMain
2023 [ Hakyll.Core.Dependencies.Tests.tests
24+ , Hakyll.Core.Identifier.Tests.tests
2125 , Hakyll.Core.Provider.Tests.tests
26+ , Hakyll.Core.Store.Tests.tests
27+ , Hakyll.Core.UnixFilter.Tests.tests
2228 , Hakyll.Web.Template.Tests.tests
2329 ]
tests/TestSuite/Util.hs+14−2
@@ -2,6 +2,8 @@
22-- | Test utilities
33module TestSuite.Util
44 ( fromAssertions
5+ , newTestStore
6+ , cleanTestStore
57 , withTestStore
68 , newTestProvider
79 , testCompiler
@@ -35,12 +37,22 @@ fromAssertions name = zipWith testCase names
3537 names = map (\n -> name ++ " [" ++ show n ++ "]") [1 :: Int ..]
3638
3739
40+--------------------------------------------------------------------------------
41+newTestStore :: IO Store
42+newTestStore = Store.new True "_teststore"
43+
44+
45+--------------------------------------------------------------------------------
46+cleanTestStore :: IO ()
47+cleanTestStore = removeDirectoryRecursive "_teststore"
48+
49+
3850--------------------------------------------------------------------------------
3951withTestStore :: (Store -> IO a) -> IO a
4052withTestStore f = do
41− store <- Store.new True "_teststore"
53+ store <- newTestStore
4254 result <- f store
43− removeDirectoryRecursive "_teststore"
55+ cleanTestStore
4456 return result
4557
4658
tests/data/russian.mdnew file+14
@@ -0,0 +1,14 @@
1+Статья 18
2+
3+Каждый человек имеет право на свободу мысли, совести и религии; это
4+право включает свободу менять свою религию или убеждения и свободу
5+исповедовать свою религию или убеждения как единолично, так и сообща с
6+другими, публичным или частным порядком в учении, богослужении и
7+выполнении религиозных и ритуальных обрядов.
8+
9+Статья 19
10+
11+Каждый человек имеет право на свободу убеждений и на свободное выражение
12+их; это право включает свободу беспрепятственно придерживаться своих
13+убеждений и свободу искать, получать и распространять информацию и идеи
14+любыми средствами и независимо от государственных границ.