reapack-index 1.0beta2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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