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.

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