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.

Files changed (96) hide show
  1. data/ChangeLog +2335 -0
  2. data/README +54 -0
  3. data/Rakefile +293 -0
  4. data/Releases +98 -0
  5. data/TODO +7 -0
  6. data/bin/gem +11 -0
  7. data/bin/gem_server +111 -0
  8. data/bin/generate_yaml_index.rb +58 -0
  9. data/bin/update_rubygems +18 -0
  10. data/doc/doc.css +73 -0
  11. data/doc/makedoc.rb +4 -0
  12. data/examples/application/an-app.gemspec +26 -0
  13. data/examples/application/bin/myapp +3 -0
  14. data/examples/application/lib/somefunctionality.rb +3 -0
  15. data/gemspecs/README +4 -0
  16. data/gemspecs/cgikit-1.1.0.gemspec +18 -0
  17. data/gemspecs/jabber4r.gemspec +26 -0
  18. data/gemspecs/linguistics.gemspec +22 -0
  19. data/gemspecs/ook.gemspec +21 -0
  20. data/gemspecs/progressbar.gemspec +22 -0
  21. data/gemspecs/redcloth.gemspec +22 -0
  22. data/gemspecs/rublog.gemspec +23 -0
  23. data/gemspecs/ruby-doom.gemspec +21 -0
  24. data/gemspecs/rubyjdwp.gemspec +21 -0
  25. data/gemspecs/statistics.gemspec +21 -0
  26. data/lib/rubygems.rb +353 -0
  27. data/lib/rubygems/builder.rb +54 -0
  28. data/lib/rubygems/cmd_manager.rb +127 -0
  29. data/lib/rubygems/command.rb +191 -0
  30. data/lib/rubygems/config_file.rb +57 -0
  31. data/lib/rubygems/doc_manager.rb +94 -0
  32. data/lib/rubygems/format.rb +65 -0
  33. data/lib/rubygems/gem_commands.rb +925 -0
  34. data/lib/rubygems/gem_runner.rb +23 -0
  35. data/lib/rubygems/installer.rb +621 -0
  36. data/lib/rubygems/loadpath_manager.rb +108 -0
  37. data/lib/rubygems/old_format.rb +150 -0
  38. data/lib/rubygems/open-uri.rb +604 -0
  39. data/lib/rubygems/package.rb +740 -0
  40. data/lib/rubygems/remote_installer.rb +499 -0
  41. data/lib/rubygems/rubygems_version.rb +6 -0
  42. data/lib/rubygems/source_index.rb +130 -0
  43. data/lib/rubygems/specification.rb +613 -0
  44. data/lib/rubygems/user_interaction.rb +176 -0
  45. data/lib/rubygems/validator.rb +148 -0
  46. data/lib/rubygems/version.rb +279 -0
  47. data/lib/ubygems.rb +4 -0
  48. data/pkgs/sources/lib/sources.rb +6 -0
  49. data/pkgs/sources/sources.gemspec +14 -0
  50. data/post-install.rb +75 -0
  51. data/redist/session.gem +433 -0
  52. data/scripts/buildtests.rb +25 -0
  53. data/scripts/gemdoc.rb +62 -0
  54. data/scripts/runtest.rb +17 -0
  55. data/scripts/specdoc.rb +164 -0
  56. data/setup.rb +1360 -0
  57. data/test/bogussources.rb +5 -0
  58. data/test/data/legacy/keyedlist-0.4.0.ruby +11 -0
  59. data/test/data/legacy/keyedlist-0.4.0.yaml +16 -0
  60. data/test/data/lib/code.rb +1 -0
  61. data/test/data/one/README.one +1 -0
  62. data/test/data/one/lib/one.rb +3 -0
  63. data/test/data/one/one.gemspec +17 -0
  64. data/test/data/one/one.yaml +40 -0
  65. data/test/functional.rb +145 -0
  66. data/test/gemenvironment.rb +45 -0
  67. data/test/gemutilities.rb +18 -0
  68. data/test/insure_session.rb +46 -0
  69. data/test/mock/gems/gems/sources-0.0.1/lib/sources.rb +5 -0
  70. data/test/mock/gems/specifications/sources-0.0.1.gemspec +8 -0
  71. data/test/mockgemui.rb +45 -0
  72. data/test/onegem.rb +23 -0
  73. data/test/simple_gem.rb +66 -0
  74. data/test/test_builder.rb +13 -0
  75. data/test/test_cached_fetcher.rb +60 -0
  76. data/test/test_check_command.rb +28 -0
  77. data/test/test_command.rb +130 -0
  78. data/test/test_configfile.rb +36 -0
  79. data/test/test_format.rb +70 -0
  80. data/test/test_gemloadpaths.rb +45 -0
  81. data/test/test_gempaths.rb +115 -0
  82. data/test/test_loadmanager.rb +40 -0
  83. data/test/test_local_cache.rb +157 -0
  84. data/test/test_package.rb +600 -0
  85. data/test/test_parse_commands.rb +179 -0
  86. data/test/test_process_commands.rb +21 -0
  87. data/test/test_remote_fetcher.rb +162 -0
  88. data/test/test_remote_installer.rb +154 -0
  89. data/test/test_source_index.rb +58 -0
  90. data/test/test_specification.rb +286 -0
  91. data/test/test_validator.rb +53 -0
  92. data/test/test_version_comparison.rb +204 -0
  93. data/test/testgem.rc +6 -0
  94. data/test/user_capture.rb +1 -0
  95. data/test/yaml_data.rb +59 -0
  96. 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