@@ -16,6 +16,7 @@ import Test.QuickCheck
17import Text.Hakyll.Context (Context (..))
17import Text.Hakyll.Context (Context (..))
18import Text.Hakyll.Internal.Template
18import Text.Hakyll.Internal.Template
19+import Text.Hakyll.Internal.Template.Template
20-- Template test group.
21-- Template test group.
21templateGroup = testGroup "Template"
22templateGroup = testGroup "Template"
@@ -26,33 +27,25 @@ templateGroup = testGroup "Template"
28-- | Generate arbitrary templates from a given length.
29-- | Generate arbitrary templates from a given length.
29−arbitraryTemplate :: Int -> Gen Template
30+--
30−arbitraryTemplate 0 = return End
31+instance Arbitrary TemplateElement where
31−arbitraryTemplate length' = oneof [ do chunk <- chunk'
32+ arbitrary = oneof
32− Chunk chunk <$> template'
34+ [ Chunk <$> do
34− Identifier key <$> template'
35− , EscapeCharacter <$> template'
38− template' = arbitraryTemplate (length' - 1)
40− key' = do l <- choose (5, 10)
41− replicateM l $ choose ('a', 'z')
42− -- Generate non-empty chunks.
43− chunk' = do string <- arbitrary
35+ string <- arbitrary
44− let sanitized = filter (/= '$') string
36+ let sanitized = filter (/= '$') string
45− return $ if null sanitized then "foo"
37+ return $ if null sanitized then "foo" else sanitized
46− else sanitized
38+ -- Random identifier
40+ choose (5, 10) >>= flip replicateM (choose ('a', 'z'))
42+ , return EscapeCharacter
48-- | Make @Template@ testable.
45-- | Make @Template@ testable.
49instance Arbitrary Template where
46instance Arbitrary Template where
50− arbitrary = choose (0, 20) >>= arbitraryTemplate
47+ arbitrary = Template <$> arbitrary
51−
48+ shrink = map Template . shrink . unTemplate
52− shrink (Chunk chunk template) = [template, Chunk chunk End]
53− shrink (Identifier key template) = [template, Identifier key End]
54− shrink (EscapeCharacter template) = [template, EscapeCharacter End]
57-- Test encoding/decoding of templates.
50-- Test encoding/decoding of templates.
58prop_template_encode_id :: Template -> Bool
51prop_template_encode_id :: Template -> Bool