File: Tests.hs

package info (click to toggle)
haskell-feed 1.3.2.1-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 816 kB
  • sloc: haskell: 4,735; xml: 4,315; makefile: 2
file content (295 lines) | stat: -rw-r--r-- 10,907 bytes parent folder | download | duplicates (4)
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
module Text.RSS.Export.Tests
  ( rssExportTests
  ) where

import Prelude.Compat

import Data.Text (pack)
import Data.XML.Types as XML
import Test.Framework (Test, mutuallyExclusive, testGroup)
import Test.Framework.Providers.HUnit (testCase)
import Test.HUnit (Assertion, assertEqual)
import Text.RSS.Equals ()
import Text.RSS.Export
import Text.RSS.Syntax
import Text.RSS.Utils

rssExportTests :: Test
rssExportTests =
  testGroup
    "Text.RSS.Export"
    [ mutuallyExclusive $
      testGroup
        "RSS export"
        [ testCreateXMLImage
        , testCreateXMLCloud
        , testCreateXMLTextInput
        , testCreateEmptyXMLSkipHours
        , testCreateXMLSkipHours
        , testCreateEmptyXMLSkipDays
        , testCreateXMLSkipDays
        , testCreateXMLAttr
        , testCreateXMLLeaf
        ]
    ]

testCreateXMLImage :: Test
testCreateXMLImage = testCase "should create image as xml" testImage
  where
    testImage :: Assertion
    testImage = do
      let other =
            XML.Element
              { elementName = createQName "other"
              , elementAttributes = [] :: [Attr]
              , elementNodes = [createContent "image other"]
              }
      let image =
            RSSImage
              { rssImageURL = "image url"
              , rssImageTitle = "image title"
              , rssImageLink = "image link"
              , rssImageWidth = Just 100
              , rssImageHeight = Just 200
              , rssImageDesc = Just "image desc"
              , rssImageOther = [other]
              }
      let expected =
            XML.Element
              { elementName = createQName "image"
              , elementAttributes = [] :: [Attr]
              , elementNodes =
                  [ NodeElement
                      XML.Element
                        { elementName = createQName "url"
                        , elementAttributes = [] :: [Attr]
                        , elementNodes = [createContent "image url"]
                        }
                  , NodeElement
                      XML.Element
                        { elementName = createQName "title"
                        , elementAttributes = [] :: [Attr]
                        , elementNodes = [createContent "image title"]
                        }
                  , NodeElement
                      XML.Element
                        { elementName = createQName "link"
                        , elementAttributes = [] :: [Attr]
                        , elementNodes = [createContent "image link"]
                        }
                  , NodeElement
                      XML.Element
                        { elementName = createQName "width"
                        , elementAttributes = [] :: [Attr]
                        , elementNodes = [createContent "100"]
                        }
                  , NodeElement
                      XML.Element
                        { elementName = createQName "height"
                        , elementAttributes = [] :: [Attr]
                        , elementNodes = [createContent "200"]
                        }
                  , NodeElement
                      XML.Element
                        { elementName = createQName "description"
                        , elementAttributes = [] :: [Attr]
                        , elementNodes = [createContent "image desc"]
                        }
                  , NodeElement
                      XML.Element
                        { elementName = createQName "other"
                        , elementAttributes = [] :: [Attr]
                        , elementNodes = [createContent "image other"]
                        }
                  ]
              }
      assertEqual "image" expected (xmlImage image)

testCreateXMLCloud :: Test
testCreateXMLCloud = testCase "should create cloud as xml" testCloud
  where
    testCloud :: Assertion
    testCloud = do
      let attr = mkNAttr (createQName "attr") "text for attr"
      let cloud =
            RSSCloud
              { rssCloudDomain = Just "domain cloud"
              , rssCloudPort = Just "port cloud"
              , rssCloudPath = Just "path cloud"
              , rssCloudRegisterProcedure = Just "register cloud"
              , rssCloudProtocol = Just "protocol cloud"
              , rssCloudAttrs = [attr]
              }
      let expected =
            XML.Element
              { elementName = createQName "cloud"
              , elementAttributes =
                  [ mkNAttr (createQName "domain") "domain cloud"
                  , mkNAttr (createQName "port") "port cloud"
                  , mkNAttr (createQName "path") "path cloud"
                  , mkNAttr (createQName "registerProcedure") "register cloud"
                  , mkNAttr (createQName "protocol") "protocol cloud"
                  , attr
                  ] :: [Attr]
              , elementNodes = [createContent ""]
              }
      assertEqual "cloud" expected (xmlCloud cloud)

testCreateXMLTextInput :: Test
testCreateXMLTextInput = testCase "should create text input as xml" textInput
  where
    textInput :: Assertion
    textInput = do
      let attr = mkNAttr (createQName "attr") "text for attr"
      let other =
            XML.Element
              { elementName = createQName "leaf"
              , elementAttributes = [] :: [Attr]
              , elementNodes = [createContent "text for leaf"]
              }
      let input =
            RSSTextInput
              { rssTextInputTitle = "title"
              , rssTextInputDesc = "desc"
              , rssTextInputName = "name"
              , rssTextInputLink = "http://url.com"
              , rssTextInputAttrs = [attr]
              , rssTextInputOther = [other]
              }
      let expected =
            XML.Element
              { elementName = createQName "textInput"
              , elementAttributes = [attr] :: [Attr]
              , elementNodes =
                  [ NodeElement
                      XML.Element
                        { elementName = createQName "title"
                        , elementAttributes = [] :: [Attr]
                        , elementNodes = [createContent "title"]
                        }
                  , NodeElement
                      XML.Element
                        { elementName = createQName "description"
                        , elementAttributes = [] :: [Attr]
                        , elementNodes = [createContent "desc"]
                        }
                  , NodeElement
                      XML.Element
                        { elementName = createQName "name"
                        , elementAttributes = [] :: [Attr]
                        , elementNodes = [createContent "name"]
                        }
                  , NodeElement
                      XML.Element
                        { elementName = createQName "link"
                        , elementAttributes = [] :: [Attr]
                        , elementNodes = [createContent "http://url.com"]
                        }
                  , NodeElement
                      XML.Element
                        { elementName = createQName "leaf"
                        , elementAttributes = [] :: [Attr]
                        , elementNodes = [createContent "text for leaf"]
                        }
                  ]
              }
      assertEqual "text input" expected (xmlTextInput input)

testCreateEmptyXMLSkipHours :: Test
testCreateEmptyXMLSkipHours =
  testCase "should create an empty list of skip hours as xml" emptySkipHours
  where
    emptySkipHours :: Assertion
    emptySkipHours = do
      let hoursToSkip = []
      let expected =
            XML.Element
              { elementName = createQName "skipHours"
              , elementAttributes = [] :: [Attr]
              , elementNodes = []
              }
      assertEqual "empty skip hours" expected (xmlSkipHours hoursToSkip)

testCreateXMLSkipHours :: Test
testCreateXMLSkipHours = testCase "should create skip hours as xml" skipHours
  where
    skipHours :: Assertion
    skipHours = do
      let hoursToSkip = [1, 2, 3]
      let expected =
            XML.Element
              { elementName = createQName "skipHours"
              , elementAttributes = [] :: [Attr]
              , elementNodes = [hourElem 0, hourElem 1, hourElem 2]
              }
            where
              hourElem ind =
                NodeElement
                  XML.Element
                    { elementName = createQName "hour"
                    , elementAttributes = [] :: [Attr]
                    , elementNodes = [createContent $ pack $ show $ hoursToSkip !! ind]
                    }
      assertEqual "skip hours" expected (xmlSkipHours hoursToSkip)

testCreateEmptyXMLSkipDays :: Test
testCreateEmptyXMLSkipDays =
  testCase "should create an empty list of skip days as xml" emptySkipDays
  where
    emptySkipDays :: Assertion
    emptySkipDays = do
      let daysToSkip = []
      let expected =
            XML.Element
              { elementName = createQName "skipDays"
              , elementAttributes = [] :: [Attr]
              , elementNodes = []
              }
      assertEqual "empty skip days" expected (xmlSkipDays daysToSkip)

testCreateXMLSkipDays :: Test
testCreateXMLSkipDays = testCase "should create skip days as xml" skipDays
  where
    skipDays :: Assertion
    skipDays = do
      let daysToSkip = ["first day", "second day", "third day"]
      let expected =
            XML.Element
              { elementName = createQName "skipDays"
              , elementAttributes = [] :: [Attr]
              , elementNodes = [dayElem 0, dayElem 1, dayElem 2]
              }
            where
              dayElem ind =
                NodeElement
                  XML.Element
                    { elementName = createQName "day"
                    , elementAttributes = [] :: [Attr]
                    , elementNodes = [createContent $ daysToSkip !! ind]
                    }
      assertEqual "skip days" expected (xmlSkipDays daysToSkip)

testCreateXMLAttr :: Test
testCreateXMLAttr = testCase "should create attr as xml" createXMLAttr
  where
    createXMLAttr :: Assertion
    createXMLAttr = do
      let tg = "attr"
      let txt = "example of attr value"
      let expected = mkNAttr (createQName tg) txt
      assertEqual "create a leaf" expected (xmlAttr tg txt)

testCreateXMLLeaf :: Test
testCreateXMLLeaf = testCase "should create leaf as xml" createXMLLeaf
  where
    createXMLLeaf :: Assertion
    createXMLLeaf = do
      let tg = "leaf"
      let txt = "example of leaf text"
      let expected =
            XML.Element
              { elementName = createQName tg
              , elementAttributes = [] :: [Attr]
              , elementNodes = [createContent txt]
              }
      assertEqual "create a leaf" expected (xmlLeaf tg txt)