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,11 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <index version="1" commit="399f5609cff3e6fd92b5542d444fbf86da0443c6">
3
+ <category name="Category Name">
4
+ <reapack name="Hello World.lua" type="script">
5
+ <version name="1.0" author="cfillion">
6
+ <changelog><![CDATA[Fixed a division by zero error.]]></changelog>
7
+ <source platform="all">https://google.com/Category%20Name/Hello%20World.lua</source>
8
+ </version>
9
+ </reapack>
10
+ </category>
11
+ </index>
@@ -0,0 +1 @@
1
+ -- @noindex
@@ -0,0 +1,25 @@
1
+ require 'coveralls'
2
+ require 'simplecov'
3
+
4
+ Coveralls::Output.silent = true
5
+
6
+ SimpleCov.formatters = [
7
+ SimpleCov::Formatter::HTMLFormatter,
8
+ Coveralls::SimpleCov::Formatter,
9
+ ]
10
+
11
+ SimpleCov.start {
12
+ project_name 'reapack-index'
13
+ add_filter '/test/'
14
+ }
15
+
16
+ require 'reapack/index'
17
+ require 'minitest/autorun'
18
+
19
+ module XMLHelper
20
+ def make_node(markup)
21
+ Nokogiri::XML(markup, &:noblanks).root
22
+ end
23
+ end
24
+
25
+ String.disable_colorization = true
@@ -0,0 +1,76 @@
1
+ require File.expand_path '../helper', __FILE__
2
+
3
+ class TestChangelog < MiniTest::Test
4
+ include XMLHelper
5
+
6
+ def test_create
7
+ before = make_node '<source/>'
8
+ after = <<-XML
9
+ <source>
10
+ <changelog><![CDATA[hello]]></changelog>
11
+ </source>
12
+ XML
13
+
14
+ cl = ReaPack::Index::Changelog.new before
15
+ assert_empty cl.text
16
+ assert_equal 0, before.children.size
17
+ refute cl.modified?, 'changelog modified'
18
+
19
+ cl.text = 'hello'
20
+ assert cl.modified?, 'changelog not modified'
21
+ assert_equal 'hello', cl.text
22
+
23
+ assert_equal after.chomp, before.to_s
24
+ end
25
+
26
+ def test_replace
27
+ before = make_node <<-XML
28
+ <source>
29
+ <changelog><![CDATA[hello]]></changelog>
30
+ </source>
31
+ XML
32
+
33
+ after = <<-XML
34
+ <source>
35
+ <changelog><![CDATA[world]]></changelog>
36
+ </source>
37
+ XML
38
+
39
+ cl = ReaPack::Index::Changelog.new before
40
+ assert_equal 'hello', cl.text
41
+
42
+ cl.text = 'world'
43
+ assert cl.modified?, 'changelog not modified'
44
+
45
+ assert_equal after.chomp, before.to_s
46
+ end
47
+
48
+ def test_replace_identical
49
+ before = make_node <<-XML
50
+ <source>
51
+ <changelog><![CDATA[test]]></changelog>
52
+ </source>
53
+ XML
54
+
55
+ cl = ReaPack::Index::Changelog.new before
56
+
57
+ cl.text = 'test'
58
+ refute cl.modified?, 'changelog is modified'
59
+ end
60
+
61
+ def test_remove
62
+ before = make_node <<-XML
63
+ <source>
64
+ <changelog><![CDATA[hello]]></changelog>
65
+ </source>
66
+ XML
67
+
68
+ cl = ReaPack::Index::Changelog.new before
69
+ assert_equal 'hello', cl.text
70
+
71
+ cl.text = String.new
72
+ assert cl.modified?, 'changelog not modified'
73
+
74
+ refute_match /changelog/, before.to_s
75
+ end
76
+ end
@@ -0,0 +1,846 @@
1
+ require File.expand_path '../helper', __FILE__
2
+
3
+ require 'git'
4
+
5
+ module CLIUtils
6
+ class FakeIO
7
+ def initialize
8
+ @getch = 'n'
9
+ end
10
+
11
+ attr_accessor :getch
12
+ end
13
+
14
+ def fake_input
15
+ stdin = $stdin
16
+ $stdin = FakeIO.new
17
+
18
+ yield $stdin
19
+ ensure
20
+ $stdin = stdin
21
+ end
22
+
23
+ def wrapper(args = [], options = {})
24
+ Dir.mktmpdir('test-repository') do |path|
25
+ @git = Git.init path
26
+ @git.config('user.name', 'John Doe')
27
+ @git.config('user.email', 'john@doe.com')
28
+
29
+ if options[:remote] != false
30
+ @git.add_remote 'origin', 'git@github.com:cfillion/test-repository.git'
31
+ end
32
+
33
+ options[:setup].call if options.has_key? :setup
34
+
35
+ @indexer = ReaPack::Index::CLI.new \
36
+ ['--no-progress', '--no-commit'] + args + ['--', path]
37
+
38
+ yield if block_given?
39
+ end
40
+ ensure
41
+ @git = @indexer = nil
42
+ end
43
+
44
+ def mkfile(file, content = String.new)
45
+ fn = File.join @git.dir.to_s, file
46
+ FileUtils.mkdir_p File.dirname(fn)
47
+ File.write fn, content
48
+ fn
49
+ end
50
+
51
+ def read_index(file = 'index.xml')
52
+ File.read File.expand_path(file, @git.dir.to_s)
53
+ end
54
+ end
55
+
56
+ class TestCLI < MiniTest::Test
57
+ include CLIUtils
58
+
59
+ def teardown
60
+ # who is changing the working directory without restoring it?!
61
+ Dir.chdir File.dirname(__FILE__)
62
+ end
63
+
64
+ def test_help
65
+ assert_output /--help/, '' do
66
+ i = ReaPack::Index::CLI.new ['--help']
67
+ assert_equal true, i.run # does nothing
68
+ end
69
+ end
70
+
71
+ def test_version
72
+ assert_output /#{Regexp.escape ReaPack::Index::VERSION.to_s}/, '' do
73
+ i = ReaPack::Index::CLI.new ['--version']
74
+ assert_equal true, i.run # does nothing
75
+ end
76
+ end
77
+
78
+ def test_invalid_option
79
+ assert_output '', /reapack-indexer: invalid option: --hello-world/i do
80
+ i = ReaPack::Index::CLI.new ['--hello-world']
81
+ assert_equal false, i.run # does nothing
82
+ end
83
+ end
84
+
85
+ def test_empty_branch
86
+ wrapper do
87
+ assert_output nil, /the current branch does not contains any commit/i do
88
+ assert_equal true, @indexer.run
89
+ end
90
+ end
91
+ end
92
+
93
+ def test_initial_commit
94
+ wrapper do
95
+ @git.add mkfile('test1.lua', '@version 1.0')
96
+ @git.add mkfile('Category/test2.lua', '@version 1.0')
97
+ @git.add mkfile('Category/Sub/test3.lua', '@version 1.0')
98
+ @git.commit 'initial commit'
99
+
100
+ assert_output /3 new packages/, '' do
101
+ assert_equal true, @indexer.run
102
+ end
103
+
104
+ assert_match 'Category/test2.lua', read_index
105
+ assert_match "raw/#{@git.log(1).last.sha}/test1.lua", read_index
106
+
107
+ assert_match @git.log(1).last.date.utc.iso8601, read_index
108
+ end
109
+ end
110
+
111
+ def test_normal_commit
112
+ wrapper do
113
+ @git.add mkfile('README.md', '# Hello World')
114
+ @git.commit 'initial commit'
115
+
116
+ @git.add mkfile('test1.lua', '@version 1.0')
117
+ @git.add mkfile('Category/test2.lua', '@version 1.0')
118
+ @git.add mkfile('Category/Sub/test3.lua', '@version 1.0')
119
+ @git.commit 'second commit'
120
+
121
+ assert_output "3 new categories, 3 new packages, 3 new versions\n", '' do
122
+ assert_equal true, @indexer.run
123
+ end
124
+
125
+ assert_match 'Category/test2.lua', read_index
126
+ end
127
+ end
128
+
129
+ def test_pwd_is_subdirectory
130
+ wrapper do
131
+ @git.add mkfile('test1.lua', '@version 1.0')
132
+ @git.commit 'initial commit'
133
+
134
+ pwd = File.join(@git.dir.to_s, 'test')
135
+ Dir.mkdir pwd
136
+ Dir.chdir pwd
137
+
138
+ assert_output /1 new package/, '' do
139
+ assert_equal true, @indexer.run
140
+ end
141
+
142
+ assert_match 'test1.lua', read_index
143
+ end
144
+ end
145
+
146
+ def test_verbose
147
+ stdout, stderr = capture_io do
148
+ wrapper ['--verbose'] do
149
+ @git.add mkfile('test.lua', '@version 1.0')
150
+ @git.add mkfile('test.png')
151
+ @git.commit 'initial commit'
152
+
153
+ assert_equal true, @indexer.run
154
+ end
155
+ end
156
+
157
+ assert_equal "1 new category, 1 new package, 1 new version\n", stdout
158
+ assert_match /reading configuration from .+\.reapack-index\.conf/i, stderr
159
+ assert_match /processing [a-f0-9]{7}: initial commit/i, stderr
160
+ assert_match /indexing new file test.lua/, stderr
161
+ refute_match /indexing new file test.png/, stderr
162
+ end
163
+
164
+ def test_verbose_override
165
+ wrapper ['--verbose', '--no-verbose'] do
166
+ @git.add mkfile('README.md', '# Hello World')
167
+ @git.commit 'initial commit'
168
+
169
+ stdout, stderr = capture_io do
170
+ assert_equal true, @indexer.run
171
+ end
172
+
173
+ assert_equal "empty index\n", stdout
174
+ refute_match /processing [a-f0-9]{7}: initial commit/i, stderr
175
+ end
176
+ end
177
+
178
+ def test_invalid_metadata
179
+ wrapper do
180
+ @git.add mkfile('test.lua', 'no version tag in this script!')
181
+ @git.commit 'initial commit'
182
+
183
+ assert_output nil, /Warning: test\.lua: Invalid metadata/i do
184
+ assert_equal true, @indexer.run
185
+ end
186
+ end
187
+ end
188
+
189
+ def test_no_warnings
190
+ wrapper ['-w'] do
191
+ @git.add mkfile('test.lua', 'no version tag in this script!')
192
+ @git.commit 'initial commit'
193
+
194
+ stdout, stderr = capture_io do
195
+ assert_equal true, @indexer.run
196
+ end
197
+
198
+ refute_match /Warning: test\.lua: Invalid metadata/i, stderr
199
+ end
200
+ end
201
+
202
+ def test_no_warnings_override
203
+ wrapper ['-w', '-W'] do
204
+ @git.add mkfile('test.lua', 'no version tag in this script!')
205
+ @git.commit 'initial commit'
206
+
207
+ assert_output nil, /Warning: test\.lua: Invalid metadata/i do
208
+ assert_equal true, @indexer.run
209
+ end
210
+ end
211
+ end
212
+
213
+ def test_index_from_last
214
+ setup = proc {
215
+ @git.add mkfile('test1.lua', '@version 1.0')
216
+ @git.commit 'initial commit'
217
+
218
+ mkfile 'index.xml', <<-XML
219
+ <?xml version="1.0" encoding="utf-8"?>
220
+ <index version="1" commit="#{@git.log(1).last.sha}"/>
221
+ XML
222
+ }
223
+
224
+ wrapper [], setup: setup do
225
+ @git.add mkfile('test2.lua', '@version 1.0')
226
+ @git.commit 'second commit'
227
+
228
+ assert_output nil, '' do
229
+ assert_equal true, @indexer.run
230
+ end
231
+
232
+ refute_match 'test1.lua', read_index
233
+ assert_match 'test2.lua', read_index
234
+ end
235
+ end
236
+
237
+ def test_index_from_invalid
238
+ setup = proc {
239
+ @git.add mkfile('test1.lua', '@version 1.0')
240
+ @git.commit 'initial commit'
241
+
242
+ mkfile 'index.xml', <<-XML
243
+ <?xml version="1.0" encoding="utf-8"?>
244
+ <index version="1" commit="hello world"/>
245
+ XML
246
+ }
247
+
248
+ wrapper [], setup: setup do
249
+ @git.add mkfile('test2.lua', '@version 1.0')
250
+ @git.commit 'second commit'
251
+
252
+ assert_output nil, '' do
253
+ assert_equal true, @indexer.run
254
+ end
255
+
256
+ assert_match 'test1.lua', read_index
257
+ assert_match 'test2.lua', read_index
258
+ end
259
+ end
260
+
261
+ def test_index_from_invalid
262
+ setup = proc {
263
+ @git.add mkfile('test1.lua', '@version 1.0')
264
+ @git.commit 'initial commit'
265
+
266
+ mkfile 'index.xml', <<-XML
267
+ <?xml version="1.0" encoding="utf-8"?>
268
+ <index version="1" commit="hello world"/>
269
+ XML
270
+ }
271
+
272
+ wrapper [], setup: setup do
273
+ @git.add mkfile('test2.lua', '@version 1.0')
274
+ @git.commit 'second commit'
275
+
276
+ assert_output nil, '' do
277
+ assert_equal true, @indexer.run
278
+ end
279
+
280
+ assert_match 'test1.lua', read_index
281
+ assert_match 'test2.lua', read_index
282
+ end
283
+ end
284
+
285
+ def test_index_from_inexistent
286
+ setup = proc {
287
+ @git.add mkfile('test.lua', '@version 1.0')
288
+ @git.commit 'initial commit'
289
+
290
+ mkfile 'index.xml', <<-XML
291
+ <?xml version="1.0" encoding="utf-8"?>
292
+ <index version="1" commit="0000000000000000000000000000000000000000"/>
293
+ XML
294
+ }
295
+
296
+ wrapper [], setup: setup do
297
+ assert_output nil, nil do
298
+ assert_equal true, @indexer.run
299
+ end
300
+ end
301
+ end
302
+
303
+ def test_index_from_long_hash
304
+ setup = proc {
305
+ @git.add mkfile('test.lua', '@version 1.0')
306
+ @git.commit 'initial commit'
307
+
308
+ mkfile 'index.xml', <<-XML
309
+ <?xml version="1.0" encoding="utf-8"?>
310
+ <index version="1" commit="0000000000000000000000000000000000000deadbeef"/>
311
+ XML
312
+ }
313
+
314
+ wrapper [], setup: setup do
315
+ assert_output nil, nil do
316
+ assert_equal true, @indexer.run
317
+ end
318
+ end
319
+ end
320
+
321
+ def test_no_amend
322
+ setup = proc {
323
+ @git.add mkfile('Test/test.lua', '@version 1.0')
324
+ @git.commit 'initial commit'
325
+
326
+ mkfile 'index.xml', <<-XML
327
+ <?xml version="1.0" encoding="utf-8"?>
328
+ <index version="1" commit="#{@git.log(1).last.sha}">
329
+ <category name="Test">
330
+ <reapack name="test.lua" type="script">
331
+ <version name="1.0"/>
332
+ </reapack>
333
+ </category>
334
+ </index>
335
+ XML
336
+ }
337
+
338
+ wrapper ['--no-amend'], setup: setup do
339
+ @git.add mkfile('Test/test.lua', "@version 1.0\n@author cfillion")
340
+ @git.commit 'second commit'
341
+
342
+ assert_output '', /nothing to do/i do
343
+ assert_equal true, @indexer.run
344
+ end
345
+
346
+ refute_match 'cfillion', read_index
347
+ end
348
+ end
349
+
350
+ def test_amend
351
+ setup = proc {
352
+ @git.add mkfile('Test/test.lua', '@version 1.0')
353
+ @git.commit 'initial commit'
354
+
355
+ mkfile 'index.xml', <<-XML
356
+ <?xml version="1.0" encoding="utf-8"?>
357
+ <index version="1" commit="#{@git.log(1).last.sha}">
358
+ <category name="Test">
359
+ <reapack name="test.lua" type="script">
360
+ <version name="1.0"/>
361
+ </reapack>
362
+ </category>
363
+ </index>
364
+ XML
365
+ }
366
+
367
+ wrapper ['--amend'], setup: setup do
368
+ @git.add mkfile('Test/test.lua', "@version 1.0\n@author cfillion")
369
+ @git.commit 'second commit'
370
+
371
+ assert_output /1 modified package/i, '' do
372
+ assert_equal true, @indexer.run
373
+ end
374
+
375
+ assert_match 'cfillion', read_index
376
+ end
377
+ end
378
+
379
+ def test_remove
380
+ wrapper do
381
+ script = mkfile 'test.lua', '@version 1.0'
382
+
383
+ @git.add script
384
+ @git.commit 'initial commit'
385
+
386
+ @git.remove script
387
+ @git.commit 'second commit'
388
+
389
+ assert_output /1 removed package/i, '' do
390
+ assert_equal true, @indexer.run
391
+ end
392
+
393
+ refute_match 'test.lua', read_index
394
+ end
395
+ end
396
+
397
+ def test_output
398
+ wrapper ['-o output.xml'] do
399
+ @git.add mkfile('test.lua', '@version 1.0')
400
+ @git.commit 'initial commit'
401
+
402
+ assert_output nil, '' do
403
+ assert_equal true, @indexer.run
404
+ end
405
+
406
+ assert_match 'test.lua', read_index('output.xml')
407
+ end
408
+ end
409
+
410
+ def test_missing_argument
411
+ assert_output nil, /missing argument/ do
412
+ i = ReaPack::Index::CLI.new ['--output']
413
+ assert_equal false, i.run # does nothing
414
+ end
415
+ end
416
+
417
+ def test_multibyte_filename
418
+ wrapper do
419
+ script = mkfile("\342\200\224.lua")
420
+
421
+ @git.add script
422
+ @git.commit 'initial commit'
423
+
424
+ @git.remove script
425
+ @git.commit 'remove test'
426
+
427
+ assert_output { @indexer.run }
428
+ end
429
+ end
430
+
431
+ def test_invalid_unicode_sequence
432
+ wrapper do
433
+ @git.add mkfile('.gitkeep')
434
+ @git.commit 'initial commit'
435
+
436
+ @git.add mkfile('test.lua', "@version 1.0\n\n\x97")
437
+ @git.commit 'second commit'
438
+
439
+ assert_output { @indexer.run }
440
+ end
441
+ end
442
+
443
+ def test_create_commit
444
+ wrapper ['--commit'] do
445
+ @git.add mkfile('.gitkeep')
446
+ @git.commit 'initial commit'
447
+
448
+ assert_output("empty index\n", "commit created\n") { @indexer.run }
449
+
450
+ commit = @git.log(1).last
451
+ assert_equal 'index: empty index', commit.message
452
+ assert_equal ['index.xml'], commit.diff_parent.map {|d| d.path }
453
+ end
454
+ end
455
+
456
+ def test_create_commit_accept
457
+ wrapper ['--prompt-commit'] do
458
+ @git.add mkfile('.gitkeep')
459
+ @git.commit 'initial commit'
460
+
461
+ fake_input do |fio|
462
+ fio.getch = 'y'
463
+ stdin, stderr = capture_io { @indexer.run }
464
+ assert_match /commit created/i, stderr
465
+ end
466
+
467
+ commit = @git.log(1).last
468
+ assert_equal 'index: empty index', commit.message
469
+ assert_equal ['index.xml'], commit.diff_parent.map {|d| d.path }
470
+ end
471
+ end
472
+
473
+ def test_create_commit_decline
474
+ wrapper ['--prompt-commit'] do
475
+ @git.add mkfile('.gitkeep')
476
+ @git.commit 'initial commit'
477
+
478
+ fake_input do |fio|
479
+ fio.getch = 'n'
480
+ stdin, stderr = capture_io { @indexer.run }
481
+ refute_match /commit created/i, stderr
482
+ end
483
+
484
+ commit = @git.log(1).last
485
+ refute_equal 'index: empty index', commit.message
486
+ refute_equal ['index.xml'], commit.diff_parent.map {|d| d.path }
487
+ end
488
+ end
489
+
490
+ def test_config
491
+ assert_output /--help/, '' do
492
+ wrapper [], setup: proc {
493
+ mkfile '.reapack-index.conf', '--help'
494
+ }
495
+ end
496
+ end
497
+
498
+ def test_no_config
499
+ stdout, stderr = capture_io do
500
+ wrapper ['--no-config'], setup: proc {
501
+ mkfile '.reapack-index.conf', '--help'
502
+ }
503
+ end
504
+
505
+ refute_match /--help/, stdout
506
+ end
507
+
508
+ def test_config_priority
509
+ setup = proc {
510
+ mkfile '.reapack-index.conf', "--verbose\n--no-warnings"
511
+ }
512
+
513
+ stdout, stderr = capture_io do
514
+ wrapper ['--warnings'], setup: setup do
515
+ @git.add mkfile('test.lua', 'no version tag in this script!')
516
+ @git.commit 'initial commit'
517
+
518
+ assert_equal true, @indexer.run
519
+ end
520
+ end
521
+
522
+ assert_match /warning/i, stderr
523
+ assert_match /verbose/i, stderr
524
+ end
525
+
526
+ def test_config_subdirectory
527
+ pwd = Dir.pwd
528
+
529
+ wrapper do
530
+ mkfile '.reapack-index.conf', '--help'
531
+ mkfile 'Category/.gitkeep'
532
+
533
+ Dir.chdir File.join(@git.dir.to_s, 'Category')
534
+
535
+ assert_output /--help/ do
536
+ ReaPack::Index::CLI.new
537
+ end
538
+ end
539
+ ensure
540
+ Dir.chdir pwd
541
+ end
542
+
543
+ def test_working_directory_with_options
544
+ wrapper do
545
+ @git.add mkfile('README.md', '# Hello World')
546
+ @git.commit 'initial commit'
547
+
548
+ begin
549
+ pwd = Dir.pwd
550
+ Dir.chdir @git.dir.to_s
551
+
552
+ assert_output '', '' do
553
+ i2 = ReaPack::Index::CLI.new ['--no-commit', '--quiet']
554
+ i2.run
555
+ end
556
+ ensure
557
+ Dir.chdir pwd
558
+ end
559
+ end
560
+ end
561
+
562
+ def test_no_such_repository
563
+ assert_output '', /no such file or directory/i do
564
+ i = ReaPack::Index::CLI.new ['/hello/world']
565
+ assert_equal false, i.run
566
+ end
567
+
568
+ assert_output '', /could not find repository/i do
569
+ i = ReaPack::Index::CLI.new ['/']
570
+ assert_equal false, i.run
571
+ end
572
+ end
573
+
574
+ def test_progress
575
+ wrapper ['--progress'] do
576
+ @git.add mkfile('README.md', '# Hello World')
577
+ @git.commit 'initial commit'
578
+
579
+ stdout, stderr = capture_io do
580
+ assert_equal true, @indexer.run
581
+ end
582
+
583
+ assert_equal "empty index\n", stdout
584
+ assert_match "\rIndexing commit 1 of 1 (0%)..." \
585
+ "\rIndexing commit 1 of 1 (100%)...\n", stderr
586
+ end
587
+ end
588
+
589
+ def test_progress_no_new_commit
590
+ setup = proc {
591
+ @git.add mkfile('test1.lua', '@version 1.0')
592
+ @git.commit 'initial commit'
593
+
594
+ mkfile 'index.xml', <<-XML
595
+ <?xml version="1.0" encoding="utf-8"?>
596
+ <index version="1" commit="#{@git.log(1).last.sha}"/>
597
+ XML
598
+ }
599
+
600
+ wrapper ['--progress'], setup: setup do
601
+ assert_output '', "Nothing to do!\n" do
602
+ @indexer.run
603
+ end
604
+ end
605
+ end
606
+
607
+ def test_progress_warnings
608
+ wrapper ['--progress'] do
609
+ @git.add mkfile('test.lua', 'no version tag in this script!')
610
+ @git.commit 'initial commit'
611
+
612
+ assert_output nil, /\nWarning:/i do
613
+ assert_equal true, @indexer.run
614
+ end
615
+ end
616
+ end
617
+
618
+ def test_quiet_mode
619
+ wrapper ['--verbose', '--progress', '--quiet'] do
620
+ @git.add mkfile('test.lua', 'no version tag in this script!')
621
+ @git.commit 'initial commit'
622
+
623
+ assert_output '', '' do
624
+ assert_equal true, @indexer.run
625
+ end
626
+ end
627
+ end
628
+
629
+ def test_website_link
630
+ wrapper ['-l http://cfillion.tk'] do
631
+ assert_output "1 new website link, empty index\n", '' do
632
+ assert_equal true, @indexer.run
633
+ end
634
+
635
+ assert_match 'rel="website">http://cfillion.tk</link>', read_index
636
+ end
637
+ end
638
+
639
+ def test_website_link
640
+ wrapper ['--donation-link', 'Link Label=http://cfillion.tk'] do
641
+ assert_output "1 new donation link, empty index\n" do
642
+ assert_equal true, @indexer.run
643
+ end
644
+
645
+ assert_match 'rel="donation" href="http://cfillion.tk">Link Label</link>',
646
+ read_index
647
+ end
648
+ end
649
+
650
+ def test_invalid_link
651
+ wrapper ['--link', 'shinsekai yori', '--link', 'http://cfillion.tk'] do
652
+ assert_output "1 new website link, empty index\n",
653
+ /warning: invalid url: shinsekai yori/i do
654
+ assert_equal true, @indexer.run
655
+ end
656
+
657
+ assert_match 'rel="website">http://cfillion.tk</link>', read_index
658
+ end
659
+ end
660
+
661
+ def test_remove_link
662
+ wrapper ['--link', 'http://test.com', '--link', '-http://test.com'] do
663
+ assert_output "1 new website link, 1 removed website link, empty index\n" do
664
+ assert_equal true, @indexer.run
665
+ end
666
+
667
+ refute_match 'rel="website">http://test.com</link>', read_index
668
+ end
669
+ end
670
+
671
+ def test_list_links
672
+ setup = proc {
673
+ mkfile 'index.xml', <<-XML
674
+ <?xml version="1.0" encoding="utf-8"?>
675
+ <index version="1">
676
+ <metadata>
677
+ <link rel="website" href="http://anidb.net/a9002">Shinsekai Yori</link>
678
+ <link rel="donation" href="http://paypal.com">Donate!</link>
679
+ <link rel="website">http://cfillion.tk</link>
680
+ XML
681
+ }
682
+
683
+ wrapper ['--ls-links'], setup: setup do
684
+ stdin, stderr = capture_io do
685
+ assert_equal true, @indexer.run
686
+ end
687
+
688
+ expected = <<-OUT
689
+ [website] Shinsekai Yori (http://anidb.net/a9002)
690
+ [website] http://cfillion.tk
691
+ [donation] Donate! (http://paypal.com)
692
+ OUT
693
+
694
+ assert_equal expected, stdin
695
+ assert_empty stderr
696
+ end
697
+ end
698
+
699
+ def test_no_git_remote
700
+ wrapper [], remote: false do
701
+ assert_output { @indexer.run }
702
+ end
703
+ end
704
+
705
+ def test_about
706
+ opts = ['--about']
707
+
708
+ setup = proc {
709
+ opts << mkfile('README.md', '# Hello World')
710
+ }
711
+
712
+ wrapper opts, setup: setup do
713
+ assert_output "1 modified metadata, empty index\n" do
714
+ assert_equal true, @indexer.run
715
+ end
716
+
717
+ assert_match 'Hello World', read_index
718
+ end
719
+ end
720
+
721
+ def test_about_file_not_found
722
+ # 404.md is read in the working directory
723
+ wrapper ['--about=404.md'] do
724
+ assert_output "empty index\n",
725
+ /warning: --about: no such file or directory - 404.md/i do
726
+ assert_equal true, @indexer.run
727
+ end
728
+ end
729
+ end
730
+
731
+ def test_about_pandoc_not_found
732
+ old_path = ENV['PATH']
733
+
734
+ opts = ['--about']
735
+
736
+ setup = proc {
737
+ opts << mkfile('README.md', '# Hello World')
738
+ }
739
+
740
+ wrapper opts, setup: setup do
741
+ assert_output "empty index\n", /pandoc executable cannot be found/i do
742
+ ENV['PATH'] = String.new
743
+ assert_equal true, @indexer.run
744
+ end
745
+ end
746
+ ensure
747
+ ENV['PATH'] = old_path
748
+ end
749
+
750
+ def test_about_clear
751
+ setup = proc {
752
+ mkfile 'index.xml', <<-XML
753
+ <index>
754
+ <metadata>
755
+ <description><![CDATA[Hello World]]></description>
756
+ </metadata>
757
+ </index>
758
+ XML
759
+ }
760
+
761
+ wrapper ['--remove-about'], setup: setup do
762
+ assert_output "1 modified metadata\n" do
763
+ assert_equal true, @indexer.run
764
+ end
765
+
766
+ refute_match 'Hello World', read_index
767
+ end
768
+ end
769
+
770
+ def test_about_dump
771
+ setup = proc {
772
+ mkfile 'index.xml', <<-XML
773
+ <index>
774
+ <metadata>
775
+ <description><![CDATA[Hello World]]></description>
776
+ </metadata>
777
+ </index>
778
+ XML
779
+ }
780
+
781
+ wrapper ['--dump-about'], setup: setup do
782
+ assert_output 'Hello World' do
783
+ assert_equal true, @indexer.run
784
+ end
785
+ end
786
+ end
787
+
788
+ def test_check_pass
789
+ expected = <<-STDERR
790
+ ..
791
+
792
+ Finished checks for 2 packages with 0 failures
793
+ STDERR
794
+
795
+ wrapper ['--check'] do
796
+ mkfile 'test1.lua', '@version 1.0'
797
+ mkfile 'test2.lua', '@version 1.0'
798
+
799
+ assert_output nil, expected do
800
+ assert_equal true, @indexer.run
801
+ end
802
+ end
803
+ end
804
+
805
+ def test_check_failure
806
+ expected = <<-STDERR
807
+ F.
808
+
809
+ test1.lua contains invalid metadata:
810
+ - missing tag "version"
811
+ - invalid value for tag "author"
812
+
813
+ Finished checks for 2 packages with 1 failure
814
+ STDERR
815
+
816
+ wrapper ['--check'] do
817
+ mkfile 'test1.lua', '@author'
818
+ mkfile 'test2.lua', '@version 1.0'
819
+
820
+ assert_output nil, expected do
821
+ assert_equal false, @indexer.run
822
+ end
823
+ end
824
+ end
825
+
826
+ def test_check_quiet
827
+ expected = <<-STDERR
828
+ test1.lua contains invalid metadata:
829
+ - missing tag "version"
830
+ - invalid value for tag "author"
831
+
832
+ test2.lua contains invalid metadata:
833
+ - missing tag "version"
834
+ STDERR
835
+
836
+ wrapper ['--check', '--quiet'] do
837
+ mkfile 'test1.lua', '@author'
838
+ mkfile 'test2.lua'
839
+ mkfile 'test3.lua', '@version 1.0'
840
+
841
+ assert_output nil, expected do
842
+ assert_equal false, @indexer.run
843
+ end
844
+ end
845
+ end
846
+ end