reapack-index 1.0 → 1.1beta1

Sign up to get free protection for your applications and to get access to all the features.
@@ -42,7 +42,6 @@ class ReaPack::Index
42
42
 
43
43
  def time=(new_time)
44
44
  return if new_time == time
45
-
46
45
  if new_time.nil?
47
46
  @node.remove_attribute TIME
48
47
  else
@@ -61,7 +60,7 @@ class ReaPack::Index
61
60
  yield
62
61
 
63
62
  new_sources = hash_sources children(Source::TAG)
64
- @dirty = was_dirty || old_sources != new_sources
63
+ @dirty = old_sources != new_sources unless was_dirty
65
64
 
66
65
  raise Error, 'no files provided' if new_sources.empty?
67
66
  end
@@ -74,8 +73,8 @@ class ReaPack::Index
74
73
 
75
74
  private
76
75
  def hash_sources(nodes)
77
- nodes.map {|src|
78
- [src[Source::PLATFORM] || 'all', src[Source::FILE], src.content]
76
+ nodes.map {|node|
77
+ [node[Source::PLATFORM] || 'all', node[Source::FILE], node.content]
79
78
  }
80
79
  end
81
80
  end
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.add_runtime_dependency 'addressable', '~> 2.4'
30
30
  spec.add_runtime_dependency 'colorize', '~> 0.7'
31
31
  spec.add_runtime_dependency 'gitable', '~> 0.3'
32
- spec.add_runtime_dependency 'metaheader', '~> 1.2.1'
32
+ spec.add_runtime_dependency 'metaheader', '~> 1.3beta1'
33
33
  spec.add_runtime_dependency 'nokogiri', '~> 1.6.8'
34
34
  spec.add_runtime_dependency 'pandoc-ruby', '~> 2.0'
35
35
  spec.add_runtime_dependency 'rugged', '~> 0.24'
@@ -2,11 +2,11 @@
2
2
  !include Sections.nsh
3
3
  !include StrRep.nsh
4
4
 
5
- !define VERSION "1.0rc3"
5
+ !define VERSION "1.1beta1"
6
6
  !define NAME "ReaPack Index ${VERSION}"
7
7
  !define LONG_VERSION "0.1.0.0"
8
8
 
9
- !define RUBY_VERSION "2.3.1"
9
+ !define RUBY_VERSION "2.3.0"
10
10
  !define RUBYINSTALLER_FILE "rubyinstaller-${RUBY_VERSION}.exe"
11
11
  !define RUBYINSTALLER_URL \
12
12
  "http://dl.bintray.com/oneclick/rubyinstaller/${RUBYINSTALLER_FILE}"
@@ -26,8 +26,20 @@ class TestCLI::Metadata < MiniTest::Test
26
26
  end
27
27
  end
28
28
 
29
+ def test_screenshot_link
30
+ wrapper ['--screenshot-link', 'Link Label http://cfillion.tk'] do
31
+ assert_output "1 new screenshot link, empty index\n" do
32
+ assert_equal true, @cli.run
33
+ end
34
+
35
+ assert_match 'rel="screenshot" href="http://cfillion.tk">Link Label</link>',
36
+ read_index
37
+ end
38
+ end
39
+
29
40
  def test_invalid_link
30
41
  wrapper ['--link', 'shinsekai yori', '--donation-link', 'hello world',
42
+ '--screenshot-link', 'chunky bacon',
31
43
  '--link', 'http://cfillion.tk'] do
32
44
  stdout, stderr = capture_io do
33
45
  assert_equal true, @cli.run
@@ -36,6 +48,7 @@ class TestCLI::Metadata < MiniTest::Test
36
48
  assert_equal "1 new website link, empty index\n", stdout
37
49
  assert_match /warning: --link: invalid link 'shinsekai yori'/i, stderr
38
50
  assert_match /warning: --donation-link: invalid link 'hello world'/i, stderr
51
+ assert_match /warning: --screenshot-link: invalid link 'chunky bacon'/i, stderr
39
52
  assert_match 'rel="website">http://cfillion.tk</link>', read_index
40
53
  end
41
54
  end
@@ -426,4 +426,18 @@ processing [a-f0-9]{7}: third commit
426
426
  def test_no_arguments
427
427
  wrapper ['--scan'] do; end
428
428
  end
429
+
430
+ def test_strict_mode
431
+ wrapper do
432
+ refute @cli.index.strict
433
+ end
434
+
435
+ wrapper ['--no-strict'] do
436
+ refute @cli.index.strict
437
+ end
438
+
439
+ wrapper ['--strict'] do
440
+ assert @cli.index.strict
441
+ end
442
+ end
429
443
  end
data/test/data/index.xml CHANGED
@@ -2,7 +2,7 @@
2
2
  <index version="1" commit="f572d396fae9206628714fb2ce00f72e94f2258f" name="Test">
3
3
  <category name="Category Name">
4
4
  <reapack name="Hello World.lua" type="script">
5
- <version name="1.0" author="cfillion">
5
+ <version name="1.0" author="cfillion" time="2015-01-01T00:00:00Z">
6
6
  <changelog><![CDATA[Fixed a division by zero error.]]></changelog>
7
7
  <source>https://google.com/Category%20Name/Hello%20World.lua</source>
8
8
  </version>
@@ -70,21 +70,21 @@ class TestIndex::Metadata < MiniTest::Test
70
70
  assert_equal '1 new website link, 1 removed website link, empty index', index.changelog
71
71
  end
72
72
 
73
- def test_description
73
+ def test_about
74
74
  index = ReaPack::Index.new @dummy_path
75
75
  index.write!
76
76
 
77
- assert_empty index.description
77
+ assert_empty index.about
78
78
  assert_equal false, index.modified?
79
79
 
80
- index.description = 'Hello World'
81
- refute_empty index.description
80
+ index.about = 'Hello World'
81
+ refute_empty index.about
82
82
  assert_equal true, index.modified?
83
83
  assert_equal '1 modified metadata', index.changelog
84
84
 
85
85
  index.write!
86
86
 
87
- index.description = 'Hello World'
87
+ index.about = 'Hello World'
88
88
  assert_equal false, index.modified?
89
89
  end
90
90
 
@@ -68,85 +68,6 @@ class TestIndex::Scan < MiniTest::Test
68
68
  refute_match '<reapack', File.read(index.path)
69
69
  end
70
70
 
71
- def test_edit_version_amend_off
72
- index = ReaPack::Index.new @real_path
73
- assert_equal false, index.amend
74
-
75
- index.url_template = 'http://google.com/$path'
76
- index.files = ['Category Name/Hello World.lua']
77
-
78
- index.scan index.files.first, <<-IN
79
- @version 1.0
80
- @changelog New Changelog!
81
- IN
82
-
83
- assert_equal false, index.modified?
84
- assert_empty index.changelog
85
- end
86
-
87
- def test_edit_version_amend_on
88
- index = ReaPack::Index.new @real_path
89
- index.commit = @commit
90
- index.files = ['Category Name/Hello World.lua']
91
- index.time = Time.now # must not be added to the index in amend mode
92
- index.url_template = 'http://google.com/$path'
93
-
94
- index.amend = true
95
- assert_equal true, index.amend
96
-
97
- index.scan index.files.first, <<-IN
98
- @version 1.0
99
- @changelog Intermediate Changelog!
100
- IN
101
-
102
- # when reindexing the same file a second time,
103
- # the changelog is expected to only have been bumped a single time
104
- index.scan index.files.first, <<-IN
105
- @version 1.0
106
- @changelog New Changelog!
107
- IN
108
-
109
- assert index.modified?, 'index is not modified'
110
- assert_equal '1 modified package, 1 modified version', index.changelog
111
-
112
- index.write @dummy_path
113
- contents = File.read @dummy_path
114
-
115
- assert_match @commit, contents
116
- assert_match 'New Changelog!', contents
117
- end
118
-
119
- def test_edit_version_amend_unmodified
120
- index = ReaPack::Index.new @real_path
121
- index.amend = true
122
-
123
- index.url_template = 'https://google.com/$path'
124
- index.files = ['Category Name/Hello World.lua']
125
-
126
- index.scan index.files.first, <<-IN
127
- @version 1.0
128
- @author cfillion
129
- @changelog Fixed a division by zero error.
130
- IN
131
-
132
- assert_equal false, index.modified?
133
- assert_empty index.changelog
134
- end
135
-
136
- def test_author
137
- index = ReaPack::Index.new @dummy_path
138
- index.url_template = 'http://host/$path'
139
- index.files = ['Category/script.lua']
140
-
141
- index.scan index.files.first, <<-IN
142
- @version 1.0
143
- @author cfillion
144
- IN
145
-
146
- index.write!
147
- assert_match '<version name="1.0" author="cfillion">', File.read(index.path)
148
- end
149
-
150
71
  def test_noindex
151
72
  index = ReaPack::Index.new @real_path
152
73
 
@@ -171,37 +92,17 @@ class TestIndex::Scan < MiniTest::Test
171
92
  refute_match '<category', contents
172
93
  end
173
94
 
174
- def test_metapackage_on
95
+ def test_strict_mode
175
96
  index = ReaPack::Index.new @dummy_path
97
+ index.strict = true
176
98
  index.url_template = 'http://host/$path'
177
99
  index.files = ['Category/script.lua']
178
100
 
179
101
  error = assert_raises ReaPack::Index::Error do
180
- index.scan index.files.first, "@version 1.0\n@metapackage"
102
+ index.scan index.files.first, "@version 1.0\n@qwerty"
181
103
  end
182
104
 
183
- assert_equal 'no files provided', error.message
184
- end
185
-
186
- def test_metapackage_off
187
- index = ReaPack::Index.new @dummy_path
188
- index.url_template = 'http://host/$path'
189
- index.files = ['Category/extension.ext']
190
-
191
- index.scan index.files.first, "@version 1.0\n@metapackage false"
192
- end
193
-
194
- def test_version_time
195
- index = ReaPack::Index.new @dummy_path
196
- index.url_template = 'http://host/$path'
197
- index.files = ['Category/script.lua']
198
- index.time = Time.new 2016, 2, 11, 20, 16, 40, -5 * 3600
199
-
200
- index.scan index.files.first, '@version 1.0'
201
-
202
- index.write!
203
- assert_match '<version name="1.0" time="2016-02-12T01:16:40Z">',
204
- File.read(index.path)
105
+ assert_equal "unknown tag 'qwerty'", error.message
205
106
  end
206
107
 
207
108
  def test_extension
@@ -278,4 +179,31 @@ class TestIndex::Scan < MiniTest::Test
278
179
  index.write!
279
180
  assert_equal expected, File.read(index.path)
280
181
  end
182
+
183
+ def test_theme
184
+ index = ReaPack::Index.new @dummy_path
185
+ index.url_template = 'http://host/$path'
186
+ index.files = ['Themes/Default_4.0 + width.theme']
187
+
188
+ index.scan index.files.first, <<-IN
189
+ @version 1.0
190
+ @provides Default_4.0_width.ReaperThemeZip http://stash.reaper.fm/27310/$path
191
+ IN
192
+
193
+ expected = <<-XML
194
+ <?xml version="1.0" encoding="utf-8"?>
195
+ <index version="1">
196
+ <category name="Themes">
197
+ <reapack name="Default_4.0 + width.theme" type="theme">
198
+ <version name="1.0">
199
+ <source file="Default_4.0_width.ReaperThemeZip">http://stash.reaper.fm/27310/Default_4.0_width.ReaperThemeZip</source>
200
+ </version>
201
+ </reapack>
202
+ </category>
203
+ </index>
204
+ XML
205
+
206
+ index.write!
207
+ assert_equal expected, File.read(index.path)
208
+ end
281
209
  end
@@ -0,0 +1,102 @@
1
+ require File.expand_path '../../helper', __FILE__
2
+
3
+ TestScanner ||= Class.new MiniTest::Test
4
+
5
+ class TestScanner::TestMakeUrl < MiniTest::Test
6
+ def setup
7
+ @cat = MiniTest::Mock.new
8
+
9
+ @pkg = MiniTest::Mock.new
10
+ @pkg.expect :path, 'Hello/World.lua'
11
+ @pkg.expect :path, 'Hello/World.lua'
12
+
13
+ @ver = MiniTest::Mock.new
14
+ @ver.expect :name, '1.0'
15
+
16
+ @cdetector = MiniTest::Mock.new
17
+ @cdetector.expect :[], nil, ['Hello/World.lua']
18
+
19
+ @index = MiniTest::Mock.new
20
+ @index.expect :cdetector, @cdetector
21
+
22
+ @scanner = ReaPack::Index::Scanner.new @cat, @pkg, nil, @index
23
+ @scanner.instance_variable_set :@ver, @ver
24
+ end
25
+
26
+ def teardown
27
+ [@cat, @pkg, @ver, @index, @cdetector].each {|mock| mock.verify }
28
+ end
29
+
30
+ def test_path
31
+ @index.expect :files, ['Category/script.lua']
32
+ @index.expect :url_template, '$path'
33
+ @index.expect :commit, 'C0FF33'
34
+
35
+ assert_equal 'Category/script.lua', @scanner.make_url('Category/script.lua')
36
+ end
37
+
38
+ def test_commit
39
+ @index.expect :files, ['Hello/World.lua']
40
+ @index.expect :url_template, '$commit'
41
+ @index.expect :commit, 'C0FF33'
42
+
43
+ assert_equal 'C0FF33', @scanner.make_url('Hello/World.lua')
44
+ end
45
+
46
+ def test_defaut_branch
47
+ @index.expect :commit, nil
48
+
49
+ assert_match 'master', @scanner.make_url('Category/script.lua', '$commit')
50
+ end
51
+
52
+ def test_version
53
+ @index.expect :files, ['Category/script.lua']
54
+ @index.expect :url_template, '$version'
55
+ @index.expect :commit, 'C0FF33'
56
+
57
+ assert_equal '1.0', @scanner.make_url('Category/script.lua')
58
+ end
59
+
60
+ def test_package
61
+ @index.expect :files, ['Category/script.lua']
62
+ @index.expect :url_template, '$package'
63
+ @index.expect :commit, 'C0FF33'
64
+
65
+ assert_equal 'Hello/World.lua', @scanner.make_url('Category/script.lua')
66
+ end
67
+
68
+ def test_without_template
69
+ @index.expect :commit, nil
70
+ @scanner.make_url 'script.lua', 'ok if explicit template'
71
+
72
+ @index.expect :url_template, nil
73
+ error = assert_raises ReaPack::Index::Error do
74
+ @scanner.make_url 'script.lua'
75
+ end
76
+
77
+ assert_match /url template/i, error.message
78
+ end
79
+
80
+ def test_unlisted
81
+ @index.expect :commit, nil
82
+ @index.expect :files, []
83
+ @index.expect :url_template, 'http://implicit/url/template'
84
+
85
+ @scanner.make_url 'unlisted.lua', 'ok with explicit url template'
86
+
87
+ error = assert_raises ReaPack::Index::Error do
88
+ @scanner.make_url 'unlisted.lua'
89
+ end
90
+
91
+ assert_equal "file not found 'unlisted.lua'", error.message
92
+ end
93
+
94
+ def test_repeat
95
+ @index.expect :files, ['Category/script.lua']
96
+ @index.expect :url_template, '$path $path'
97
+ @index.expect :commit, 'C0FF33'
98
+
99
+ assert_equal 'Category/script.lua Category/script.lua',
100
+ @scanner.make_url('Category/script.lua')
101
+ end
102
+ end
@@ -0,0 +1,126 @@
1
+ require File.expand_path '../../helper', __FILE__
2
+
3
+ TestScanner ||= Class.new MiniTest::Test
4
+
5
+ class TestScanner::TestValidation < MiniTest::Test
6
+ def setup
7
+ @pkg = MiniTest::Mock.new
8
+ @pkg.expect :type, :script
9
+ @pkg.expect :path, 'cat/test'
10
+
11
+ @mh = MetaHeader.new String.new
12
+ @mh[:version] = '1.0'
13
+
14
+ @index = MiniTest::Mock.new
15
+ @index.expect :cdetector, ReaPack::Index::ConflictDetector.new
16
+
17
+ @scanner = ReaPack::Index::Scanner.new nil, @pkg, @mh, @index
18
+ end
19
+
20
+ def test_validation
21
+ mh_mock = MiniTest::Mock.new
22
+ mh_mock.expect :alias, nil, [Hash]
23
+ mh_mock.expect :validate, ['first', 'second'], [Hash]
24
+
25
+ @scanner.instance_variable_set :@mh, mh_mock
26
+
27
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
28
+
29
+ assert_equal "first\nsecond", error.message
30
+ mh_mock.verify
31
+ end
32
+
33
+ def test_version
34
+ @mh.delete :version
35
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
36
+ assert_equal "missing tag 'version'", error.message
37
+
38
+ @mh[:version] = 'no.numbers'
39
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
40
+ assert_equal "invalid value for tag 'version'", error.message
41
+
42
+ @mh[:version] = 'v1.0'
43
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
44
+ assert_equal "invalid value for tag 'version'", error.message
45
+
46
+ @mh[:version] = true
47
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
48
+ assert_equal "missing value for tag 'version'", error.message
49
+
50
+ @mh[:version] = "hello\nworld"
51
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
52
+ assert_equal "tag 'version' must be singleline", error.message
53
+
54
+ @mh[:version] = '1.99999'
55
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
56
+ assert_equal "invalid value for tag 'version': segment overflow (99999 > 65535)",
57
+ error.message
58
+ end
59
+
60
+ def test_author
61
+ @mh[:author] = true
62
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
63
+ assert_equal "missing value for tag 'author'", error.message
64
+
65
+ @mh[:author] = "hello\nworld"
66
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
67
+ assert_equal "tag 'author' must be singleline", error.message
68
+ end
69
+
70
+ def test_changelog
71
+ @mh[:changelog] = true
72
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
73
+ assert_equal "missing value for tag 'changelog'", error.message
74
+ end
75
+
76
+ def test_provides
77
+ @mh[:provides] = true
78
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
79
+ assert_equal "missing value for tag 'provides'", error.message
80
+
81
+ @mh[:provides] = '[hello] world'
82
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
83
+ assert_equal "invalid value for tag 'provides': unknown option 'hello'",
84
+ error.message
85
+ end
86
+
87
+ def test_index
88
+ @mh[:noindex] = 'value'
89
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
90
+ assert_equal "tag 'noindex' cannot have a value", error.message
91
+ end
92
+
93
+ def test_metapackage
94
+ @mh[:metapackage] = 'value'
95
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
96
+ assert_equal "tag 'metapackage' cannot have a value", error.message
97
+ end
98
+
99
+ def test_description
100
+ @mh[:description] = true
101
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
102
+ assert_equal "missing value for tag 'description'", error.message
103
+
104
+ @mh[:description] = "hello\nworld"
105
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
106
+ assert_equal "tag 'description' must be singleline", error.message
107
+ end
108
+
109
+ def test_about
110
+ @mh[:about] = true
111
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
112
+ assert_equal "missing value for tag 'about'", error.message
113
+ end
114
+
115
+ def test_screenshot
116
+ @mh[:screenshot] = true
117
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
118
+ assert_equal "missing value for tag 'screenshot'", error.message
119
+ end
120
+
121
+ def test_donation
122
+ @mh[:donation] = true
123
+ error = assert_raises(ReaPack::Index::Error) { @scanner.run }
124
+ assert_equal "missing value for tag 'donation'", error.message
125
+ end
126
+ end