rubygems-update 0.8.3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rubygems-update might be problematic. Click here for more details.
- data/ChangeLog +2335 -0
- data/README +54 -0
- data/Rakefile +293 -0
- data/Releases +98 -0
- data/TODO +7 -0
- data/bin/gem +11 -0
- data/bin/gem_server +111 -0
- data/bin/generate_yaml_index.rb +58 -0
- data/bin/update_rubygems +18 -0
- data/doc/doc.css +73 -0
- data/doc/makedoc.rb +4 -0
- data/examples/application/an-app.gemspec +26 -0
- data/examples/application/bin/myapp +3 -0
- data/examples/application/lib/somefunctionality.rb +3 -0
- data/gemspecs/README +4 -0
- data/gemspecs/cgikit-1.1.0.gemspec +18 -0
- data/gemspecs/jabber4r.gemspec +26 -0
- data/gemspecs/linguistics.gemspec +22 -0
- data/gemspecs/ook.gemspec +21 -0
- data/gemspecs/progressbar.gemspec +22 -0
- data/gemspecs/redcloth.gemspec +22 -0
- data/gemspecs/rublog.gemspec +23 -0
- data/gemspecs/ruby-doom.gemspec +21 -0
- data/gemspecs/rubyjdwp.gemspec +21 -0
- data/gemspecs/statistics.gemspec +21 -0
- data/lib/rubygems.rb +353 -0
- data/lib/rubygems/builder.rb +54 -0
- data/lib/rubygems/cmd_manager.rb +127 -0
- data/lib/rubygems/command.rb +191 -0
- data/lib/rubygems/config_file.rb +57 -0
- data/lib/rubygems/doc_manager.rb +94 -0
- data/lib/rubygems/format.rb +65 -0
- data/lib/rubygems/gem_commands.rb +925 -0
- data/lib/rubygems/gem_runner.rb +23 -0
- data/lib/rubygems/installer.rb +621 -0
- data/lib/rubygems/loadpath_manager.rb +108 -0
- data/lib/rubygems/old_format.rb +150 -0
- data/lib/rubygems/open-uri.rb +604 -0
- data/lib/rubygems/package.rb +740 -0
- data/lib/rubygems/remote_installer.rb +499 -0
- data/lib/rubygems/rubygems_version.rb +6 -0
- data/lib/rubygems/source_index.rb +130 -0
- data/lib/rubygems/specification.rb +613 -0
- data/lib/rubygems/user_interaction.rb +176 -0
- data/lib/rubygems/validator.rb +148 -0
- data/lib/rubygems/version.rb +279 -0
- data/lib/ubygems.rb +4 -0
- data/pkgs/sources/lib/sources.rb +6 -0
- data/pkgs/sources/sources.gemspec +14 -0
- data/post-install.rb +75 -0
- data/redist/session.gem +433 -0
- data/scripts/buildtests.rb +25 -0
- data/scripts/gemdoc.rb +62 -0
- data/scripts/runtest.rb +17 -0
- data/scripts/specdoc.rb +164 -0
- data/setup.rb +1360 -0
- data/test/bogussources.rb +5 -0
- data/test/data/legacy/keyedlist-0.4.0.ruby +11 -0
- data/test/data/legacy/keyedlist-0.4.0.yaml +16 -0
- data/test/data/lib/code.rb +1 -0
- data/test/data/one/README.one +1 -0
- data/test/data/one/lib/one.rb +3 -0
- data/test/data/one/one.gemspec +17 -0
- data/test/data/one/one.yaml +40 -0
- data/test/functional.rb +145 -0
- data/test/gemenvironment.rb +45 -0
- data/test/gemutilities.rb +18 -0
- data/test/insure_session.rb +46 -0
- data/test/mock/gems/gems/sources-0.0.1/lib/sources.rb +5 -0
- data/test/mock/gems/specifications/sources-0.0.1.gemspec +8 -0
- data/test/mockgemui.rb +45 -0
- data/test/onegem.rb +23 -0
- data/test/simple_gem.rb +66 -0
- data/test/test_builder.rb +13 -0
- data/test/test_cached_fetcher.rb +60 -0
- data/test/test_check_command.rb +28 -0
- data/test/test_command.rb +130 -0
- data/test/test_configfile.rb +36 -0
- data/test/test_format.rb +70 -0
- data/test/test_gemloadpaths.rb +45 -0
- data/test/test_gempaths.rb +115 -0
- data/test/test_loadmanager.rb +40 -0
- data/test/test_local_cache.rb +157 -0
- data/test/test_package.rb +600 -0
- data/test/test_parse_commands.rb +179 -0
- data/test/test_process_commands.rb +21 -0
- data/test/test_remote_fetcher.rb +162 -0
- data/test/test_remote_installer.rb +154 -0
- data/test/test_source_index.rb +58 -0
- data/test/test_specification.rb +286 -0
- data/test/test_validator.rb +53 -0
- data/test/test_version_comparison.rb +204 -0
- data/test/testgem.rc +6 -0
- data/test/user_capture.rb +1 -0
- data/test/yaml_data.rb +59 -0
- metadata +151 -0
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rubygems'
|
3
|
+
Gem::manage_gems
|
4
|
+
|
5
|
+
class TestSourceIndex < Test::Unit::TestCase
|
6
|
+
|
7
|
+
SAMPLE_SPEC = Gem::Specification.new do |s|
|
8
|
+
s.name = 'foo'
|
9
|
+
s.version = "1.2.3"
|
10
|
+
s.platform = Gem::Platform::RUBY
|
11
|
+
s.summary = "This is a cool package"
|
12
|
+
s.files = []
|
13
|
+
end
|
14
|
+
SAMPLE_SOURCE_HASH = { 'foo-1.2.3' => SAMPLE_SPEC }
|
15
|
+
|
16
|
+
def setup
|
17
|
+
@source_index = Gem::SourceIndex.new(SAMPLE_SOURCE_HASH)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_create_from_directory
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_search_for_missing_gem_returns_nothing
|
24
|
+
gems = @source_index.search("bogusstring")
|
25
|
+
assert_equal(gems.size, 0)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_search_empty_cache_returns_nothing
|
29
|
+
empty_source_index = Gem::SourceIndex.new({})
|
30
|
+
gems = empty_source_index.search("foo")
|
31
|
+
assert_equal(gems.size, 0)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_search_with_full_gem_name_returns_gem
|
35
|
+
gems = @source_index.search("foo")
|
36
|
+
assert_equal(gems.size, 1)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_search_with_full_gem_name_and_version_returns_gem
|
40
|
+
gems = @source_index.search("foo", "= 1.2.3")
|
41
|
+
assert_equal(gems.size, 1)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_search_with_full_gem_name_and_wrong_version_returns_nothing
|
45
|
+
gems = @source_index.search("foo", "= 3.2.1")
|
46
|
+
assert_equal(gems.size, 0)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_search_with_full_gem_name_in_mixed_case_returns_gem
|
50
|
+
gems = @source_index.search("FOo")
|
51
|
+
assert_equal(gems.size, 1,
|
52
|
+
%{This is failing because we have duplication between remote_installer and } +
|
53
|
+
%{source_index.rb. We should factor remote_installer's search logic out } +
|
54
|
+
%{into source_index.rb's search and delegate from remote_installer to } +
|
55
|
+
%{source_index.rb})
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
@@ -0,0 +1,286 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rubygems'
|
3
|
+
Gem::manage_gems
|
4
|
+
|
5
|
+
LEGACY_GEM_SPEC_FILE = 'test/data/legacy/keyedlist-0.4.0.ruby'
|
6
|
+
LEGACY_GEM_YAML_FILE = 'test/data/legacy/keyedlist-0.4.0.yaml'
|
7
|
+
|
8
|
+
class TestDefaultSpecification < Test::Unit::TestCase
|
9
|
+
def test_defaults
|
10
|
+
spec = Gem::Specification.new do |s|
|
11
|
+
s.name = "blah"
|
12
|
+
s.version = "1.3.5"
|
13
|
+
end
|
14
|
+
assert_equal "blah", spec.name
|
15
|
+
assert_equal "1.3.5", spec.version.to_s
|
16
|
+
assert_equal Gem::Platform::RUBY, spec.platform
|
17
|
+
assert_equal nil, spec.summary
|
18
|
+
assert_equal [], spec.files
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class TestSimpleSpecification < Test::Unit::TestCase
|
23
|
+
def setup
|
24
|
+
@spec = Gem::Specification.new do |s|
|
25
|
+
s.version = "1.0.0"
|
26
|
+
s.name = "boo"
|
27
|
+
s.platform = Gem::Platform::RUBY
|
28
|
+
s.date = Time.now
|
29
|
+
s.summary = "Hello"
|
30
|
+
s.require_paths = ["."]
|
31
|
+
end
|
32
|
+
@spec.mark_version
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_empty_specification_is_invalid
|
36
|
+
spec = Gem::Specification.new
|
37
|
+
assert_raises(Gem::InvalidSpecificationException) {
|
38
|
+
spec.validate
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_empty_non_nil_require_paths_is_invalid
|
43
|
+
@spec.require_paths = []
|
44
|
+
assert_raises(Gem::InvalidSpecificationException) {
|
45
|
+
@spec.validate
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_spec_with_all_required_attributes_validates
|
50
|
+
assert_nothing_raised {
|
51
|
+
@spec.validate
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_rdoc_files_included
|
56
|
+
@spec.files = %w(a b c d)
|
57
|
+
@spec.extra_rdoc_files = %w(x y z)
|
58
|
+
@spec.normalize
|
59
|
+
assert @spec.files.include?('x')
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_duplicate_files_removed
|
63
|
+
@spec.files = %w(a b c d b)
|
64
|
+
@spec.extra_rdoc_files = %w(x y z x)
|
65
|
+
@spec.normalize
|
66
|
+
assert_equal 1, @spec.files.select{|n| n=='b'}.size
|
67
|
+
assert_equal 1, @spec.extra_rdoc_files.select{|n| n=='x'}.size
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_invalid_version_in_gem_spec_makes_spec_invalid
|
71
|
+
@spec.rubygems_version = "3"
|
72
|
+
assert_raises(Gem::InvalidSpecificationException) { @spec.validate }
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_singular_attributes
|
76
|
+
@spec.require_path = 'mylib'
|
77
|
+
@spec.test_file = 'test/suite.rb'
|
78
|
+
@spec.executable = 'bin/app'
|
79
|
+
assert_equal ['mylib'], @spec.require_paths
|
80
|
+
assert_equal ['test/suite.rb'], @spec.test_files
|
81
|
+
assert_equal ['bin/app'], @spec.executables
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_add_bindir_to_list_of_files
|
85
|
+
@spec.bindir = 'apps'
|
86
|
+
@spec.executable = 'app'
|
87
|
+
assert_equal ['apps/app'], @spec.files
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_no_bindir_in_list_of_files
|
91
|
+
@spec.bindir = nil
|
92
|
+
@spec.executable = 'bin/app'
|
93
|
+
assert_equal ['bin/app'], @spec.files
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_deprecated_attributes
|
97
|
+
@spec.test_suite_file = 'test/suite.rb'
|
98
|
+
assert_equal ['test/suite.rb'], @spec.test_files
|
99
|
+
# XXX: what about the warning?
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_attribute_names
|
103
|
+
expected_value = %w{
|
104
|
+
rubygems_version specification_version name version date summary
|
105
|
+
require_paths authors email homepage rubyforge_project description
|
106
|
+
autorequire default_executable bindir has_rdoc required_ruby_version
|
107
|
+
platform files test_files rdoc_options extra_rdoc_files
|
108
|
+
executables extensions requirements dependencies
|
109
|
+
}.sort
|
110
|
+
actual_value = Gem::Specification.attribute_names.map { |a| a.to_s }.sort
|
111
|
+
assert_equal expected_value, actual_value
|
112
|
+
end
|
113
|
+
|
114
|
+
# TODO: test all the methods in the "convenience class methods" section of specification.rb
|
115
|
+
|
116
|
+
def test_defaults
|
117
|
+
# @spec is pretty plain, so we'll test some of the default values.
|
118
|
+
assert_equal [], @spec.test_files
|
119
|
+
assert_equal [], @spec.rdoc_options
|
120
|
+
assert_equal [], @spec.extra_rdoc_files
|
121
|
+
assert_equal [], @spec.executables
|
122
|
+
assert_equal [], @spec.extensions
|
123
|
+
assert_equal [], @spec.requirements
|
124
|
+
assert_equal [], @spec.dependencies
|
125
|
+
assert_equal 'bin', @spec.bindir
|
126
|
+
assert_equal false, @spec.has_rdoc
|
127
|
+
assert_equal false, @spec.has_rdoc?
|
128
|
+
assert_equal '> 0.0.0', @spec.required_ruby_version.to_s
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_directly_setting_dependencies_doesnt_work
|
132
|
+
assert_raises(NoMethodError) do
|
133
|
+
@spec.dependencies = [1,2,3]
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_equality
|
138
|
+
same_spec = @spec.dup
|
139
|
+
assert_equal @spec, same_spec
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_to_yaml_and_back
|
143
|
+
yaml_str = @spec.to_yaml
|
144
|
+
same_spec = YAML.load(yaml_str)
|
145
|
+
assert_equal @spec, same_spec
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_to_ruby_and_back
|
149
|
+
ruby_code = @spec.to_ruby
|
150
|
+
same_spec = eval ruby_code
|
151
|
+
assert_equal @spec, same_spec
|
152
|
+
end
|
153
|
+
end # class TestSimpleSpecification
|
154
|
+
|
155
|
+
|
156
|
+
class TestComplexSpecification < Test::Unit::TestCase
|
157
|
+
|
158
|
+
def setup
|
159
|
+
@spec = Gem::Specification.new do |s|
|
160
|
+
s.name = "rfoo"
|
161
|
+
s.version = "0.1"
|
162
|
+
# Omit 'platform' and test for default.
|
163
|
+
# Omit 'date' and test for default.
|
164
|
+
s.summary = <<-EOF
|
165
|
+
Ruby/Foo is an example RubyGem used for
|
166
|
+
unit testing.
|
167
|
+
EOF
|
168
|
+
# Omit 'require_paths' and test for default.
|
169
|
+
s.author = "The RubyGems Team"
|
170
|
+
s.description = s.summary
|
171
|
+
s.executable = 'foo1' # We'll test default_executable.
|
172
|
+
s.has_rdoc = 'true' # We'll test has_rdoc?
|
173
|
+
s.test_file = 'test/suite.rb' # We'll test has_unit_tests?
|
174
|
+
s.extensions << 'ext/rfoo/extconf.rb'
|
175
|
+
s.requirements << 'A working computer'
|
176
|
+
s.add_dependency('rake', '> 0.4')
|
177
|
+
s.add_dependency('jabber4r')
|
178
|
+
s.add_dependency('pqa', '> 0.4', '<= 0.6')
|
179
|
+
end
|
180
|
+
@spec.mark_version
|
181
|
+
end
|
182
|
+
|
183
|
+
def test_basics
|
184
|
+
@spec.normalize
|
185
|
+
summary_value = "Ruby/Foo is an example RubyGem used for unit testing."
|
186
|
+
assert_equal 'rfoo', @spec.name
|
187
|
+
assert_equal '0.1', @spec.version.to_s
|
188
|
+
assert_equal Gem::Platform::RUBY, @spec.platform
|
189
|
+
assert_equal Date.today, @spec.date
|
190
|
+
assert_equal summary_value, @spec.summary
|
191
|
+
assert_equal summary_value, @spec.description
|
192
|
+
assert_equal "The RubyGems Team", @spec.author
|
193
|
+
assert_equal ['foo1'], @spec.executables
|
194
|
+
assert_equal 'foo1', @spec.default_executable
|
195
|
+
assert_equal true, @spec.has_rdoc?
|
196
|
+
assert_equal ['test/suite.rb'], @spec.test_files
|
197
|
+
assert_equal ['ext/rfoo/extconf.rb'], @spec.extensions
|
198
|
+
assert_equal ['A working computer'], @spec.requirements
|
199
|
+
end
|
200
|
+
|
201
|
+
def test_dependencies
|
202
|
+
deps = @spec.dependencies.map { |d| d.to_s }
|
203
|
+
assert_equal 3, deps.size
|
204
|
+
assert deps.include?('rake (> 0.4)')
|
205
|
+
assert deps.include?('jabber4r (> 0.0.0)')
|
206
|
+
assert deps.include?('pqa (> 0.4, <= 0.6)')
|
207
|
+
end
|
208
|
+
|
209
|
+
def test_equality
|
210
|
+
same_spec = @spec.dup
|
211
|
+
assert_equal @spec, same_spec
|
212
|
+
end
|
213
|
+
|
214
|
+
def xtest_to_yaml_and_back
|
215
|
+
yaml_str = @spec.to_yaml
|
216
|
+
same_spec = YAML.load(yaml_str)
|
217
|
+
assert_equal @spec, same_spec
|
218
|
+
end
|
219
|
+
|
220
|
+
def test_to_ruby_and_back
|
221
|
+
ruby_code = @spec.to_ruby
|
222
|
+
same_spec = eval ruby_code
|
223
|
+
assert_equal @spec, same_spec
|
224
|
+
end
|
225
|
+
|
226
|
+
# Test different mechanisms for setting the gem's date: String, Time, and
|
227
|
+
# Date. It should always come out as a Date.
|
228
|
+
def test_date_settings
|
229
|
+
@spec.date = '2003-09-17'
|
230
|
+
assert_equal Date.new(2003, 9, 17), @spec.date
|
231
|
+
@spec.date = Time.local(2003, 9, 17)
|
232
|
+
assert_equal Date.new(2003, 9, 17), @spec.date
|
233
|
+
@spec.date = Date.new(2003, 9, 17)
|
234
|
+
assert_equal Date.new(2003, 9, 17), @spec.date
|
235
|
+
end
|
236
|
+
end # class TestComplexSpecification
|
237
|
+
|
238
|
+
|
239
|
+
class TestLegacyRubySpecification < Test::Unit::TestCase
|
240
|
+
def setup
|
241
|
+
@ruby_spec = File.read(LEGACY_GEM_SPEC_FILE)
|
242
|
+
end
|
243
|
+
|
244
|
+
def test_eval
|
245
|
+
s = gemspec = eval(@ruby_spec)
|
246
|
+
assert_equal 'keyedlist', s.name
|
247
|
+
assert_equal '0.4.0', s.version.to_s
|
248
|
+
assert_equal true, s.has_rdoc?
|
249
|
+
assert_equal Date.today, s.date
|
250
|
+
assert s.required_ruby_version.satisfied_by?(Gem::Version.new('0.0.1'))
|
251
|
+
assert_equal false, s.has_unit_tests?
|
252
|
+
end
|
253
|
+
|
254
|
+
def test_to_ruby_and_back
|
255
|
+
gemspec1 = eval(@ruby_spec)
|
256
|
+
ruby_code = gemspec1.to_ruby
|
257
|
+
gemspec2 = eval(ruby_code)
|
258
|
+
assert_equal gemspec1, gemspec2
|
259
|
+
end
|
260
|
+
end # class TestLegacyRubySpecification
|
261
|
+
|
262
|
+
|
263
|
+
class TestLegacyYamlSpecification < Test::Unit::TestCase
|
264
|
+
def setup
|
265
|
+
@yaml_spec = File.read(LEGACY_GEM_YAML_FILE)
|
266
|
+
end
|
267
|
+
|
268
|
+
def test_load
|
269
|
+
s = gemspec = YAML.load(@yaml_spec)
|
270
|
+
assert_equal 'keyedlist', s.name
|
271
|
+
assert_equal '0.4.0', s.version.to_s
|
272
|
+
assert_equal true, s.has_rdoc?
|
273
|
+
#assert_equal Date.today, s.date
|
274
|
+
#assert s.required_ruby_version.satisfied_by?(Gem::Version.new('0.0.1'))
|
275
|
+
assert_equal false, s.has_unit_tests?
|
276
|
+
end
|
277
|
+
|
278
|
+
end # class TestLegacyYamlSpecification
|
279
|
+
|
280
|
+
class TestSpecificationClassMethods < Test::Unit::TestCase
|
281
|
+
def test_load
|
282
|
+
gs = Gem::Specification.load("test/data/one/one.gemspec")
|
283
|
+
assert_equal "one", gs.name
|
284
|
+
assert_equal "one-0.0.1", gs.full_name
|
285
|
+
end
|
286
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rubygems'
|
3
|
+
Gem::manage_gems
|
4
|
+
|
5
|
+
class TestValidator < Test::Unit::TestCase
|
6
|
+
def test_missing_gem_throws_error
|
7
|
+
assert_raises(Gem::VerificationError) {
|
8
|
+
Gem::Validator.new.verify_gem_file("")
|
9
|
+
}
|
10
|
+
assert_raises(Gem::VerificationError) {
|
11
|
+
Gem::Validator.new.verify_gem_file("/this/path/will/almost/definitely/not/exist.gem")
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_invalid_gem_throws_error
|
16
|
+
assert_raises(Gem::VerificationError) {
|
17
|
+
Gem::Validator.new.verify_gem("")
|
18
|
+
}
|
19
|
+
assert_raises(Gem::VerificationError) {
|
20
|
+
Gem::Validator.new.verify_gem(@simple_gem.upcase)
|
21
|
+
}
|
22
|
+
|
23
|
+
# TODO: Since the new format does not support MD5 checking, the
|
24
|
+
# following code will not throw an exception. So we disable this
|
25
|
+
# assertion for now.
|
26
|
+
# assert_raises(Gem::VerificationError) {
|
27
|
+
# Gem::Validator.new.verify_gem(@simple_gem.reverse)
|
28
|
+
# }
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_simple_valid_gem_verifies
|
32
|
+
assert_nothing_raised {
|
33
|
+
Gem::Validator.new.verify_gem(@simple_gem)
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_truncated_simple_valid_gem_fails
|
38
|
+
assert_raises(Gem::VerificationError) {
|
39
|
+
Gem::Validator.new.verify_gem(@simple_gem.chop)
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_invalid_checksum_fails_appropriately
|
44
|
+
assert_raises(Gem::VerificationError) {
|
45
|
+
Gem::Validator.new.verify_gem(@simple_gem.sub(/MD5SUM.*=.*/, 'MD5SUM = "foo"'))
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
def setup
|
50
|
+
require File.dirname(__FILE__) + "/simple_gem.rb"
|
51
|
+
@simple_gem = SIMPLE_GEM
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,204 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rubygems'
|
3
|
+
Gem::manage_gems
|
4
|
+
|
5
|
+
module VersionAsserts
|
6
|
+
def assert_adequate(version, requirement)
|
7
|
+
ver = Gem::Version.new(version)
|
8
|
+
req = Gem::Version::Requirement.new(requirement)
|
9
|
+
assert req.satisfied_by?(ver),
|
10
|
+
"Version #{version} should be adequate for Requirement #{requirement}"
|
11
|
+
end
|
12
|
+
|
13
|
+
def assert_inadequate(version, requirement)
|
14
|
+
ver = Gem::Version.new(version)
|
15
|
+
req = Gem::Version::Requirement.new(requirement)
|
16
|
+
assert ! req.satisfied_by?(ver),
|
17
|
+
"Version #{version} should not be adequate for Requirement #{requirement}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
class Versions < Test::Unit::TestCase
|
23
|
+
include VersionAsserts
|
24
|
+
|
25
|
+
def test_ok
|
26
|
+
assert_adequate( "0.2.33", "= 0.2.33")
|
27
|
+
assert_adequate( "0.2.34", "> 0.2.33")
|
28
|
+
assert_adequate( "1.0", "= 1.0")
|
29
|
+
assert_adequate( "1.0", "1.0")
|
30
|
+
assert_adequate( "1.8.2", "> 1.8.0")
|
31
|
+
assert_adequate( "1.112", "> 1.111")
|
32
|
+
assert_adequate( "0.2", "> 0.0.0")
|
33
|
+
assert_adequate( "0.0.0.0.0.2", "> 0.0.0")
|
34
|
+
assert_adequate( "0.0.1.0", "> 0.0.0.1")
|
35
|
+
assert_adequate( "10.3.2", "> 9.3.2")
|
36
|
+
assert_adequate( "1.0.0.0", "= 1.0")
|
37
|
+
assert_adequate( "10.3.2", "!= 9.3.4")
|
38
|
+
assert_adequate( "10.3.2", "> 9.3.2")
|
39
|
+
assert_adequate( "10.3.2", "> 9.3.2")
|
40
|
+
assert_adequate( " 9.3.2", ">= 9.3.2")
|
41
|
+
assert_adequate( "9.3.2 ", ">= 9.3.2")
|
42
|
+
assert_adequate( "", "= 0")
|
43
|
+
assert_adequate( "", "< 0.1")
|
44
|
+
assert_adequate( " ", "< 0.1 ")
|
45
|
+
assert_adequate( "", " < 0.1")
|
46
|
+
assert_adequate( "0", "=")
|
47
|
+
assert_adequate( "0", ">=")
|
48
|
+
assert_adequate( "0", "<=")
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_bad
|
52
|
+
assert_inadequate( "", "> 0.1")
|
53
|
+
assert_inadequate( "1.2.3", "!= 1.2.3")
|
54
|
+
assert_inadequate( "1.2.003.0.0", "!= 1.02.3")
|
55
|
+
assert_inadequate( "4.5.6", "< 1.2.3")
|
56
|
+
assert_inadequate( "1.0", "> 1.1")
|
57
|
+
assert_inadequate( "0", ">")
|
58
|
+
assert_inadequate( "0", "<")
|
59
|
+
assert_inadequate( "", "= 0.1")
|
60
|
+
assert_inadequate( "1.1.1", "> 1.1.1")
|
61
|
+
assert_inadequate( "1.2", "= 1.1")
|
62
|
+
assert_inadequate( "1.40", "= 1.1")
|
63
|
+
assert_inadequate( "1.3", "= 1.40")
|
64
|
+
assert_inadequate( "9.3.3", "<= 9.3.2")
|
65
|
+
assert_inadequate( "9.3.1", ">= 9.3.2")
|
66
|
+
assert_inadequate( "9.3.03", "<= 9.3.2")
|
67
|
+
assert_inadequate( "1.0.0.1", "= 1.0")
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_illformed_version
|
71
|
+
[ "blah", "1.3.a", "1.3.5." ].each do |wn|
|
72
|
+
assert_raises(ArgumentError) { Gem::Version.new(wn) }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_illformed_requirements
|
77
|
+
[ ">>> 1.3.5", "> blah" ].each do |rq|
|
78
|
+
assert_raises(ArgumentError, "req [#{rq}] should fail") {
|
79
|
+
Gem::Version::Requirement.new(rq)
|
80
|
+
}
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
class TestVersion < Test::Unit::TestCase
|
86
|
+
def test_to_s
|
87
|
+
v = Gem::Version.new("5.2.4")
|
88
|
+
assert_equal "5.2.4", v.to_s
|
89
|
+
end
|
90
|
+
def test_bump
|
91
|
+
v = Gem::Version.new("5.2.4")
|
92
|
+
assert_equal "5.3", v.bump.to_s
|
93
|
+
end
|
94
|
+
def test_bump_one_level
|
95
|
+
v = Gem::Version.new("5")
|
96
|
+
assert_equal "6", v.bump.to_s
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
class TestExtendedVersionComparisons < Test::Unit::TestCase
|
102
|
+
include VersionAsserts
|
103
|
+
|
104
|
+
def test_multiple
|
105
|
+
req = [">= 1.4", "<= 1.6", "!= 1.5"]
|
106
|
+
assert_inadequate("1.3", req)
|
107
|
+
assert_adequate( "1.4", req)
|
108
|
+
assert_inadequate("1.5", req)
|
109
|
+
assert_adequate( "1.6", req)
|
110
|
+
assert_inadequate("1.7", req)
|
111
|
+
assert_inadequate("2.0", req)
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_boxed
|
115
|
+
assert_inadequate("1.3", "~> 1.4")
|
116
|
+
assert_adequate( "1.4", "~> 1.4")
|
117
|
+
assert_adequate( "1.5", "~> 1.4")
|
118
|
+
assert_inadequate("2.0", "~> 1.4")
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
class TestDependencies < Test::Unit::TestCase
|
124
|
+
def test_create
|
125
|
+
dep = Gem::Dependency.new("pkg", ["> 1.0"])
|
126
|
+
assert_equal "pkg", dep.name
|
127
|
+
assert_equal Gem::Version::Requirement.new(["> 1.0"]), dep.version_requirements
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_create_single
|
131
|
+
dep = Gem::Dependency.new("pkg", "> 1.0")
|
132
|
+
assert_equal Gem::Version::Requirement.new(["> 1.0"]), dep.version_requirements
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_create_double
|
136
|
+
dep = Gem::Dependency.new("pkg", ["> 1.0", "< 2.0"])
|
137
|
+
assert_equal Gem::Version::Requirement.new(["> 1.0", "< 2.0"]), dep.version_requirements
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_create_wacked
|
141
|
+
require 'yaml'
|
142
|
+
dep = Gem::Dependency.new("pkg", [])
|
143
|
+
old_req = Gem::Version::Requirement.new(["> 1.0"])
|
144
|
+
old_req.instance_eval do
|
145
|
+
@version = ">= 1.0"
|
146
|
+
@op = ">="
|
147
|
+
@nums = [1,0]
|
148
|
+
@requirements = nil
|
149
|
+
end
|
150
|
+
dep.instance_eval do
|
151
|
+
@version_requirement = old_req
|
152
|
+
@version_requirements = nil
|
153
|
+
end
|
154
|
+
assert_equal Gem::Version::Requirement.new([">= 1.0"]), dep.version_requirements
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_create_from_string
|
158
|
+
req = Gem::Version::Requirement.create(">1")
|
159
|
+
assert ! req.satisfied_by?(Gem::Version.new("1.0"))
|
160
|
+
assert req.satisfied_by?(Gem::Version.new("1.1"))
|
161
|
+
end
|
162
|
+
|
163
|
+
def test_create_from_string_equal
|
164
|
+
req = Gem::Version::Requirement.create("1.3")
|
165
|
+
assert ! req.satisfied_by?(Gem::Version.new("1.0"))
|
166
|
+
assert req.satisfied_by?(Gem::Version.new("1.3"))
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_create_from_requirement
|
170
|
+
req = Gem::Version::Requirement.create(Gem::Version::Requirement.new("1.3"))
|
171
|
+
assert ! req.satisfied_by?(Gem::Version.new("1.0"))
|
172
|
+
assert req.satisfied_by?(Gem::Version.new("1.3"))
|
173
|
+
end
|
174
|
+
|
175
|
+
def test_compare_to_nil
|
176
|
+
assert(Gem::Version.new("0.0") > nil)
|
177
|
+
req = Gem::Version::Requirement.create("1.3")
|
178
|
+
assert ! req.satisfied_by?(nil)
|
179
|
+
end
|
180
|
+
|
181
|
+
def test_create_from_list
|
182
|
+
req = Gem::Version::Requirement.create([">1", "<2"])
|
183
|
+
assert ! req.satisfied_by?(Gem::Version.new("1.0"))
|
184
|
+
assert ! req.satisfied_by?(Gem::Version.new("2.0"))
|
185
|
+
assert req.satisfied_by?(Gem::Version.new("1.3"))
|
186
|
+
end
|
187
|
+
|
188
|
+
# We may get some old gems that have requirements in old formats.
|
189
|
+
# We need to be able to handle those old requirements by normalizing
|
190
|
+
# them to the latest format.
|
191
|
+
def test_normalization
|
192
|
+
require 'yaml'
|
193
|
+
yamldep = %{--- !ruby/object:Gem::Version::Requirement
|
194
|
+
nums:
|
195
|
+
- 1
|
196
|
+
- 0
|
197
|
+
- 4
|
198
|
+
op: ">="
|
199
|
+
version: ">= 1.0.4"}
|
200
|
+
dep = YAML.load(yamldep)
|
201
|
+
dep.normalize
|
202
|
+
assert_equal ">= 1.0.4", dep.to_s
|
203
|
+
end
|
204
|
+
end
|