reapack-index 1.0beta2 → 1.0beta3

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.
@@ -21,24 +21,28 @@ module CLIUtils
21
21
  end
22
22
 
23
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')
24
+ path = Dir.mktmpdir 'test-repository'
25
+ old_pwd = Dir.pwd
28
26
 
29
- if options[:remote] != false
30
- @git.add_remote 'origin', 'git@github.com:cfillion/test-repository.git'
31
- end
27
+ @git = Git.init path
28
+ @git.config('user.name', 'John Doe')
29
+ @git.config('user.email', 'john@doe.com')
32
30
 
33
- options[:setup].call if options.has_key? :setup
31
+ if options[:remote] != false
32
+ options[:remote] ||= 'git@github.com:cfillion/test-repository.git'
33
+ @git.add_remote 'origin', options[:remote]
34
+ end
34
35
 
35
- @indexer = ReaPack::Index::CLI.new \
36
- ['--no-progress', '--no-commit'] + args + ['--', path]
36
+ options[:setup].call if options.has_key? :setup
37
37
 
38
- yield if block_given?
39
- end
38
+ @indexer = ReaPack::Index::CLI.new \
39
+ ['--no-progress', '--no-commit'] + args + ['--', path]
40
+
41
+ yield if block_given?
40
42
  ensure
41
43
  @git = @indexer = nil
44
+ Dir.chdir old_pwd
45
+ FileUtils.rm_r path
42
46
  end
43
47
 
44
48
  def mkfile(file, content = String.new)
@@ -56,11 +60,6 @@ end
56
60
  class TestCLI < MiniTest::Test
57
61
  include CLIUtils
58
62
 
59
- def teardown
60
- # who is changing the working directory without restoring it?!
61
- Dir.chdir File.dirname(__FILE__)
62
- end
63
-
64
63
  def test_help
65
64
  assert_output /--help/, '' do
66
65
  i = ReaPack::Index::CLI.new ['--help']
@@ -75,10 +74,26 @@ class TestCLI < MiniTest::Test
75
74
  end
76
75
  end
77
76
 
77
+ def test_help_version
78
+ stdout, _ = capture_io do
79
+ i = ReaPack::Index::CLI.new ['--help', '--version']
80
+ assert_equal true, i.run # does nothing
81
+ end
82
+
83
+ refute_match ReaPack::Index::VERSION.to_s, stdout
84
+ end
85
+
78
86
  def test_invalid_option
79
- assert_output '', /reapack-indexer: invalid option: --hello-world/i do
87
+ assert_output '', /reapack-index: invalid option: --hello-world/i do
80
88
  i = ReaPack::Index::CLI.new ['--hello-world']
81
- assert_equal false, i.run # does nothing
89
+ assert_equal false, i.run
90
+ end
91
+ end
92
+
93
+ def test_ambiguous_option
94
+ assert_output '', /reapack-index: ambiguous option: --c/i do
95
+ i = ReaPack::Index::CLI.new ['--c']
96
+ assert_equal false, i.run
82
97
  end
83
98
  end
84
99
 
@@ -90,25 +105,26 @@ class TestCLI < MiniTest::Test
90
105
  end
91
106
  end
92
107
 
93
- def test_initial_commit
108
+ def test_scan_initial_commit
94
109
  wrapper do
95
110
  @git.add mkfile('test1.lua', '@version 1.0')
96
111
  @git.add mkfile('Category/test2.lua', '@version 1.0')
97
112
  @git.add mkfile('Category/Sub/test3.lua', '@version 1.0')
98
113
  @git.commit 'initial commit'
99
114
 
100
- assert_output /3 new packages/, '' do
115
+ assert_output /3 new packages/ do
101
116
  assert_equal true, @indexer.run
102
117
  end
103
118
 
104
119
  assert_match 'Category/test2.lua', read_index
105
120
  assert_match "raw/#{@git.log(1).last.sha}/test1.lua", read_index
121
+ assert_match 'https://github.com/cfillion/test-repository/raw', read_index
106
122
 
107
123
  assert_match @git.log(1).last.date.utc.iso8601, read_index
108
124
  end
109
125
  end
110
126
 
111
- def test_normal_commit
127
+ def test_scan_normal_commit
112
128
  wrapper do
113
129
  @git.add mkfile('README.md', '# Hello World')
114
130
  @git.commit 'initial commit'
@@ -118,7 +134,7 @@ class TestCLI < MiniTest::Test
118
134
  @git.add mkfile('Category/Sub/test3.lua', '@version 1.0')
119
135
  @git.commit 'second commit'
120
136
 
121
- assert_output "3 new categories, 3 new packages, 3 new versions\n", '' do
137
+ assert_output "3 new categories, 3 new packages, 3 new versions\n" do
122
138
  assert_equal true, @indexer.run
123
139
  end
124
140
 
@@ -135,7 +151,7 @@ class TestCLI < MiniTest::Test
135
151
  Dir.mkdir pwd
136
152
  Dir.chdir pwd
137
153
 
138
- assert_output /1 new package/, '' do
154
+ assert_output /1 new package/ do
139
155
  assert_equal true, @indexer.run
140
156
  end
141
157
 
@@ -191,7 +207,7 @@ class TestCLI < MiniTest::Test
191
207
  @git.add mkfile('test.lua', 'no version tag in this script!')
192
208
  @git.commit 'initial commit'
193
209
 
194
- stdout, stderr = capture_io do
210
+ _, stderr = capture_io do
195
211
  assert_equal true, @indexer.run
196
212
  end
197
213
 
@@ -217,7 +233,7 @@ class TestCLI < MiniTest::Test
217
233
 
218
234
  mkfile 'index.xml', <<-XML
219
235
  <?xml version="1.0" encoding="utf-8"?>
220
- <index version="1" commit="#{@git.log(1).last.sha}"/>
236
+ <index version="1" name="hello" commit="#{@git.log(1).last.sha}"/>
221
237
  XML
222
238
  }
223
239
 
@@ -241,31 +257,7 @@ class TestCLI < MiniTest::Test
241
257
 
242
258
  mkfile 'index.xml', <<-XML
243
259
  <?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"/>
260
+ <index version="1" name="hello" commit="hello world"/>
269
261
  XML
270
262
  }
271
263
 
@@ -354,7 +346,7 @@ class TestCLI < MiniTest::Test
354
346
 
355
347
  mkfile 'index.xml', <<-XML
356
348
  <?xml version="1.0" encoding="utf-8"?>
357
- <index version="1" commit="#{@git.log(1).last.sha}">
349
+ <index version="1" name="hello" commit="#{@git.log(1).last.sha}">
358
350
  <category name="Test">
359
351
  <reapack name="test.lua" type="script">
360
352
  <version name="1.0"/>
@@ -386,7 +378,7 @@ class TestCLI < MiniTest::Test
386
378
  @git.remove script
387
379
  @git.commit 'second commit'
388
380
 
389
- assert_output /1 removed package/i, '' do
381
+ assert_output /1 removed package/i do
390
382
  assert_equal true, @indexer.run
391
383
  end
392
384
 
@@ -399,7 +391,7 @@ class TestCLI < MiniTest::Test
399
391
  @git.add mkfile('test.lua', '@version 1.0')
400
392
  @git.commit 'initial commit'
401
393
 
402
- assert_output nil, '' do
394
+ capture_io do
403
395
  assert_equal true, @indexer.run
404
396
  end
405
397
 
@@ -445,7 +437,10 @@ class TestCLI < MiniTest::Test
445
437
  @git.add mkfile('.gitkeep')
446
438
  @git.commit 'initial commit'
447
439
 
448
- assert_output("empty index\n", "commit created\n") { @indexer.run }
440
+ mkfile 'ignored1'
441
+ @git.add mkfile('ignored2')
442
+
443
+ assert_output("empty index\n", /commit created\n/) { @indexer.run }
449
444
 
450
445
  commit = @git.log(1).last
451
446
  assert_equal 'index: empty index', commit.message
@@ -453,6 +448,19 @@ class TestCLI < MiniTest::Test
453
448
  end
454
449
  end
455
450
 
451
+ def test_create_initial_commit
452
+ wrapper ['--commit'] do
453
+ mkfile 'ignored1'
454
+ @git.add mkfile('ignored2')
455
+
456
+ assert_output("empty index\n", /commit created\n/) { @indexer.run }
457
+
458
+ commit = @git.log(1).last
459
+ assert_equal 'index: empty index', commit.message
460
+ assert_equal ['index.xml'], commit.gtree.files.keys
461
+ end
462
+ end
463
+
456
464
  def test_create_commit_accept
457
465
  wrapper ['--prompt-commit'] do
458
466
  @git.add mkfile('.gitkeep')
@@ -460,7 +468,7 @@ class TestCLI < MiniTest::Test
460
468
 
461
469
  fake_input do |fio|
462
470
  fio.getch = 'y'
463
- stdin, stderr = capture_io { @indexer.run }
471
+ _, stderr = capture_io { @indexer.run }
464
472
  assert_match /commit created/i, stderr
465
473
  end
466
474
 
@@ -477,7 +485,7 @@ class TestCLI < MiniTest::Test
477
485
 
478
486
  fake_input do |fio|
479
487
  fio.getch = 'n'
480
- stdin, stderr = capture_io { @indexer.run }
488
+ _, stderr = capture_io { @indexer.run }
481
489
  refute_match /commit created/i, stderr
482
490
  end
483
491
 
@@ -496,7 +504,7 @@ class TestCLI < MiniTest::Test
496
504
  end
497
505
 
498
506
  def test_no_config
499
- stdout, stderr = capture_io do
507
+ stdout, _ = capture_io do
500
508
  wrapper ['--no-config'], setup: proc {
501
509
  mkfile '.reapack-index.conf', '--help'
502
510
  }
@@ -510,7 +518,7 @@ class TestCLI < MiniTest::Test
510
518
  mkfile '.reapack-index.conf', "--verbose\n--no-warnings"
511
519
  }
512
520
 
513
- stdout, stderr = capture_io do
521
+ _, stderr = capture_io do
514
522
  wrapper ['--warnings'], setup: setup do
515
523
  @git.add mkfile('test.lua', 'no version tag in this script!')
516
524
  @git.commit 'initial commit'
@@ -524,8 +532,6 @@ class TestCLI < MiniTest::Test
524
532
  end
525
533
 
526
534
  def test_config_subdirectory
527
- pwd = Dir.pwd
528
-
529
535
  wrapper do
530
536
  mkfile '.reapack-index.conf', '--help'
531
537
  mkfile 'Category/.gitkeep'
@@ -536,8 +542,6 @@ class TestCLI < MiniTest::Test
536
542
  ReaPack::Index::CLI.new
537
543
  end
538
544
  end
539
- ensure
540
- Dir.chdir pwd
541
545
  end
542
546
 
543
547
  def test_working_directory_with_options
@@ -545,22 +549,23 @@ class TestCLI < MiniTest::Test
545
549
  @git.add mkfile('README.md', '# Hello World')
546
550
  @git.commit 'initial commit'
547
551
 
548
- begin
549
- pwd = Dir.pwd
550
- Dir.chdir @git.dir.to_s
552
+ Dir.chdir @git.dir.to_s
551
553
 
552
- assert_output '', '' do
553
- i2 = ReaPack::Index::CLI.new ['--no-commit', '--quiet']
554
- i2.run
555
- end
556
- ensure
557
- Dir.chdir pwd
554
+ assert_output '', '' do
555
+ i2 = ReaPack::Index::CLI.new ['--no-commit', '--quiet']
556
+ i2.run
558
557
  end
559
558
  end
560
559
  end
561
560
 
562
561
  def test_no_such_repository
563
- assert_output '', /no such file or directory/i do
562
+ no_such_file = if RUBY_PLATFORM =~ /mingw32/
563
+ /cannot find the path specified/i
564
+ else
565
+ /no such file or directory/i
566
+ end
567
+
568
+ assert_output '', no_such_file do
564
569
  i = ReaPack::Index::CLI.new ['/hello/world']
565
570
  assert_equal false, i.run
566
571
  end
@@ -598,7 +603,7 @@ class TestCLI < MiniTest::Test
598
603
  }
599
604
 
600
605
  wrapper ['--progress'], setup: setup do
601
- assert_output '', "Nothing to do!\n" do
606
+ assert_output '', /Nothing to do!\n/ do
602
607
  @indexer.run
603
608
  end
604
609
  end
@@ -628,7 +633,7 @@ class TestCLI < MiniTest::Test
628
633
 
629
634
  def test_website_link
630
635
  wrapper ['-l http://cfillion.tk'] do
631
- assert_output "1 new website link, empty index\n", '' do
636
+ assert_output "1 new website link, empty index\n" do
632
637
  assert_equal true, @indexer.run
633
638
  end
634
639
 
@@ -636,7 +641,7 @@ class TestCLI < MiniTest::Test
636
641
  end
637
642
  end
638
643
 
639
- def test_website_link
644
+ def test_donation_link
640
645
  wrapper ['--donation-link', 'Link Label=http://cfillion.tk'] do
641
646
  assert_output "1 new donation link, empty index\n" do
642
647
  assert_equal true, @indexer.run
@@ -648,12 +653,15 @@ class TestCLI < MiniTest::Test
648
653
  end
649
654
 
650
655
  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
656
+ wrapper ['--link', 'shinsekai yori', '--donation-link', 'hello world',
657
+ '--link', 'http://cfillion.tk'] do
658
+ stdout, stderr = capture_io do
654
659
  assert_equal true, @indexer.run
655
660
  end
656
661
 
662
+ assert_equal "1 new website link, empty index\n", stdout
663
+ assert_match /warning: --link: invalid link: shinsekai yori/i, stderr
664
+ assert_match /warning: --donation-link: invalid link: hello world/i, stderr
657
665
  assert_match 'rel="website">http://cfillion.tk</link>', read_index
658
666
  end
659
667
  end
@@ -697,17 +705,73 @@ class TestCLI < MiniTest::Test
697
705
  end
698
706
 
699
707
  def test_no_git_remote
700
- wrapper [], remote: false do
708
+ wrapper [], remote: '*' do
709
+ # no crash :)
701
710
  assert_output { @indexer.run }
702
711
  end
703
712
  end
704
713
 
714
+ def test_weird_git_remote_url
715
+ wrapper [], remote: 'scp://hello.world/$path' do
716
+ _, stderr = capture_io { @indexer.run }
717
+ refute_match /invalid url/i, stderr
718
+ refute_match '$path', stderr
719
+ end
720
+ end
721
+
722
+ def test_auto_url_template_ssh
723
+ wrapper [], remote: 'git@github.com:User/Repo.git' do
724
+ @git.add mkfile('hello.lua', '@version 1.0')
725
+ @git.commit 'initial commit'
726
+
727
+ assert_output { @indexer.run }
728
+ assert_match "https://github.com/User/Repo/raw/#{@git.log(1).last.sha}/hello.lua", read_index
729
+ end
730
+ end
731
+
732
+ def test_auto_url_template_https
733
+ wrapper [], remote: 'https://github.com/User/Repo.git' do
734
+ @git.add mkfile('hello.lua', '@version 1.0')
735
+ @git.commit 'initial commit'
736
+
737
+ assert_output { @indexer.run }
738
+ assert_match "https://github.com/User/Repo/raw/#{@git.log(1).last.sha}/hello.lua", read_index
739
+ end
740
+ end
741
+
742
+ def test_url_template
743
+ wrapper ['--url-template=http://host/$path'], remote: false do
744
+ @git.add mkfile('hello.lua', '@version 1.0')
745
+ @git.commit 'initial commit'
746
+
747
+ assert_output { @indexer.run }
748
+ assert_match 'http://host/hello.lua', read_index
749
+ end
750
+ end
751
+
752
+ def test_url_template_override_git
753
+ wrapper ['--url-template=http://host/$path'] do
754
+ @git.add mkfile('hello.lua', '@version 1.0')
755
+ @git.commit 'initial commit'
756
+
757
+ assert_output { @indexer.run }
758
+ assert_match 'http://host/hello.lua', read_index
759
+ end
760
+ end
761
+
762
+ def test_url_template_invalid
763
+ wrapper ['--url-template=minoshiro'] do
764
+ @git.add mkfile('hello.lua', '@version 1.0')
765
+ @git.commit 'initial commit'
766
+
767
+ _, stderr = capture_io { @indexer.run }
768
+ assert_match /--url-template: \$path placeholder is missing/i, stderr
769
+ end
770
+ end
771
+
705
772
  def test_about
706
773
  opts = ['--about']
707
-
708
- setup = proc {
709
- opts << mkfile('README.md', '# Hello World')
710
- }
774
+ setup = proc { opts << mkfile('README.md', '# Hello World') }
711
775
 
712
776
  wrapper opts, setup: setup do
713
777
  assert_output "1 modified metadata, empty index\n" do
@@ -843,4 +907,106 @@ test2.lua contains invalid metadata:
843
907
  end
844
908
  end
845
909
  end
910
+
911
+ def test_check_ignore
912
+ setup = proc { Dir.chdir @git.dir.to_s }
913
+
914
+ expected = <<-STDERR
915
+ .
916
+
917
+ Finished checks for 1 package with 0 failures
918
+ STDERR
919
+
920
+ wrapper ['--check', '--ignore=Hello',
921
+ '--ignore=Chunky/Bacon.lua', '--ignore=test2.lua'], setup: setup do
922
+ mkfile 'Hello/World.lua', 'konnichiwa'
923
+ mkfile 'Chunky/Bacon.lua', 'konnichiwa'
924
+ mkfile 'Directory/test2.lua', '@version 1.0'
925
+
926
+ assert_output nil, expected do
927
+ @indexer.run
928
+ end
929
+ end
930
+ end
931
+
932
+ def test_ignore_config
933
+ expected = <<-STDERR
934
+ .
935
+
936
+ Finished checks for 1 package with 0 failures
937
+ STDERR
938
+
939
+ setup = proc {
940
+ mkfile '.reapack-index.conf', <<-CONFIG
941
+ --ignore=Hello
942
+ --ignore=Chunky/Bacon.lua
943
+ --ignore=test2.lua
944
+ CONFIG
945
+ }
946
+
947
+ wrapper ['--check'], setup: setup do
948
+ mkfile 'Hello/World.lua', 'konnichiwa'
949
+ mkfile 'Chunky/Bacon.lua', 'konnichiwa'
950
+ mkfile 'Directory/test2.lua', '@version 1.0'
951
+
952
+ assert_output nil, expected do
953
+ @indexer.run
954
+ end
955
+ end
956
+ end
957
+
958
+ def test_scan_ignore
959
+ setup = proc { Dir.chdir @git.dir.to_s }
960
+
961
+ wrapper ['--ignore=Hello', '--ignore=Chunky/Bacon.lua',
962
+ '--ignore=test2.lua'], setup: setup do
963
+ @git.add mkfile('README.md', '# Hello World')
964
+ @git.commit 'initial commit'
965
+
966
+ @git.add mkfile('Hello/World.lua', 'konnichiwa')
967
+ @git.add mkfile('Chunky/Bacon.lua', 'konnichiwa')
968
+ @git.add mkfile('Directory/test2.lua', '@version 1.0')
969
+ @git.commit 'second commit'
970
+
971
+ assert_output "1 new category, 1 new package, 1 new version\n" do
972
+ assert_equal true, @indexer.run
973
+ end
974
+
975
+ refute_match 'Hello/World.lua', read_index
976
+ refute_match 'Chunky/Bacon.lua', read_index
977
+ assert_match 'Directory/test2.lua', read_index
978
+ end
979
+ end
980
+
981
+ def test_noname
982
+ wrapper do
983
+ assert_output nil, /The name of this index is unset/i do
984
+ assert_equal true, @indexer.run
985
+ end
986
+
987
+ refute_match 'name', read_index
988
+ end
989
+ end
990
+
991
+ def test_set_name
992
+ wrapper ['--name=Hello World'] do
993
+ _, stderr = capture_io do
994
+ assert_equal true, @indexer.run
995
+ end
996
+
997
+ refute_match /The name of this index is unset/i, stderr
998
+ assert_match 'name="Hello World"', read_index
999
+ end
1000
+ end
1001
+
1002
+ def test_set_name_invalid
1003
+ wrapper ['--name=Hello/World'] do
1004
+ _, stderr = capture_io do
1005
+ assert_equal true, @indexer.run
1006
+ end
1007
+
1008
+ refute_match /The name of this index is unset/i, stderr
1009
+ assert_match /invalid name: 'Hello\/World'/i, stderr
1010
+ end
1011
+ end
846
1012
  end