rubygems-update 2.2.5 → 2.3.0
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.autotest +4 -1
- data/CONTRIBUTING +20 -0
- data/History.txt +117 -14
- data/Manifest.txt +11 -2
- data/README.rdoc +1 -1
- data/Rakefile +0 -3
- data/lib/rubygems.rb +31 -11
- data/lib/rubygems/available_set.rb +1 -1
- data/lib/rubygems/basic_specification.rb +20 -10
- data/lib/rubygems/command.rb +4 -1
- data/lib/rubygems/commands/cert_command.rb +11 -13
- data/lib/rubygems/commands/cleanup_command.rb +2 -2
- data/lib/rubygems/commands/dependency_command.rb +2 -2
- data/lib/rubygems/commands/environment_command.rb +5 -2
- data/lib/rubygems/commands/help_command.rb +199 -20
- data/lib/rubygems/commands/install_command.rb +40 -10
- data/lib/rubygems/commands/list_command.rb +2 -2
- data/lib/rubygems/commands/open_command.rb +81 -0
- data/lib/rubygems/commands/search_command.rb +5 -5
- data/lib/rubygems/commands/setup_command.rb +1 -1
- data/lib/rubygems/commands/update_command.rb +8 -5
- data/lib/rubygems/commands/yank_command.rb +8 -13
- data/lib/rubygems/config_file.rb +13 -2
- data/lib/rubygems/dependency.rb +29 -16
- data/lib/rubygems/dependency_installer.rb +44 -10
- data/lib/rubygems/doctor.rb +1 -1
- data/lib/rubygems/errors.rb +30 -0
- data/lib/rubygems/exceptions.rb +20 -0
- data/lib/rubygems/ext/builder.rb +1 -1
- data/lib/rubygems/gemcutter_utilities.rb +1 -1
- data/lib/rubygems/installer.rb +4 -4
- data/lib/rubygems/name_tuple.rb +3 -1
- data/lib/rubygems/package.rb +27 -14
- data/lib/rubygems/package/file_source.rb +33 -0
- data/lib/rubygems/package/io_source.rb +45 -0
- data/lib/rubygems/package/old.rb +5 -5
- data/lib/rubygems/package/source.rb +3 -0
- data/lib/rubygems/platform.rb +2 -1
- data/lib/rubygems/rdoc.rb +1 -1
- data/lib/rubygems/remote_fetcher.rb +59 -18
- data/lib/rubygems/request.rb +71 -101
- data/lib/rubygems/request/connection_pools.rb +77 -0
- data/lib/rubygems/request/http_pool.rb +38 -0
- data/lib/rubygems/request/https_pool.rb +10 -0
- data/lib/rubygems/request_set.rb +65 -20
- data/lib/rubygems/request_set/gem_dependency_api.rb +234 -14
- data/lib/rubygems/request_set/lockfile.rb +65 -22
- data/lib/rubygems/requirement.rb +3 -0
- data/lib/rubygems/resolver.rb +33 -16
- data/lib/rubygems/resolver/activation_request.rb +7 -0
- data/lib/rubygems/resolver/api_set.rb +12 -2
- data/lib/rubygems/resolver/api_specification.rb +6 -0
- data/lib/rubygems/resolver/composed_set.rb +4 -0
- data/lib/rubygems/resolver/dependency_request.rb +20 -1
- data/lib/rubygems/resolver/git_set.rb +1 -1
- data/lib/rubygems/resolver/git_specification.rb +1 -1
- data/lib/rubygems/resolver/index_set.rb +3 -1
- data/lib/rubygems/resolver/installed_specification.rb +19 -1
- data/lib/rubygems/resolver/installer_set.rb +84 -4
- data/lib/rubygems/resolver/local_specification.rb +25 -0
- data/lib/rubygems/resolver/lock_set.rb +13 -9
- data/lib/rubygems/resolver/lock_specification.rb +1 -1
- data/lib/rubygems/resolver/set.rb +6 -0
- data/lib/rubygems/resolver/spec_specification.rb +0 -2
- data/lib/rubygems/resolver/specification.rb +23 -2
- data/lib/rubygems/resolver/vendor_set.rb +1 -1
- data/lib/rubygems/resolver/vendor_specification.rb +1 -1
- data/lib/rubygems/security/policy.rb +1 -0
- data/lib/rubygems/server.rb +36 -1
- data/lib/rubygems/source.rb +6 -2
- data/lib/rubygems/source/git.rb +1 -1
- data/lib/rubygems/source/installed.rb +4 -0
- data/lib/rubygems/source/specific_file.rb +6 -1
- data/lib/rubygems/spec_fetcher.rb +6 -13
- data/lib/rubygems/specification.rb +91 -63
- data/lib/rubygems/stub_specification.rb +9 -0
- data/lib/rubygems/test_case.rb +4 -2
- data/lib/rubygems/text.rb +15 -5
- data/lib/rubygems/uninstaller.rb +4 -1
- data/lib/rubygems/user_interaction.rb +8 -0
- data/lib/rubygems/version.rb +5 -1
- data/test/rubygems/test_gem.rb +88 -2
- data/test/rubygems/test_gem_available_set.rb +11 -8
- data/test/rubygems/test_gem_command.rb +55 -0
- data/test/rubygems/test_gem_commands_cert_command.rb +1 -0
- data/test/rubygems/test_gem_commands_environment_command.rb +1 -0
- data/test/rubygems/test_gem_commands_help_command.rb +7 -0
- data/test/rubygems/test_gem_commands_install_command.rb +71 -4
- data/test/rubygems/test_gem_commands_open_command.rb +46 -0
- data/test/rubygems/test_gem_commands_setup_command.rb +9 -0
- data/test/rubygems/test_gem_commands_update_command.rb +48 -0
- data/test/rubygems/test_gem_commands_yank_command.rb +2 -2
- data/test/rubygems/test_gem_config_file.rb +19 -7
- data/test/rubygems/test_gem_dependency.rb +86 -2
- data/test/rubygems/test_gem_dependency_installer.rb +36 -164
- data/test/rubygems/test_gem_gemcutter_utilities.rb +9 -0
- data/test/rubygems/test_gem_installer.rb +6 -1
- data/test/rubygems/test_gem_name_tuple.rb +7 -0
- data/test/rubygems/test_gem_package.rb +17 -0
- data/test/rubygems/test_gem_remote_fetcher.rb +65 -46
- data/test/rubygems/test_gem_request.rb +75 -61
- data/test/rubygems/test_gem_request_connection_pools.rb +83 -0
- data/test/rubygems/test_gem_request_set.rb +156 -1
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +72 -27
- data/test/rubygems/test_gem_request_set_lockfile.rb +335 -0
- data/test/rubygems/test_gem_requirement.rb +5 -0
- data/test/rubygems/test_gem_resolver.rb +91 -2
- data/test/rubygems/test_gem_resolver_activation_request.rb +10 -0
- data/test/rubygems/test_gem_resolver_api_set.rb +2 -2
- data/test/rubygems/test_gem_resolver_api_specification.rb +40 -0
- data/test/rubygems/test_gem_resolver_composed_set.rb +14 -0
- data/test/rubygems/test_gem_resolver_dependency_request.rb +55 -0
- data/test/rubygems/test_gem_resolver_git_set.rb +26 -0
- data/test/rubygems/test_gem_resolver_index_set.rb +28 -2
- data/test/rubygems/test_gem_resolver_installer_set.rb +143 -0
- data/test/rubygems/test_gem_resolver_lock_set.rb +12 -6
- data/test/rubygems/test_gem_resolver_lock_specification.rb +1 -1
- data/test/rubygems/test_gem_resolver_specification.rb +32 -0
- data/test/rubygems/test_gem_resolver_vendor_set.rb +14 -0
- data/test/rubygems/test_gem_security_policy.rb +2 -2
- data/test/rubygems/test_gem_server.rb +69 -4
- data/test/rubygems/test_gem_source.rb +4 -1
- data/test/rubygems/test_gem_source_git.rb +15 -0
- data/test/rubygems/test_gem_source_specific_file.rb +4 -0
- data/test/rubygems/test_gem_specification.rb +82 -27
- data/test/rubygems/test_gem_stub_specification.rb +61 -23
- data/test/rubygems/test_gem_uninstaller.rb +23 -0
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +32 -0
- metadata +187 -33
- metadata.gz.sig +0 -0
- data/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
- data/lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem +0 -32
@@ -3,6 +3,7 @@ require 'rubygems/test_case'
|
|
3
3
|
class TestGemResolverSpecification < Gem::TestCase
|
4
4
|
|
5
5
|
class TestSpec < Gem::Resolver::Specification
|
6
|
+
attr_writer :source
|
6
7
|
attr_reader :spec
|
7
8
|
|
8
9
|
def initialize spec
|
@@ -12,6 +13,26 @@ class TestGemResolverSpecification < Gem::TestCase
|
|
12
13
|
end
|
13
14
|
end
|
14
15
|
|
16
|
+
def test_install
|
17
|
+
gemhome = "#{@gemhome}2"
|
18
|
+
spec_fetcher do |fetcher|
|
19
|
+
fetcher.gem 'a', 1
|
20
|
+
end
|
21
|
+
|
22
|
+
a = util_spec 'a', 1
|
23
|
+
|
24
|
+
a_spec = TestSpec.new a
|
25
|
+
a_spec.source = Gem::Source.new @gem_repo
|
26
|
+
|
27
|
+
a_spec.install :install_dir => gemhome
|
28
|
+
|
29
|
+
assert_path_exists File.join gemhome, 'gems', a.full_name
|
30
|
+
|
31
|
+
expected = File.join gemhome, 'specifications', a.spec_name
|
32
|
+
|
33
|
+
assert_equal expected, a_spec.spec.loaded_from
|
34
|
+
end
|
35
|
+
|
15
36
|
def test_installable_platform_eh
|
16
37
|
a = util_spec 'a', 1
|
17
38
|
|
@@ -28,5 +49,16 @@ class TestGemResolverSpecification < Gem::TestCase
|
|
28
49
|
refute b_spec.installable_platform?
|
29
50
|
end
|
30
51
|
|
52
|
+
def test_source
|
53
|
+
a = util_spec 'a', 1
|
54
|
+
|
55
|
+
source = Gem::Source.new @gem_repo
|
56
|
+
|
57
|
+
a_spec = TestSpec.new a
|
58
|
+
a_spec.source = source
|
59
|
+
|
60
|
+
assert_equal source, a_spec.source
|
61
|
+
end
|
62
|
+
|
31
63
|
end
|
32
64
|
|
@@ -55,6 +55,20 @@ class TestGemResolverVendorSet < Gem::TestCase
|
|
55
55
|
assert_equal expected, found
|
56
56
|
end
|
57
57
|
|
58
|
+
def test_find_all_prerelease
|
59
|
+
name, _, directory = vendor_gem 'a', '1.a'
|
60
|
+
|
61
|
+
@set.add_vendor_gem name, directory
|
62
|
+
|
63
|
+
req = Gem::Resolver::DependencyRequest.new dep('a'), nil
|
64
|
+
|
65
|
+
assert_empty @set.find_all req
|
66
|
+
|
67
|
+
req = Gem::Resolver::DependencyRequest.new dep('a', '>= 0.a'), nil
|
68
|
+
|
69
|
+
refute_empty @set.find_all req
|
70
|
+
end
|
71
|
+
|
58
72
|
def test_load_spec
|
59
73
|
error = Object.const_defined?(:KeyError) ? KeyError : IndexError
|
60
74
|
|
@@ -347,7 +347,7 @@ class TestGemSecurityPolicy < Gem::TestCase
|
|
347
347
|
assert_match "WARNING: some_gem is not signed\n", @ui.error
|
348
348
|
|
349
349
|
assert_raises Gem::Security::Exception do
|
350
|
-
@
|
350
|
+
@high.verify [PUBLIC_CERT], nil, digests, {}
|
351
351
|
end
|
352
352
|
end
|
353
353
|
|
@@ -513,7 +513,7 @@ class TestGemSecurityPolicy < Gem::TestCase
|
|
513
513
|
digests['SHA1']['data.tar.gz'] = OpenSSL::Digest.new 'SHA1', 'hello'
|
514
514
|
|
515
515
|
assert_raises Gem::Security::Exception do
|
516
|
-
@
|
516
|
+
@high.verify_signatures @spec, digests, {}
|
517
517
|
end
|
518
518
|
end
|
519
519
|
|
@@ -10,8 +10,9 @@ class TestGemServer < Gem::TestCase
|
|
10
10
|
def setup
|
11
11
|
super
|
12
12
|
|
13
|
-
@a1
|
14
|
-
@a2
|
13
|
+
@a1 = quick_gem 'a', '1'
|
14
|
+
@a2 = quick_gem 'a', '2'
|
15
|
+
@a3_p = quick_gem 'a', '3.a'
|
15
16
|
|
16
17
|
@server = Gem::Server.new Gem.dir, process_based_port, false
|
17
18
|
@req = WEBrick::HTTPRequest.new :Logger => nil
|
@@ -144,6 +145,36 @@ class TestGemServer < Gem::TestCase
|
|
144
145
|
assert_equal 2, @server.server.listeners.length
|
145
146
|
end
|
146
147
|
|
148
|
+
def test_prerelease_specs
|
149
|
+
data = StringIO.new "GET /prerelease_specs.#{Gem.marshal_version} HTTP/1.0\r\n\r\n"
|
150
|
+
@req.parse data
|
151
|
+
|
152
|
+
Gem::Deprecate.skip_during do
|
153
|
+
@server.prerelease_specs @req, @res
|
154
|
+
end
|
155
|
+
|
156
|
+
assert_equal 200, @res.status, @res.body
|
157
|
+
assert_match %r| \d\d:\d\d:\d\d |, @res['date']
|
158
|
+
assert_equal 'application/octet-stream', @res['content-type']
|
159
|
+
assert_equal [['a', v('3.a'), Gem::Platform::RUBY]],
|
160
|
+
Marshal.load(@res.body)
|
161
|
+
end
|
162
|
+
|
163
|
+
def test_prerelease_specs_gz
|
164
|
+
data = StringIO.new "GET /prerelease_specs.#{Gem.marshal_version}.gz HTTP/1.0\r\n\r\n"
|
165
|
+
@req.parse data
|
166
|
+
|
167
|
+
Gem::Deprecate.skip_during do
|
168
|
+
@server.prerelease_specs @req, @res
|
169
|
+
end
|
170
|
+
|
171
|
+
assert_equal 200, @res.status, @res.body
|
172
|
+
assert_match %r| \d\d:\d\d:\d\d |, @res['date']
|
173
|
+
assert_equal 'application/x-gzip', @res['content-type']
|
174
|
+
assert_equal [['a', v('3.a'), Gem::Platform::RUBY]],
|
175
|
+
Marshal.load(Gem.gunzip(@res.body))
|
176
|
+
end
|
177
|
+
|
147
178
|
def test_quick_gemdirs
|
148
179
|
data = StringIO.new "GET /quick/Marshal.4.8/z-9.gemspec.rz HTTP/1.0\r\n\r\n"
|
149
180
|
dir = "#{@gemhome}2"
|
@@ -223,6 +254,38 @@ class TestGemServer < Gem::TestCase
|
|
223
254
|
assert_equal Gem::Platform.local, spec.platform
|
224
255
|
end
|
225
256
|
|
257
|
+
def test_quick_marshal_a_3_a_gemspec_rz
|
258
|
+
data = StringIO.new "GET /quick/Marshal.#{Gem.marshal_version}/a-3.a.gemspec.rz HTTP/1.0\r\n\r\n"
|
259
|
+
@req.parse data
|
260
|
+
|
261
|
+
@server.quick @req, @res
|
262
|
+
|
263
|
+
assert_equal 200, @res.status, @res.body
|
264
|
+
assert @res['date']
|
265
|
+
assert_equal 'application/x-deflate', @res['content-type']
|
266
|
+
|
267
|
+
spec = Marshal.load Gem.inflate(@res.body)
|
268
|
+
assert_equal 'a', spec.name
|
269
|
+
assert_equal v('3.a'), spec.version
|
270
|
+
end
|
271
|
+
|
272
|
+
def test_quick_marshal_a_b_3_a_gemspec_rz
|
273
|
+
quick_gem 'a-b', '3.a'
|
274
|
+
|
275
|
+
data = StringIO.new "GET /quick/Marshal.#{Gem.marshal_version}/a-b-3.a.gemspec.rz HTTP/1.0\r\n\r\n"
|
276
|
+
@req.parse data
|
277
|
+
|
278
|
+
@server.quick @req, @res
|
279
|
+
|
280
|
+
assert_equal 200, @res.status, @res.body
|
281
|
+
assert @res['date']
|
282
|
+
assert_equal 'application/x-deflate', @res['content-type']
|
283
|
+
|
284
|
+
spec = Marshal.load Gem.inflate(@res.body)
|
285
|
+
assert_equal 'a-b', spec.name
|
286
|
+
assert_equal v('3.a'), spec.version
|
287
|
+
end
|
288
|
+
|
226
289
|
def test_rdoc
|
227
290
|
data = StringIO.new "GET /rdoc?q=a HTTP/1.0\r\n\r\n"
|
228
291
|
@req.parse data
|
@@ -279,7 +342,8 @@ class TestGemServer < Gem::TestCase
|
|
279
342
|
assert_equal 'application/octet-stream', @res['content-type']
|
280
343
|
|
281
344
|
assert_equal [['a', Gem::Version.new(1), Gem::Platform::RUBY],
|
282
|
-
['a', Gem::Version.new(2), Gem::Platform::RUBY]
|
345
|
+
['a', Gem::Version.new(2), Gem::Platform::RUBY],
|
346
|
+
['a', v('3.a'), Gem::Platform::RUBY]],
|
283
347
|
Marshal.load(@res.body)
|
284
348
|
end
|
285
349
|
|
@@ -318,7 +382,8 @@ class TestGemServer < Gem::TestCase
|
|
318
382
|
assert_equal 'application/x-gzip', @res['content-type']
|
319
383
|
|
320
384
|
assert_equal [['a', Gem::Version.new(1), Gem::Platform::RUBY],
|
321
|
-
['a', Gem::Version.new(2), Gem::Platform::RUBY]
|
385
|
+
['a', Gem::Version.new(2), Gem::Platform::RUBY],
|
386
|
+
['a', v('3.a'), Gem::Platform::RUBY]],
|
322
387
|
Marshal.load(Gem.gunzip(@res.body))
|
323
388
|
end
|
324
389
|
|
@@ -40,7 +40,10 @@ class TestGemSource < Gem::TestCase
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def test_dependency_resolver_set_bundler_api
|
43
|
-
|
43
|
+
response = Net::HTTPResponse.new '1.1', 200, 'OK'
|
44
|
+
response.uri = URI('http://example') if response.respond_to? :uri
|
45
|
+
|
46
|
+
@fetcher.data["#{@gem_repo}api/v1/dependencies"] = response
|
44
47
|
|
45
48
|
set = @source.dependency_resolver_set
|
46
49
|
|
@@ -27,6 +27,21 @@ class TestGemSourceGit < Gem::TestCase
|
|
27
27
|
assert_path_exists File.join @source.install_dir, 'a.gemspec'
|
28
28
|
end
|
29
29
|
|
30
|
+
def test_checkout_master
|
31
|
+
Dir.chdir @repository do
|
32
|
+
system @git, 'checkout', '-q', '-b', 'other'
|
33
|
+
system @git, 'mv', 'a.gemspec', 'b.gemspec'
|
34
|
+
system @git, 'commit', '-q', '-a', '-m', 'rename gemspec'
|
35
|
+
system @git, 'checkout', '-q', 'master'
|
36
|
+
end
|
37
|
+
|
38
|
+
@source = Gem::Source::Git.new @name, @repository, 'other', false
|
39
|
+
|
40
|
+
@source.checkout
|
41
|
+
|
42
|
+
assert_path_exists File.join @source.install_dir, 'b.gemspec'
|
43
|
+
end
|
44
|
+
|
30
45
|
def test_checkout_local
|
31
46
|
@source.remote = false
|
32
47
|
|
@@ -226,7 +226,7 @@ end
|
|
226
226
|
util_spec 'b', '2.0'
|
227
227
|
c, _ = util_spec 'c', '1.0', 'b' => '= 2.0'
|
228
228
|
|
229
|
-
e = assert_raises Gem::
|
229
|
+
e = assert_raises Gem::ConflictError do
|
230
230
|
assert_activate nil, a, c, "b"
|
231
231
|
end
|
232
232
|
|
@@ -1232,14 +1232,11 @@ dependencies: []
|
|
1232
1232
|
FileUtils.chmod 0555, @ext.base_dir
|
1233
1233
|
FileUtils.chmod 0555, File.join(@ext.base_dir, 'extensions')
|
1234
1234
|
|
1235
|
-
|
1236
|
-
|
1237
|
-
end
|
1235
|
+
@ext.build_extensions
|
1236
|
+
refute_path_exists @ext.extension_dir
|
1238
1237
|
ensure
|
1239
|
-
|
1240
|
-
|
1241
|
-
FileUtils.chmod 0755, @ext.base_dir
|
1242
|
-
end
|
1238
|
+
FileUtils.chmod 0755, File.join(@ext.base_dir, 'extensions')
|
1239
|
+
FileUtils.chmod 0755, @ext.base_dir
|
1243
1240
|
end
|
1244
1241
|
|
1245
1242
|
def test_build_extensions_no_extensions_dir_unwritable
|
@@ -1332,22 +1329,14 @@ dependencies: []
|
|
1332
1329
|
def test_contains_requirable_file_eh_extension
|
1333
1330
|
ext_spec
|
1334
1331
|
|
1335
|
-
|
1336
|
-
|
1337
|
-
|
1338
|
-
open extconf_rb, 'w' do |f|
|
1339
|
-
f.write <<-'RUBY'
|
1340
|
-
open 'Makefile', 'w' do |f|
|
1341
|
-
f.puts "clean:\n\techo cleaned"
|
1342
|
-
f.puts "default:\n\techo built"
|
1343
|
-
f.puts "install:\n\techo installed"
|
1344
|
-
end
|
1345
|
-
RUBY
|
1332
|
+
_, err = capture_io do
|
1333
|
+
refute @ext.contains_requirable_file? 'nonexistent'
|
1346
1334
|
end
|
1347
1335
|
|
1348
|
-
|
1336
|
+
expected = "Ignoring ext-1 because its extensions are not built. " +
|
1337
|
+
"Try: gem pristine ext-1\n"
|
1349
1338
|
|
1350
|
-
|
1339
|
+
assert_equal expected, err
|
1351
1340
|
end
|
1352
1341
|
|
1353
1342
|
def test_date
|
@@ -1792,13 +1781,33 @@ dependencies: []
|
|
1792
1781
|
enable_shared 'no' do
|
1793
1782
|
ext_spec
|
1794
1783
|
|
1795
|
-
@ext.
|
1784
|
+
@ext.require_paths = 'lib'
|
1796
1785
|
|
1797
|
-
|
1798
|
-
|
1799
|
-
|
1786
|
+
assert_equal [@ext.extension_dir, 'lib'], @ext.require_paths
|
1787
|
+
end
|
1788
|
+
end
|
1789
|
+
|
1790
|
+
def test_require_paths_default_ext_dir_for
|
1791
|
+
class << Gem
|
1792
|
+
send :alias_method, :orig_default_ext_dir_for, :default_ext_dir_for
|
1793
|
+
end
|
1794
|
+
|
1795
|
+
def Gem.default_ext_dir_for base_dir
|
1796
|
+
'/foo'
|
1797
|
+
end
|
1798
|
+
|
1799
|
+
enable_shared 'no' do
|
1800
|
+
ext_spec
|
1800
1801
|
|
1801
|
-
|
1802
|
+
@ext.require_paths = 'lib'
|
1803
|
+
|
1804
|
+
assert_equal ['/foo/ext-1', 'lib'], @ext.require_paths
|
1805
|
+
end
|
1806
|
+
ensure
|
1807
|
+
class << Gem
|
1808
|
+
send :remove_method, :default_ext_dir_for
|
1809
|
+
send :alias_method, :default_ext_dir_for, :orig_default_ext_dir_for
|
1810
|
+
send :remove_method, :orig_default_ext_dir_for
|
1802
1811
|
end
|
1803
1812
|
end
|
1804
1813
|
|
@@ -1825,7 +1834,7 @@ dependencies: []
|
|
1825
1834
|
def test_full_require_paths
|
1826
1835
|
ext_spec
|
1827
1836
|
|
1828
|
-
@ext.
|
1837
|
+
@ext.require_paths = 'lib'
|
1829
1838
|
|
1830
1839
|
expected = [
|
1831
1840
|
@ext.extension_dir,
|
@@ -2875,6 +2884,52 @@ end
|
|
2875
2884
|
assert_equal @m1.to_ruby, valid_ruby_spec
|
2876
2885
|
end
|
2877
2886
|
|
2887
|
+
def test_missing_extensions_eh
|
2888
|
+
ext_spec
|
2889
|
+
|
2890
|
+
assert @ext.missing_extensions?
|
2891
|
+
|
2892
|
+
extconf_rb = File.join @ext.gem_dir, @ext.extensions.first
|
2893
|
+
FileUtils.mkdir_p File.dirname extconf_rb
|
2894
|
+
|
2895
|
+
open extconf_rb, 'w' do |f|
|
2896
|
+
f.write <<-'RUBY'
|
2897
|
+
open 'Makefile', 'w' do |f|
|
2898
|
+
f.puts "clean:\n\techo clean"
|
2899
|
+
f.puts "default:\n\techo built"
|
2900
|
+
f.puts "install:\n\techo installed"
|
2901
|
+
end
|
2902
|
+
RUBY
|
2903
|
+
end
|
2904
|
+
|
2905
|
+
@ext.build_extensions
|
2906
|
+
|
2907
|
+
refute @ext.missing_extensions?
|
2908
|
+
end
|
2909
|
+
|
2910
|
+
def test_missing_extensions_eh_default_gem
|
2911
|
+
spec = new_default_spec 'default', 1
|
2912
|
+
spec.extensions << 'extconf.rb'
|
2913
|
+
|
2914
|
+
refute spec.missing_extensions?
|
2915
|
+
end
|
2916
|
+
|
2917
|
+
def test_missing_extensions_eh_legacy
|
2918
|
+
ext_spec
|
2919
|
+
|
2920
|
+
@ext.installed_by_version = v '2.2.0.preview.2'
|
2921
|
+
|
2922
|
+
assert @ext.missing_extensions?
|
2923
|
+
|
2924
|
+
@ext.installed_by_version = v '2.2.0.preview.1'
|
2925
|
+
|
2926
|
+
refute @ext.missing_extensions?
|
2927
|
+
end
|
2928
|
+
|
2929
|
+
def test_missing_extensions_eh_none
|
2930
|
+
refute @a1.missing_extensions?
|
2931
|
+
end
|
2932
|
+
|
2878
2933
|
def test_find_by_name
|
2879
2934
|
util_make_gems
|
2880
2935
|
assert(Gem::Specification.find_by_name("a"))
|
@@ -23,16 +23,11 @@ class TestStubSpecification < Gem::TestCase
|
|
23
23
|
def test_initialize_extension
|
24
24
|
stub = stub_with_extension
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
assert_equal 'stub_e', stub.name
|
32
|
-
assert_equal v(2), stub.version
|
33
|
-
assert_equal Gem::Platform::RUBY, stub.platform
|
34
|
-
assert_equal [relative_install_dir, 'lib'], stub.require_paths
|
35
|
-
assert_equal %w[ext/stub_e/extconf.rb], stub.extensions
|
26
|
+
assert_equal 'stub_e', stub.name
|
27
|
+
assert_equal v(2), stub.version
|
28
|
+
assert_equal Gem::Platform::RUBY, stub.platform
|
29
|
+
assert_equal [stub.extension_dir, 'lib'], stub.require_paths
|
30
|
+
assert_equal %w[ext/stub_e/extconf.rb], stub.extensions
|
36
31
|
end
|
37
32
|
|
38
33
|
def test_initialize_missing_stubline
|
@@ -55,22 +50,14 @@ class TestStubSpecification < Gem::TestCase
|
|
55
50
|
|
56
51
|
def test_contains_requirable_file_eh_extension
|
57
52
|
stub_with_extension do |stub|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
open extconf_rb, 'w' do |f|
|
62
|
-
f.write <<-'RUBY'
|
63
|
-
open 'Makefile', 'w' do |f|
|
64
|
-
f.puts "clean:\n\techo cleaned"
|
65
|
-
f.puts "default:\n\techo built"
|
66
|
-
f.puts "install:\n\techo installed"
|
67
|
-
end
|
68
|
-
RUBY
|
53
|
+
_, err = capture_io do
|
54
|
+
refute stub.contains_requirable_file? 'nonexistent'
|
69
55
|
end
|
70
56
|
|
71
|
-
|
57
|
+
expected = "Ignoring stub_e-2 because its extensions are not built. " +
|
58
|
+
"Try: gem pristine stub_e-2\n"
|
72
59
|
|
73
|
-
|
60
|
+
assert_equal expected, err
|
74
61
|
end
|
75
62
|
end
|
76
63
|
|
@@ -85,9 +72,60 @@ class TestStubSpecification < Gem::TestCase
|
|
85
72
|
assert_equal expected, stub.full_require_paths
|
86
73
|
end
|
87
74
|
|
75
|
+
def test_missing_extensions_eh
|
76
|
+
stub = stub_with_extension do |s|
|
77
|
+
extconf_rb = File.join s.gem_dir, s.extensions.first
|
78
|
+
FileUtils.mkdir_p File.dirname extconf_rb
|
79
|
+
|
80
|
+
open extconf_rb, 'w' do |f|
|
81
|
+
f.write <<-'RUBY'
|
82
|
+
open 'Makefile', 'w' do |f|
|
83
|
+
f.puts "clean:\n\techo clean"
|
84
|
+
f.puts "default:\n\techo built"
|
85
|
+
f.puts "install:\n\techo installed"
|
86
|
+
end
|
87
|
+
RUBY
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
assert stub.missing_extensions?
|
92
|
+
|
93
|
+
stub.build_extensions
|
94
|
+
|
95
|
+
refute stub.missing_extensions?
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_missing_extensions_eh_default_gem
|
99
|
+
spec = new_default_spec 'default', 1
|
100
|
+
spec.extensions << 'extconf.rb'
|
101
|
+
|
102
|
+
open spec.loaded_from, 'w' do |io|
|
103
|
+
io.write spec.to_ruby_for_cache
|
104
|
+
end
|
105
|
+
|
106
|
+
default_spec = Gem::StubSpecification.new spec.loaded_from
|
107
|
+
|
108
|
+
refute default_spec.missing_extensions?
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_missing_extensions_eh_none
|
112
|
+
refute @foo.missing_extensions?
|
113
|
+
end
|
114
|
+
|
88
115
|
def test_to_spec
|
89
116
|
assert @foo.to_spec.is_a?(Gem::Specification)
|
90
117
|
assert_equal "foo", @foo.to_spec.name
|
118
|
+
refute @foo.to_spec.instance_variable_defined? :@ignored
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_to_spec_missing_extensions
|
122
|
+
stub = stub_with_extension
|
123
|
+
|
124
|
+
capture_io do
|
125
|
+
stub.contains_requirable_file? 'nonexistent'
|
126
|
+
end
|
127
|
+
|
128
|
+
assert stub.to_spec.instance_variable_get :@ignored
|
91
129
|
end
|
92
130
|
|
93
131
|
def stub_with_extension
|