1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
import Data.Char
import qualified Data.Map as M
import Test.Framework (defaultMain, testGroup)
import Test.Framework.Providers.QuickCheck2
import Test.Framework.Providers.HUnit
import Test.QuickCheck
import Test.HUnit
import Text.Hakyll.CompressCSS
import Text.Hakyll.Util
import Text.Hakyll.Regex
import Text.Hakyll.Context
import Text.Hakyll.File
main = defaultMain tests
tests = [ testGroup "Util group"
[ testProperty "trim length" prop_trim_length
-- , testProperty "trim id" prop_trim_id
-- , testProperty "trim empty" prop_trim_empty
, testCase "stripHTML 1" test_strip_html1
, testCase "stripHTML 2" test_strip_html2
, testCase "stripHTML 3" test_strip_html3
, testCase "link 1" test_link1
, testCase "link 2" test_link2
]
, testGroup "Regex group"
[ testCase "splitRegex 1" test_split_regex1
, testCase "splitRegex 2" test_split_regex2
]
, testGroup "CompressCSS group"
[ testProperty "compressCSS length" prop_compress_css_length
, testCase "compressCSS 1" test_compress_css1
, testCase "compressCSS 2" test_compress_css2
, testCase "compressCSS 3" test_compress_css3
, testCase "compressCSS 4" test_compress_css4
]
, testGroup "Context group"
[ testCase "renderDate 1" test_render_date1
, testCase "renderDate 2" test_render_date1
, testCase "changeExtension 1" test_change_extension1
]
, testGroup "File group"
[ testCase "toRoot 1" test_to_root1
, testCase "toRoot 2" test_to_root2
, testCase "toRoot 3" test_to_root3
, testCase "removeSpaces 1" test_remove_spaces1
, testCase "removeSpaces 2" test_remove_spaces2
-- , testProperty "havingExtension count" prop_having_extension_count
, testCase "havingExtension 1" test_having_extension1
, testCase "havingExtension 2" test_having_extension2
]
]
-- Test that a string always becomes shorter when trimmed.
prop_trim_length str = length str >= length (trim str)
-- Check that a string which does not start or end with a space is not trimmed.
prop_trim_id str = isAlreadyTrimmed ==> str == (trim str)
where
isAlreadyTrimmed :: Bool
isAlreadyTrimmed = (not $ isSpace $ head str) && (not $ isSpace $ last str)
-- An string of only spaces should be reduced to an empty string.
prop_trim_empty str = (all isSpace str) ==> null (trim str)
-- Strip HTML test cases.
test_strip_html1 = stripHTML "<b>text</b>" @?= "text"
test_strip_html2 = stripHTML "text" @?= "text"
test_strip_html3 =
stripHTML "<b>Hakyll</b>, a <i>website</i> generator<img src=\"foo.png\" />"
@?= "Hakyll, a website generator"
-- Link test cases.
test_link1 = link "foo bar" "/foo/bar.html"
@?= "<a href=\"/foo/bar.html\">foo bar</a>"
test_link2 = link "back home" "/" @?= "<a href=\"/\">back home</a>"
-- Split Regex test cases.
test_split_regex1 = splitRegex "," "1,2,3" @?= ["1", "2", "3"]
test_split_regex2 = splitRegex "," ",1,2," @?= ["1", "2"]
-- CSS compression should always decrease the text length.
prop_compress_css_length str = length str >= length (compressCSS str)
-- Compress CSS test cases.
test_compress_css1 = compressCSS "a { \n color : red; }" @?= "a{color:red}"
test_compress_css2 = compressCSS "img {border :none;;;; }"
@?= "img{border:none}"
test_compress_css3 =
compressCSS "p {font-size : 90%;} h1 {color :white;;; }"
@?= "p{font-size:90%}h1{color:white}"
test_compress_css4 = compressCSS "a { /* /* red is pretty cool */ color: red; }"
@?= "a{color:red}"
-- Date rendering test cases.
test_render_date1 =
M.lookup "date" rendered @?= Just "December 30, 2009"
where
rendered = renderDate "date" "%B %e, %Y" "Unknown date"
(M.singleton "path" "2009-12-30-a-title.markdown")
test_render_date2 = M.lookup "date" rendered @?= Just "Unknown date"
where
rendered = renderDate "date" "%B %e, %Y" "Unknown date" $
M.singleton "path" "2009-badness-30-a-title.markdown"
-- changeExtension test cases.
test_change_extension1 = M.lookup "url" rendered @?= Just "foo.php"
where
rendered = changeExtension "php" (M.singleton "url" "foo.html")
-- toRoot test cases
test_to_root1 = toRoot "/posts/foo.html" @?= ".."
test_to_root2 = toRoot "posts/foo.html" @?= ".."
test_to_root3 = toRoot "foo.html" @?= "."
-- removeSpaces test cases
test_remove_spaces1 = removeSpaces "$root/tags/random crap.html"
@?= "$root/tags/random-crap.html"
test_remove_spaces2 = removeSpaces "another simple example.zip"
@?= "another-simple-example.zip"
-- Add an extension, and test that they have that extension
prop_having_extension_count names extension =
not (any ('.' `elem`) names || any (`elem` extension) "./\\")
==> havingExtension fullExtension withExtensions == withExtensions
where
fullExtension = '.' : extension
withExtensions = map (++ fullExtension) names
-- Having extension test cases
test_having_extension1 = havingExtension ".foo" ["file.bar", "file.txt"] @?= []
test_having_extension2 = havingExtension ".foo" ["file.foo", "file.txt"]
@?= ["file.foo"]
|