reapack-index 1.0beta2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,403 @@
1
+ require File.expand_path '../helper', __FILE__
2
+
3
+ class TestMetadata < MiniTest::Test
4
+ include XMLHelper
5
+
6
+ def test_website_link
7
+ before = make_node '<index/>'
8
+ after = <<-XML
9
+ <index>
10
+ <metadata>
11
+ <link rel="website">http://cfillion.tk</link>
12
+ </metadata>
13
+ </index>
14
+ XML
15
+
16
+ md = ReaPack::Index::Metadata.new before
17
+ assert_empty md.links(:website)
18
+
19
+ link = md.push_link :website, 'http://cfillion.tk'
20
+ assert_equal true, link.is_new?
21
+ assert_equal true, link.modified?
22
+
23
+ links = md.links :website
24
+ assert_equal 1, links.size
25
+ assert_equal links.first.url, links.first.name
26
+ assert_equal 'http://cfillion.tk', links.first.url
27
+
28
+ assert_equal false, links.first.is_new?
29
+ assert_equal false, links.first.modified?
30
+
31
+ assert_empty md.links(:donation)
32
+ assert_equal after.chomp, before.to_s
33
+ end
34
+
35
+ def test_donation_link
36
+ before = make_node '<index/>'
37
+ after = <<-XML
38
+ <index>
39
+ <metadata>
40
+ <link rel="donation">http://cfillion.tk</link>
41
+ </metadata>
42
+ </index>
43
+ XML
44
+
45
+ md = ReaPack::Index::Metadata.new before
46
+ assert_empty md.links(:donation)
47
+
48
+ md.push_link :donation, 'http://cfillion.tk'
49
+
50
+ links = md.links :donation
51
+ assert_equal 1, links.size
52
+ assert_equal links.first.url, links.first.name
53
+ assert_equal 'http://cfillion.tk', links.first.url
54
+
55
+ assert_empty md.links(:website)
56
+ assert_equal after.chomp, before.to_s
57
+ end
58
+
59
+ def test_invalid_type
60
+ md = ReaPack::Index::Metadata.new make_node('<index/>')
61
+
62
+ assert_raises ArgumentError do
63
+ md.links :hello
64
+ end
65
+
66
+ assert_raises ArgumentError do
67
+ md.push_link :hello, 'world'
68
+ end
69
+
70
+ assert_raises ArgumentError do
71
+ md.remove_link :hello, 'world'
72
+ end
73
+ end
74
+
75
+ def test_link_label
76
+ before = make_node '<index/>'
77
+ after = <<-XML
78
+ <index>
79
+ <metadata>
80
+ <link rel="website" href="http://cfillion.tk/">Hello World</link>
81
+ </metadata>
82
+ </index>
83
+ XML
84
+
85
+ md = ReaPack::Index::Metadata.new before
86
+ md.push_link :website, 'Hello World', 'http://cfillion.tk/'
87
+
88
+ links = md.links :website
89
+ assert_equal 1, links.size
90
+ assert_equal 'Hello World', links.first.name
91
+ assert_equal 'http://cfillion.tk/', links.first.url
92
+
93
+ assert_equal after.chomp, before.to_s
94
+ end
95
+
96
+ def test_read_links
97
+ node = make_node <<-XML
98
+ <index version="1">
99
+ <metadata>
100
+ <link rel="website" href="http://cfillion.tk/" />
101
+ <link rel="website" href="https://github.com/cfillion"></link>
102
+ <link rel="website">http://twitter.com/cfi30</link>
103
+ <link>http://google.com</link>
104
+ <link />
105
+ <link rel="donation" href="http://paypal.com">Donate</link>
106
+ <link rel="website" href="/"></link>
107
+ </metadata>
108
+ </index>
109
+ XML
110
+
111
+ md = ReaPack::Index::Metadata.new node
112
+
113
+ links = md.links :website
114
+ assert_equal 4, links.size
115
+ assert_equal 'http://cfillion.tk/', links[0].name
116
+ assert_equal links[0].name, links[0].url
117
+ assert_equal 'https://github.com/cfillion', links[1].name
118
+ assert_equal links[1].name, links[1].url
119
+ assert_equal 'http://twitter.com/cfi30', links[2].name
120
+ assert_equal links[2].name, links[2].url
121
+ assert_equal 'http://google.com', links[3].name
122
+ assert_equal links[3].name, links[3].url
123
+ end
124
+
125
+ def test_invalid_link
126
+ after = '<index/>'
127
+ before = make_node after
128
+
129
+ md = ReaPack::Index::Metadata.new before
130
+
131
+ error = assert_raises ReaPack::Index::Error do
132
+ md.push_link :website, 'hello'
133
+ end
134
+
135
+ assert_equal 'invalid URL: hello', error.message
136
+ assert_equal after.chomp, before.to_s
137
+ end
138
+
139
+ def test_remove_link
140
+ before = make_node <<-XML
141
+ <index>
142
+ <metadata>
143
+ <link rel="website" href="http://cfillion.tk" />
144
+ <link rel="website" href="http://google.com">Search</link>
145
+ <link rel="donation" href="http://paypal.com">Donate</link>
146
+ </metadata>
147
+ </index>
148
+ XML
149
+
150
+ after = '<index/>'
151
+
152
+ md = ReaPack::Index::Metadata.new before
153
+ assert_equal 2, md.links(:website).size
154
+
155
+ md.remove_link :website, 'http://cfillion.tk'
156
+ assert_equal 1, md.links(:website).size
157
+
158
+ md.remove_link :website, 'Search'
159
+ assert_equal 0, md.links(:website).size
160
+
161
+ assert_equal 1, md.links(:donation).size
162
+ md.remove_link :donation, 'Donate'
163
+ assert_equal 0, md.links(:donation).size
164
+
165
+ assert_equal after.chomp, before.to_s
166
+ end
167
+
168
+ def test_remove_link_inexistant
169
+ md = ReaPack::Index::Metadata.new make_node('<index/>')
170
+
171
+ error = assert_raises ReaPack::Index::Error do
172
+ md.remove_link :website, 'hello'
173
+ end
174
+
175
+ assert_equal 'no such website link: hello', error.message
176
+ end
177
+
178
+ def test_replace_link_url
179
+ before = make_node <<-XML
180
+ <index>
181
+ <metadata>
182
+ <link rel="website" href="http://cfillion.tk"/>
183
+ <link rel="website" href="http://cfillion.no-ip.org">Test</link>
184
+ </metadata>
185
+ </index>
186
+ XML
187
+
188
+ after = <<-XML
189
+ <index>
190
+ <metadata>
191
+ <link rel="website">http://cfillion.tk</link>
192
+ <link rel="website" href="http://cfillion.tk">Test</link>
193
+ </metadata>
194
+ </index>
195
+ XML
196
+
197
+ md = ReaPack::Index::Metadata.new before
198
+
199
+ link1 = md.push_link :website, 'http://cfillion.tk'
200
+ assert_equal false, link1.is_new?
201
+ assert_equal false, link1.modified?
202
+
203
+ link2 = md.push_link :website, 'Test', 'http://cfillion.tk'
204
+ assert_equal false, link2.is_new?
205
+ assert_equal true, link2.modified?
206
+
207
+ assert_equal after.chomp, before.to_s
208
+ end
209
+
210
+ def test_replace_link_name
211
+ before = make_node <<-XML
212
+ <index>
213
+ <metadata>
214
+ <link rel="website" href="http://cfillion.tk">A</link>
215
+ <link rel="website">http://google.com</link>
216
+ </metadata>
217
+ </index>
218
+ XML
219
+
220
+ after = <<-XML
221
+ <index>
222
+ <metadata>
223
+ <link rel="website">http://cfillion.tk</link>
224
+ <link rel="website" href="http://google.com">B</link>
225
+ </metadata>
226
+ </index>
227
+ XML
228
+
229
+ md = ReaPack::Index::Metadata.new before
230
+
231
+ # remove name
232
+ link1 = md.push_link :website, 'http://cfillion.tk'
233
+ assert_equal false, link1.is_new?
234
+ assert_equal true, link1.modified?
235
+
236
+ # insert name
237
+ link2 = md.push_link :website, 'B', 'http://google.com'
238
+ assert_equal false, link2.is_new?
239
+ assert_equal true, link2.modified?
240
+
241
+ assert_equal after.chomp, before.to_s
242
+ end
243
+
244
+ def test_read_description
245
+ md = ReaPack::Index::Metadata.new make_node <<-XML
246
+ <index>
247
+ <metadata>
248
+ <description><![CDATA[Hello World]]></description>
249
+ </metadata>
250
+ </index>
251
+ XML
252
+
253
+ assert_equal 'Hello World', md.description
254
+ end
255
+
256
+ def test_read_description_empty
257
+ md = ReaPack::Index::Metadata.new make_node <<-XML
258
+ <index>
259
+ <metadata/>
260
+ </index>
261
+ XML
262
+
263
+ assert_empty md.description
264
+ end
265
+
266
+ def test_write_description
267
+ rtf = <<-RTF
268
+ {\\rtf1\\ansi\\deff0{\\fonttbl{\\f0 \\fswiss Helvetica;}{\\f1 Courier;}}
269
+ {\\colortbl;\\red255\\green0\\blue0;\\red0\\green0\\blue255;}
270
+ \\widowctrl\\hyphauto
271
+
272
+ {\\pard \\ql \\f0 \\sa180 \\li0 \\fi0 Hello World\\par}
273
+ }
274
+ RTF
275
+
276
+ before = make_node '<index/>'
277
+ after = <<-XML
278
+ <index>
279
+ <metadata>
280
+ <description><![CDATA[#{rtf}]]></description>
281
+ </metadata>
282
+ </index>
283
+ XML
284
+
285
+ md = ReaPack::Index::Metadata.new before
286
+ assert_empty md.description
287
+
288
+ md.description = 'Hello World'
289
+ assert_equal rtf, md.description
290
+
291
+ assert_equal after.chomp, before.to_s
292
+ end
293
+
294
+ def test_write_description_rtf
295
+ rtf = <<-RTF
296
+ {\\rtf1\\ansi\\deff0{\\fonttbl{\\f0 \\fswiss Helvetica;}{\\f1 Courier;}}
297
+ {\\colortbl;\\red255\\green0\\blue0;\\red0\\green0\\blue255;}
298
+ \\widowctrl\\hyphauto
299
+
300
+ {\\pard \\ql \\f0 \\sa180 \\li0 \\fi0 Hello World\\par}
301
+ }
302
+ RTF
303
+
304
+ before = make_node '<index/>'
305
+ after = <<-XML
306
+ <index>
307
+ <metadata>
308
+ <description><![CDATA[#{rtf}]]></description>
309
+ </metadata>
310
+ </index>
311
+ XML
312
+
313
+ md = ReaPack::Index::Metadata.new before
314
+ assert_empty md.description
315
+
316
+ md.description = rtf
317
+ assert_equal rtf, md.description
318
+
319
+ assert_equal after.chomp, before.to_s
320
+ end
321
+
322
+ def test_replace_description
323
+ rtf = <<-RTF
324
+ RTF
325
+
326
+ before = make_node <<-XML
327
+ <index>
328
+ <metadata>
329
+ <description><![CDATA[{\\rtf1\\ansi\\deff0{\\fonttbl{\\f0 \\fswiss Helvetica;}{\\f1 Courier;}}
330
+ {\\colortbl;\\red255\\green0\\blue0;\\red0\\green0\\blue255;}
331
+ \\widowctrl\\hyphauto
332
+
333
+ {\\pard \\ql \\f0 \\sa180 \\li0 \\fi0 Hello World\\par}
334
+ }
335
+ ]]></description>
336
+ </metadata>
337
+ </index>
338
+ XML
339
+
340
+ after = <<-XML
341
+ <index>
342
+ <metadata>
343
+ <description><![CDATA[{\\rtf1\\ansi\\deff0{\\fonttbl{\\f0 \\fswiss Helvetica;}{\\f1 Courier;}}
344
+ {\\colortbl;\\red255\\green0\\blue0;\\red0\\green0\\blue255;}
345
+ \\widowctrl\\hyphauto
346
+
347
+ {\\pard \\ql \\f0 \\sa180 \\li0 \\fi0 Chunky Bacon\\par}
348
+ }
349
+ ]]></description>
350
+ </metadata>
351
+ </index>
352
+ XML
353
+
354
+ md = ReaPack::Index::Metadata.new before
355
+ md.description = 'Chunky Bacon'
356
+
357
+ assert_equal after.chomp, before.to_s
358
+ end
359
+
360
+ def test_remove_description
361
+ rtf = <<-RTF
362
+ {\\rtf1\\ansi\\deff0{\\fonttbl{\\f0 \\fswiss Helvetica;}{\\f1 Courier;}}
363
+ {\\colortbl;\\red255\\green0\\blue0;\\red0\\green0\\blue255;}
364
+ \\widowctrl\\hyphauto
365
+
366
+ {\\pard \\ql \\f0 \\sa180 \\li0 \\fi0 Hello World\\par}
367
+ }
368
+ RTF
369
+
370
+ before = make_node <<-XML
371
+ <index>
372
+ <metadata>
373
+ <description><![CDATA[#{rtf}]]></description>
374
+ </metadata>
375
+ </index>
376
+ XML
377
+
378
+ after = '<index/>'
379
+
380
+ md = ReaPack::Index::Metadata.new before
381
+ refute_empty md.description
382
+
383
+ md.description = String.new
384
+ assert_empty md.description
385
+
386
+ assert_equal after, before.to_s
387
+ end
388
+
389
+ def test_pandoc_not_found
390
+ old_path = ENV['PATH']
391
+ ENV['PATH'] = String.new
392
+
393
+ md = ReaPack::Index::Metadata.new make_node('<index/>')
394
+
395
+ error = assert_raises ReaPack::Index::Error do
396
+ md.description = 'test'
397
+ end
398
+
399
+ assert_match /pandoc executable cannot be found in your PATH/i, error.message
400
+ ensure
401
+ ENV['PATH'] = old_path
402
+ end
403
+ end
@@ -0,0 +1,100 @@
1
+ require File.expand_path '../helper', __FILE__
2
+
3
+ class TestNamedNode < MiniTest::Test
4
+ include XMLHelper
5
+
6
+ def test_no_tag_set
7
+ mock = Class.new ReaPack::Index::NamedNode
8
+ assert_raises { mock.tag }
9
+ end
10
+
11
+ def test_find_in
12
+ node = make_node '<root><node name="hello"/><node name="world"/></root>'
13
+ mock = Class.new(ReaPack::Index::NamedNode) { @tag = 'node' }
14
+
15
+ instance = mock.find_in node, 'hello'
16
+ assert_nil mock.find_in node, 'bacon'
17
+
18
+ assert_kind_of mock, instance
19
+ assert_equal 'hello', instance.name
20
+ refute instance.is_new?, 'instance is new'
21
+ refute instance.modified?, 'instance is modified'
22
+ end
23
+
24
+ def test_find_all
25
+ node = make_node '<root><node name="hello"/><node name="world"/></root>'
26
+ mock = Class.new(ReaPack::Index::NamedNode) { @tag = 'node' }
27
+
28
+ instances = mock.find_all node
29
+ assert_equal 2, instances.size
30
+
31
+ assert_kind_of mock, instances.first
32
+ assert_equal 'hello', instances.first.name
33
+ refute instances.first.is_new?, 'instance is new'
34
+
35
+ assert_equal 'world', instances.last.name
36
+ end
37
+
38
+ def test_get_readonly
39
+ node = make_node '<root><node name="hello"/></root>'
40
+ mock = Class.new(ReaPack::Index::NamedNode) { @tag = 'node' }
41
+
42
+ instance = mock.get 'hello', node, false
43
+ assert_kind_of mock, instance
44
+
45
+ assert_nil mock.get 'world', node, false
46
+ end
47
+
48
+ def test_get_create
49
+ node = make_node '<root></root>'
50
+ mock = Class.new(ReaPack::Index::NamedNode) { @tag = 'node' }
51
+
52
+ instance = mock.get 'hello', node, true
53
+
54
+ assert_kind_of mock, instance
55
+ assert instance.is_new?, 'instance is not new'
56
+ assert instance.modified?, 'instance is not modified'
57
+ end
58
+
59
+ def test_get_null_parent
60
+ mock = Class.new(ReaPack::Index::NamedNode) { @tag = 'node' }
61
+
62
+ assert_nil mock.get 'hello', nil, false
63
+ end
64
+
65
+ def test_empty
66
+ node = make_node <<-XML
67
+ <root>
68
+ <node name="first"/>
69
+ <node name="second"><something/></node>
70
+ </root>
71
+ XML
72
+
73
+ mock = Class.new(ReaPack::Index::NamedNode) { @tag = 'node' }
74
+
75
+ first = mock.find_in node, 'first'
76
+ assert first.empty?, 'first is not empty'
77
+
78
+ second = mock.find_in node, 'second'
79
+ refute second.empty?, 'second is empty'
80
+ end
81
+
82
+ def test_remove
83
+ node = make_node '<root><node name="test"/></root>'
84
+ mock = Class.new(ReaPack::Index::NamedNode) { @tag = 'node' }
85
+
86
+ instance = mock.find_in node, 'test'
87
+
88
+ assert_equal 1, node.children.size
89
+ instance.remove
90
+ assert_equal 0, node.children.size
91
+ end
92
+
93
+ def test_children
94
+ node = make_node '<root><node name="test"><a/><b/></root>'
95
+ mock = Class.new(ReaPack::Index::NamedNode) { @tag = 'node' }
96
+
97
+ instance = mock.find_in node, 'test'
98
+ assert_equal node.css('a').inspect, instance.children('a').inspect
99
+ end
100
+ end