on master help sign in
Made Arbitrary Page instance.
commit8e78fe04f69f3d3ff444518844f6755fd379a6aa authorJasper Van der Jeugt <jaspervdj@gmail.com> dateMon 25 Jan 2010, 15:12 (17 years ago) parentd415007
3 files changed+41−2
src/Text/Hakyll/Page.hs+17−2 tests/Main.hs+2 tests/Page.hs+22
src/Text/Hakyll/Page.hs+17−2
@@ -11,10 +11,11 @@ import qualified Data.Map as M
1111import Data.List (isPrefixOf)
1212import Data.Char (isSpace)
1313import Data.Maybe (fromMaybe)
14−import Control.Monad (liftM)
14+import Control.Monad (liftM, replicateM)
1515import Control.Monad.Reader (liftIO)
1616import System.FilePath (takeExtension, (</>))
1717
18+import Test.QuickCheck
1819import Text.Pandoc
1920import Data.Binary
2021
@@ -29,7 +30,7 @@ import Text.Hakyll.Regex (substituteRegex, matchesRegex)
2930-- | A Page is basically key-value mapping. Certain keys have special
3031-- meanings, like for example url, body and title.
3132data Page = Page Context
32− deriving (Show, Read)
33+ deriving (Show, Read, Eq)
3334
3435-- | Create a Page from a key-value mapping.
3536fromContext :: Context -> Page
@@ -156,3 +157,17 @@ instance Renderable Page where
156157instance Binary Page where
157158 put (Page context) = put $ M.toAscList context
158159 get = liftM (Page . M.fromAscList) get
160+
161+-- | Generate an arbitrary page.
162+arbitraryPage :: Gen Page
163+arbitraryPage = do keys <- listOf key'
164+ values <- arbitrary
165+ return $ Page $ M.fromList $ zip keys values
166+ where
167+ key' = do l <- choose (5, 10)
168+ replicateM l $ choose ('a', 'z')
169+
170+-- Make pages testable
171+instance Arbitrary Page where
172+ arbitrary = arbitraryPage
173+ shrink (Page context) = map (Page . flip M.delete context) $ M.keys context
tests/Main.hs+2
@@ -7,6 +7,7 @@ import Test.Framework.Providers.QuickCheck2
77import CompressCSS
88import Context
99import File
10+import Page
1011import Regex
1112import Template
1213import Util
@@ -14,6 +15,7 @@ import Util
1415main = defaultMain [ compressCSSGroup
1516 , contextGroup
1617 , fileGroup
18+ , pageGroup
1719 , regexGroup
1820 , templateGroup
1921 , utilGroup
tests/Page.hsnew file+22
@@ -0,0 +1,22 @@
1+module Page
2+ ( pageGroup
3+ ) where
4+
5+import qualified Data.Map as M
6+
7+import Data.Binary
8+import Test.Framework (testGroup)
9+import Test.Framework.Providers.HUnit
10+import Test.Framework.Providers.QuickCheck2
11+import Test.HUnit
12+
13+import Text.Hakyll.Page
14+
15+-- Page test group.
16+pageGroup = testGroup "Page"
17+ [ testProperty "prop_page_encode_id" prop_page_encode_id
18+ ]
19+
20+-- Test encoding/decoding of pages.
21+prop_page_encode_id :: Page -> Bool
22+prop_page_encode_id page = decode (encode page) == page