rubygems-update 0.8.3
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.
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
|