@@ -16,6 +16,7 @@ import Test.QuickCheck
1616
1717import Text.Hakyll.Context (Context (..))
1818import Text.Hakyll.Internal.Template
19+import Text.Hakyll.Internal.Template.Template
1920
2021-- Template test group.
2122templateGroup = testGroup "Template"
@@ -26,33 +27,25 @@ templateGroup = testGroup "Template"
2627 ]
2728
2829-- | Generate arbitrary templates from a given length.
29−arbitraryTemplate :: Int -> Gen Template
30−arbitraryTemplate 0 = return End
31−arbitraryTemplate length' = oneof [ do chunk <- chunk'
32− Chunk chunk <$> template'
33− , do key <- key'
34− Identifier key <$> template'
35− , EscapeCharacter <$> template'
36− ]
37− where
38− template' = arbitraryTemplate (length' - 1)
39− -- Generate keys.
40− key' = do l <- choose (5, 10)
41− replicateM l $ choose ('a', 'z')
42− -- Generate non-empty chunks.
43− chunk' = do string <- arbitrary
44− let sanitized = filter (/= '$') string
45− return $ if null sanitized then "foo"
46− else sanitized
30+--
31+instance Arbitrary TemplateElement where
32+ arbitrary = oneof
33+ -- Random chunk
34+ [ Chunk <$> do
35+ string <- arbitrary
36+ let sanitized = filter (/= '$') string
37+ return $ if null sanitized then "foo" else sanitized
38+ -- Random identifier
39+ , fmap Identifier $
40+ choose (5, 10) >>= flip replicateM (choose ('a', 'z'))
41+ -- Escape character
42+ , return EscapeCharacter
43+ ]
4744
4845-- | Make @Template@ testable.
4946instance Arbitrary Template where
50− arbitrary = choose (0, 20) >>= arbitraryTemplate
51−
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]
55− shrink End = []
47+ arbitrary = Template <$> arbitrary
48+ shrink = map Template . shrink . unTemplate
5649
5750-- Test encoding/decoding of templates.
5851prop_template_encode_id :: Template -> Bool