rubygems-update 2.4.8 → 2.5.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/CODE_OF_CONDUCT.md +40 -0
- data/CVE-2015-3900.txt +40 -0
- data/History.txt +173 -2
- data/Manifest.txt +14 -1
- data/Rakefile +36 -1
- data/lib/rubygems.rb +32 -14
- data/lib/rubygems/basic_specification.rb +31 -9
- data/lib/rubygems/commands/dependency_command.rb +25 -15
- data/lib/rubygems/commands/environment_command.rb +2 -0
- data/lib/rubygems/commands/help_command.rb +0 -10
- data/lib/rubygems/commands/install_command.rb +1 -1
- data/lib/rubygems/commands/list_command.rb +1 -1
- data/lib/rubygems/commands/pristine_command.rb +11 -1
- data/lib/rubygems/commands/query_command.rb +1 -1
- data/lib/rubygems/commands/sources_command.rb +1 -1
- data/lib/rubygems/commands/update_command.rb +2 -2
- data/lib/rubygems/config_file.rb +4 -4
- data/lib/rubygems/core_ext/kernel_require.rb +2 -2
- data/lib/rubygems/dependency.rb +9 -6
- data/lib/rubygems/dependency_list.rb +3 -0
- data/lib/rubygems/ext/builder.rb +2 -0
- data/lib/rubygems/ext/ext_conf_builder.rb +6 -1
- data/lib/rubygems/indexer.rb +26 -91
- data/lib/rubygems/installer.rb +58 -26
- data/lib/rubygems/installer_test_case.rb +2 -2
- data/lib/rubygems/package.rb +18 -6
- data/lib/rubygems/package/old.rb +2 -2
- data/lib/rubygems/package/tar_reader/entry.rb +7 -1
- data/lib/rubygems/package/tar_test_case.rb +12 -3
- data/lib/rubygems/package/tar_writer.rb +19 -1
- data/lib/rubygems/platform.rb +3 -2
- data/lib/rubygems/rdoc.rb +1 -2
- data/lib/rubygems/remote_fetcher.rb +25 -6
- data/lib/rubygems/request/connection_pools.rb +8 -4
- data/lib/rubygems/request_set.rb +3 -4
- data/lib/rubygems/request_set/gem_dependency_api.rb +2 -2
- data/lib/rubygems/request_set/lockfile.rb +1 -1
- data/lib/rubygems/request_set/lockfile/parser.rb +54 -43
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +16 -13
- data/lib/rubygems/resolver.rb +47 -242
- data/lib/rubygems/resolver/activation_request.rb +2 -1
- data/lib/rubygems/resolver/conflict.rb +0 -1
- data/lib/rubygems/resolver/dependency_request.rb +4 -1
- data/lib/rubygems/resolver/git_specification.rb +1 -2
- data/lib/rubygems/resolver/molinillo.rb +1 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +5 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +266 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +69 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +3 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +99 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +63 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +430 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +43 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +51 -0
- data/lib/rubygems/resolver/specification.rb +1 -1
- data/lib/rubygems/specification.rb +256 -86
- data/lib/rubygems/stub_specification.rb +37 -29
- data/lib/rubygems/test_case.rb +65 -28
- data/lib/rubygems/test_utilities.rb +18 -18
- data/lib/rubygems/text.rb +0 -2
- data/lib/rubygems/uninstaller.rb +1 -1
- data/lib/rubygems/util.rb +4 -4
- data/lib/rubygems/util/licenses.rb +309 -0
- data/lib/rubygems/util/list.rb +9 -21
- data/lib/rubygems/version.rb +24 -14
- data/test/rubygems/simple_gem.rb +1 -1
- data/test/rubygems/test_config.rb +10 -1
- data/test/rubygems/test_gem.rb +58 -11
- data/test/rubygems/test_gem_available_set.rb +2 -1
- data/test/rubygems/test_gem_commands_cleanup_command.rb +6 -5
- data/test/rubygems/test_gem_commands_dependency_command.rb +9 -1
- data/test/rubygems/test_gem_commands_install_command.rb +17 -28
- data/test/rubygems/test_gem_commands_mirror.rb +0 -13
- data/test/rubygems/test_gem_commands_outdated_command.rb +2 -3
- data/test/rubygems/test_gem_commands_pristine_command.rb +33 -5
- data/test/rubygems/test_gem_commands_query_command.rb +123 -158
- data/test/rubygems/test_gem_commands_server_command.rb +2 -2
- data/test/rubygems/test_gem_commands_specification_command.rb +4 -4
- data/test/rubygems/test_gem_commands_stale_command.rb +2 -0
- data/test/rubygems/test_gem_commands_uninstall_command.rb +5 -4
- data/test/rubygems/test_gem_commands_unpack_command.rb +4 -6
- data/test/rubygems/test_gem_commands_update_command.rb +22 -52
- data/test/rubygems/test_gem_commands_which_command.rb +1 -0
- data/test/rubygems/test_gem_config_file.rb +1 -1
- data/test/rubygems/test_gem_dependency.rb +7 -3
- data/test/rubygems/test_gem_dependency_installer.rb +5 -5
- data/test/rubygems/test_gem_doctor.rb +1 -1
- data/test/rubygems/test_gem_ext_builder.rb +2 -0
- data/test/rubygems/test_gem_ext_configure_builder.rb +8 -4
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +25 -21
- data/test/rubygems/test_gem_indexer.rb +4 -4
- data/test/rubygems/test_gem_install_update_options.rb +2 -2
- data/test/rubygems/test_gem_installer.rb +32 -26
- data/test/rubygems/test_gem_package.rb +46 -1
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +8 -1
- data/test/rubygems/test_gem_package_tar_writer.rb +10 -1
- data/test/rubygems/test_gem_package_task.rb +5 -2
- data/test/rubygems/test_gem_platform.rb +11 -0
- data/test/rubygems/test_gem_remote_fetcher.rb +64 -3
- data/test/rubygems/test_gem_request.rb +1 -1
- data/test/rubygems/test_gem_request_connection_pools.rb +10 -1
- data/test/rubygems/test_gem_request_set.rb +5 -8
- data/test/rubygems/test_gem_request_set_lockfile.rb +2 -4
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +1 -1
- data/test/rubygems/test_gem_resolver.rb +12 -31
- data/test/rubygems/test_gem_resolver_git_specification.rb +1 -0
- data/test/rubygems/test_gem_resolver_installer_set.rb +7 -11
- data/test/rubygems/test_gem_resolver_lock_specification.rb +3 -2
- data/test/rubygems/test_gem_security_trust_dir.rb +2 -0
- data/test/rubygems/test_gem_server.rb +4 -0
- data/test/rubygems/test_gem_specification.rb +344 -61
- data/test/rubygems/test_gem_stream_ui.rb +6 -6
- data/test/rubygems/test_gem_stub_specification.rb +21 -6
- data/test/rubygems/test_gem_text.rb +2 -0
- data/test/rubygems/test_gem_uninstaller.rb +2 -1
- data/test/rubygems/test_gem_util.rb +8 -0
- data/test/rubygems/test_require.rb +156 -125
- data/util/generate_spdx_license_list.rb +21 -0
- data/util/update_bundled_ca_certificates.rb +2 -1
- metadata +42 -6
- metadata.gz.sig +0 -0
- data/lib/rubygems/util/stringio.rb +0 -34
@@ -16,7 +16,7 @@ class TestGemRequest < Gem::TestCase
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def setup
|
19
|
-
@proxies = %w[http_proxy HTTP_PROXY http_proxy_user HTTP_PROXY_USER http_proxy_pass HTTP_PROXY_PASS no_proxy NO_PROXY]
|
19
|
+
@proxies = %w[http_proxy https_proxy HTTP_PROXY http_proxy_user HTTP_PROXY_USER http_proxy_pass HTTP_PROXY_PASS no_proxy NO_PROXY]
|
20
20
|
@old_proxies = @proxies.map {|k| ENV[k] }
|
21
21
|
@proxies.each {|k| ENV[k] = nil }
|
22
22
|
|
@@ -80,6 +80,15 @@ class TestGemRequestConnectionPool < Gem::TestCase
|
|
80
80
|
assert_equal ['example', 80], net_http_args
|
81
81
|
end
|
82
82
|
|
83
|
+
def test_net_http_args_ipv6
|
84
|
+
pools = Gem::Request::ConnectionPools.new nil, []
|
85
|
+
|
86
|
+
net_http_args = pools.send :net_http_args, URI('http://[::1]'), nil
|
87
|
+
|
88
|
+
expected_host = RUBY_VERSION >= "1.9.3" ? "::1" : "[::1]"
|
89
|
+
assert_equal [expected_host, 80], net_http_args
|
90
|
+
end
|
91
|
+
|
83
92
|
def test_net_http_args_proxy
|
84
93
|
pools = Gem::Request::ConnectionPools.new nil, []
|
85
94
|
|
@@ -109,7 +118,7 @@ class TestGemRequestConnectionPool < Gem::TestCase
|
|
109
118
|
pool.checkout
|
110
119
|
|
111
120
|
t1 = Thread.new {
|
112
|
-
timeout(1) do
|
121
|
+
Timeout.timeout(1) do
|
113
122
|
pool.checkout
|
114
123
|
end
|
115
124
|
}
|
@@ -141,10 +141,9 @@ Gems to install:
|
|
141
141
|
|
142
142
|
def test_install_from_gemdeps_lockfile
|
143
143
|
spec_fetcher do |fetcher|
|
144
|
-
fetcher.
|
145
|
-
fetcher.
|
146
|
-
fetcher.
|
147
|
-
fetcher.clear
|
144
|
+
fetcher.download 'a', 1
|
145
|
+
fetcher.download 'a', 2
|
146
|
+
fetcher.download 'b', 1, 'a' => '>= 0'
|
148
147
|
end
|
149
148
|
|
150
149
|
rs = Gem::RequestSet.new
|
@@ -445,10 +444,8 @@ ruby "0"
|
|
445
444
|
end
|
446
445
|
|
447
446
|
spec_fetcher do |fetcher|
|
448
|
-
fetcher.
|
449
|
-
fetcher.
|
450
|
-
|
451
|
-
fetcher.clear
|
447
|
+
fetcher.download "a", "1", "b" => "= 1"
|
448
|
+
fetcher.download "b", "1"
|
452
449
|
end
|
453
450
|
|
454
451
|
rs = Gem::RequestSet.new
|
@@ -338,13 +338,11 @@ DEPENDENCIES
|
|
338
338
|
|
339
339
|
def test_to_s_gem_source
|
340
340
|
spec_fetcher do |fetcher|
|
341
|
-
fetcher.
|
342
|
-
fetcher.clear
|
341
|
+
fetcher.download 'a', 2
|
343
342
|
end
|
344
343
|
|
345
344
|
spec_fetcher 'http://other.example/' do |fetcher|
|
346
|
-
fetcher.
|
347
|
-
fetcher.clear
|
345
|
+
fetcher.download 'b', 2
|
348
346
|
end
|
349
347
|
|
350
348
|
Gem.sources << 'http://other.example/'
|
@@ -95,24 +95,6 @@ class TestGemResolver < Gem::TestCase
|
|
95
95
|
assert_same index_set, composed
|
96
96
|
end
|
97
97
|
|
98
|
-
def test_handle_conflict
|
99
|
-
a1 = util_spec 'a', 1
|
100
|
-
|
101
|
-
r1 = Gem::Resolver::DependencyRequest.new dep('a', '= 1'), nil
|
102
|
-
r2 = Gem::Resolver::DependencyRequest.new dep('a', '= 2'), nil
|
103
|
-
r3 = Gem::Resolver::DependencyRequest.new dep('a', '= 3'), nil
|
104
|
-
|
105
|
-
existing = Gem::Resolver::ActivationRequest.new a1, r1, false
|
106
|
-
|
107
|
-
res = Gem::Resolver.new [a1]
|
108
|
-
|
109
|
-
res.handle_conflict r2, existing
|
110
|
-
res.handle_conflict r2, existing
|
111
|
-
res.handle_conflict r3, existing
|
112
|
-
|
113
|
-
assert_equal 2, res.conflicts.length
|
114
|
-
end
|
115
|
-
|
116
98
|
def test_requests
|
117
99
|
a1 = util_spec 'a', 1, 'b' => 2
|
118
100
|
|
@@ -122,11 +104,11 @@ class TestGemResolver < Gem::TestCase
|
|
122
104
|
|
123
105
|
res = Gem::Resolver.new [a1]
|
124
106
|
|
125
|
-
reqs =
|
107
|
+
reqs = []
|
126
108
|
|
127
109
|
res.requests a1, act, reqs
|
128
110
|
|
129
|
-
assert_equal ['b (= 2)'], reqs.
|
111
|
+
assert_equal ['b (= 2)'], reqs.map { |req| req.to_s }
|
130
112
|
end
|
131
113
|
|
132
114
|
def test_requests_development
|
@@ -144,11 +126,11 @@ class TestGemResolver < Gem::TestCase
|
|
144
126
|
res = Gem::Resolver.new [act]
|
145
127
|
res.development = true
|
146
128
|
|
147
|
-
reqs =
|
129
|
+
reqs = []
|
148
130
|
|
149
131
|
res.requests spec, act, reqs
|
150
132
|
|
151
|
-
assert_equal ['b (= 2)'], reqs.
|
133
|
+
assert_equal ['b (= 2)'], reqs.map { |req| req.to_s }
|
152
134
|
|
153
135
|
assert spec.instance_variable_defined? :@called
|
154
136
|
end
|
@@ -163,7 +145,7 @@ class TestGemResolver < Gem::TestCase
|
|
163
145
|
res = Gem::Resolver.new [a1]
|
164
146
|
res.ignore_dependencies = true
|
165
147
|
|
166
|
-
reqs =
|
148
|
+
reqs = []
|
167
149
|
|
168
150
|
res.requests a1, act, reqs
|
169
151
|
|
@@ -438,19 +420,19 @@ class TestGemResolver < Gem::TestCase
|
|
438
420
|
r.resolve
|
439
421
|
end
|
440
422
|
|
441
|
-
deps = [make_dep("c", "=
|
423
|
+
deps = [make_dep("c", "= 2"), make_dep("c", "= 1")]
|
442
424
|
assert_equal deps, e.conflicting_dependencies
|
443
425
|
|
444
426
|
con = e.conflict
|
445
427
|
|
446
428
|
act = con.activated
|
447
|
-
assert_equal "c-
|
429
|
+
assert_equal "c-1", act.spec.full_name
|
448
430
|
|
449
431
|
parent = act.parent
|
450
|
-
assert_equal "
|
432
|
+
assert_equal "a-1", parent.spec.full_name
|
451
433
|
|
452
434
|
act = con.requester
|
453
|
-
assert_equal "
|
435
|
+
assert_equal "b-1", act.spec.full_name
|
454
436
|
end
|
455
437
|
|
456
438
|
def test_raises_when_a_gem_is_missing
|
@@ -538,11 +520,11 @@ class TestGemResolver < Gem::TestCase
|
|
538
520
|
assert_equal req('>= 0'), dependency.requirement
|
539
521
|
|
540
522
|
activated = e.conflict.activated
|
541
|
-
assert_equal 'c-
|
523
|
+
assert_equal 'c-2', activated.full_name
|
542
524
|
|
543
|
-
assert_equal dep('c', '
|
525
|
+
assert_equal dep('c', '>= 2'), activated.request.dependency
|
544
526
|
|
545
|
-
assert_equal [dep('c', '
|
527
|
+
assert_equal [dep('c', '= 1'), dep('c', '>= 2')],
|
546
528
|
e.conflict.conflicting_dependencies
|
547
529
|
end
|
548
530
|
|
@@ -730,4 +712,3 @@ class TestGemResolver < Gem::TestCase
|
|
730
712
|
end
|
731
713
|
|
732
714
|
end
|
733
|
-
|
@@ -4,9 +4,8 @@ class TestGemResolverInstallerSet < Gem::TestCase
|
|
4
4
|
|
5
5
|
def test_add_always_install
|
6
6
|
spec_fetcher do |fetcher|
|
7
|
-
fetcher.
|
8
|
-
fetcher.
|
9
|
-
fetcher.clear
|
7
|
+
fetcher.download 'a', 1
|
8
|
+
fetcher.download 'a', 2
|
10
9
|
end
|
11
10
|
|
12
11
|
util_gem 'a', 1
|
@@ -39,11 +38,10 @@ class TestGemResolverInstallerSet < Gem::TestCase
|
|
39
38
|
|
40
39
|
def test_add_always_install_platform
|
41
40
|
spec_fetcher do |fetcher|
|
42
|
-
fetcher.
|
43
|
-
fetcher.
|
41
|
+
fetcher.download 'a', 1
|
42
|
+
fetcher.download 'a', 2 do |s|
|
44
43
|
s.platform = Gem::Platform.new 'x86-freebsd-9'
|
45
44
|
end
|
46
|
-
fetcher.clear
|
47
45
|
end
|
48
46
|
|
49
47
|
set = Gem::Resolver::InstallerSet.new :both
|
@@ -139,8 +137,7 @@ class TestGemResolverInstallerSet < Gem::TestCase
|
|
139
137
|
|
140
138
|
def test_find_all_always_install
|
141
139
|
spec_fetcher do |fetcher|
|
142
|
-
fetcher.
|
143
|
-
fetcher.clear
|
140
|
+
fetcher.download 'a', 2
|
144
141
|
end
|
145
142
|
|
146
143
|
util_gem 'a', 1
|
@@ -156,9 +153,8 @@ class TestGemResolverInstallerSet < Gem::TestCase
|
|
156
153
|
|
157
154
|
def test_find_all_prerelease
|
158
155
|
spec_fetcher do |fetcher|
|
159
|
-
fetcher.
|
160
|
-
fetcher.
|
161
|
-
fetcher.clear
|
156
|
+
fetcher.download 'a', '1'
|
157
|
+
fetcher.download 'a', '1.a'
|
162
158
|
end
|
163
159
|
|
164
160
|
set = Gem::Resolver::InstallerSet.new :both
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rubygems/test_case'
|
2
|
+
require 'rubygems/installer'
|
2
3
|
require 'rubygems/resolver'
|
3
4
|
|
4
5
|
class TestGemResolverLockSpecification < Gem::TestCase
|
@@ -34,8 +35,7 @@ class TestGemResolverLockSpecification < Gem::TestCase
|
|
34
35
|
|
35
36
|
def test_install
|
36
37
|
spec_fetcher do |fetcher|
|
37
|
-
fetcher.
|
38
|
-
fetcher.clear
|
38
|
+
fetcher.download 'a', 2
|
39
39
|
end
|
40
40
|
|
41
41
|
spec = @LS.new @set, 'a', v(2), @source, Gem::Platform::RUBY
|
@@ -85,6 +85,7 @@ class TestGemResolverLockSpecification < Gem::TestCase
|
|
85
85
|
|
86
86
|
def test_spec_loaded
|
87
87
|
real_spec = util_spec 'a', 2
|
88
|
+
install_specs real_spec
|
88
89
|
real_spec.activate
|
89
90
|
|
90
91
|
version = v(2)
|
@@ -70,6 +70,7 @@ class TestGemSecurityTrustDir < Gem::TestCase
|
|
70
70
|
assert_path_exists @dest_dir
|
71
71
|
|
72
72
|
mask = 040700 & (~File.umask)
|
73
|
+
mask |= 0200000 if /aix/ =~ RUBY_PLATFORM
|
73
74
|
|
74
75
|
assert_equal mask, File.stat(@dest_dir).mode unless win_platform?
|
75
76
|
end
|
@@ -90,6 +91,7 @@ class TestGemSecurityTrustDir < Gem::TestCase
|
|
90
91
|
@trust_dir.verify
|
91
92
|
|
92
93
|
mask = 040700 & (~File.umask)
|
94
|
+
mask |= 0200000 if /aix/ =~ RUBY_PLATFORM
|
93
95
|
|
94
96
|
assert_equal mask, File.stat(@dest_dir).mode unless win_platform?
|
95
97
|
end
|
@@ -1,8 +1,10 @@
|
|
1
|
+
require 'benchmark'
|
1
2
|
require 'rubygems/test_case'
|
2
3
|
require 'pathname'
|
3
4
|
require 'stringio'
|
4
5
|
require 'rubygems/ext'
|
5
6
|
require 'rubygems/specification'
|
7
|
+
require 'rubygems/installer'
|
6
8
|
|
7
9
|
class TestGemSpecification < Gem::TestCase
|
8
10
|
|
@@ -112,7 +114,7 @@ end
|
|
112
114
|
c2 = new_spec "c", "2"
|
113
115
|
|
114
116
|
Gem::Specification.reset
|
115
|
-
install_specs
|
117
|
+
install_specs c1, c2, b1, b2, a1
|
116
118
|
|
117
119
|
a1.activate
|
118
120
|
assert_equal %w(a-1), loaded_spec_names
|
@@ -125,6 +127,32 @@ end
|
|
125
127
|
end
|
126
128
|
end
|
127
129
|
|
130
|
+
def test_find_in_unresolved_tree_is_not_exponentiental
|
131
|
+
save_loaded_features do
|
132
|
+
num_of_pkg = 7
|
133
|
+
num_of_version_per_pkg = 3
|
134
|
+
packages = (0..num_of_pkg).map do |pkgi|
|
135
|
+
(0..num_of_version_per_pkg).map do |pkg_version|
|
136
|
+
deps = Hash[((pkgi + 1)..num_of_pkg).map { |deppkgi|
|
137
|
+
["pkg#{deppkgi}", ">= 0"]
|
138
|
+
}]
|
139
|
+
new_spec "pkg#{pkgi}", pkg_version.to_s, deps
|
140
|
+
end
|
141
|
+
end
|
142
|
+
base = new_spec "pkg_base", "1", {"pkg0" => ">= 0"}
|
143
|
+
|
144
|
+
Gem::Specification.reset
|
145
|
+
install_specs(*packages.flatten.reverse)
|
146
|
+
install_specs base
|
147
|
+
base.activate
|
148
|
+
|
149
|
+
tms = Benchmark.measure {
|
150
|
+
assert_raises(LoadError) { require 'no_such_file_foo' }
|
151
|
+
}
|
152
|
+
assert_operator tms.total, :<=, 10
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
128
156
|
def test_self_activate_ambiguous_indirect
|
129
157
|
save_loaded_features do
|
130
158
|
a1 = new_spec "a", "1", "b" => "> 0"
|
@@ -133,7 +161,7 @@ end
|
|
133
161
|
c1 = new_spec "c", "1", nil, "lib/d.rb"
|
134
162
|
c2 = new_spec "c", "2", nil, "lib/d.rb"
|
135
163
|
|
136
|
-
install_specs
|
164
|
+
install_specs c1, c2, b1, b2, a1
|
137
165
|
|
138
166
|
a1.activate
|
139
167
|
assert_equal %w(a-1), loaded_spec_names
|
@@ -155,7 +183,7 @@ end
|
|
155
183
|
c1 = new_spec "c", "1", nil, "lib/d.rb"
|
156
184
|
c2 = new_spec("c", "2", { "a" => "1" }, "lib/d.rb") # conflicts with a-2
|
157
185
|
|
158
|
-
install_specs
|
186
|
+
install_specs c1, b1, a1, a2, c2, b2
|
159
187
|
|
160
188
|
a2.activate
|
161
189
|
assert_equal %w(a-2), loaded_spec_names
|
@@ -177,7 +205,7 @@ end
|
|
177
205
|
c2 = new_spec "c", "2"
|
178
206
|
d1 = new_spec "d", "1", nil, "lib/d.rb"
|
179
207
|
|
180
|
-
install_specs
|
208
|
+
install_specs d1, c1, c2, b1, b2, a1
|
181
209
|
|
182
210
|
a1.activate
|
183
211
|
assert_equal %w(a-1), loaded_spec_names
|
@@ -190,6 +218,155 @@ end
|
|
190
218
|
end
|
191
219
|
end
|
192
220
|
|
221
|
+
def test_require_should_prefer_latest_gem_level1
|
222
|
+
save_loaded_features do
|
223
|
+
a1 = new_spec "a", "1", "b" => "> 0"
|
224
|
+
b1 = new_spec "b", "1", "c" => ">= 0" # unresolved
|
225
|
+
b2 = new_spec "b", "2", "c" => ">= 0"
|
226
|
+
c1 = new_spec "c", "1", nil, "lib/c.rb" # 1st level
|
227
|
+
c2 = new_spec "c", "2", nil, "lib/c.rb"
|
228
|
+
|
229
|
+
install_specs c1, c2, b1, b2, a1
|
230
|
+
|
231
|
+
a1.activate
|
232
|
+
|
233
|
+
require "c"
|
234
|
+
|
235
|
+
assert_equal %w(a-1 b-2 c-2), loaded_spec_names
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
def test_require_should_prefer_latest_gem_level2
|
240
|
+
save_loaded_features do
|
241
|
+
a1 = new_spec "a", "1", "b" => "> 0"
|
242
|
+
b1 = new_spec "b", "1", "c" => ">= 0" # unresolved
|
243
|
+
b2 = new_spec "b", "2", "c" => ">= 0"
|
244
|
+
c1 = new_spec "c", "1", "d" => ">= 0" # 1st level
|
245
|
+
c2 = new_spec "c", "2", "d" => ">= 0"
|
246
|
+
d1 = new_spec "d", "1", nil, "lib/d.rb" # 2nd level
|
247
|
+
d2 = new_spec "d", "2", nil, "lib/d.rb"
|
248
|
+
|
249
|
+
install_specs d1, d2, c1, c2, b1, b2, a1
|
250
|
+
|
251
|
+
a1.activate
|
252
|
+
|
253
|
+
require "d"
|
254
|
+
|
255
|
+
assert_equal %w(a-1 b-2 c-2 d-2), loaded_spec_names
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
def test_require_finds_in_2nd_level_indirect
|
260
|
+
save_loaded_features do
|
261
|
+
a1 = new_spec "a", "1", "b" => "> 0"
|
262
|
+
b1 = new_spec "b", "1", "c" => ">= 0" # unresolved
|
263
|
+
b2 = new_spec "b", "2", "c" => ">= 0"
|
264
|
+
c1 = new_spec "c", "1", "d" => "<= 2" # 1st level
|
265
|
+
c2 = new_spec "c", "2", "d" => "<= 2"
|
266
|
+
d1 = new_spec "d", "1", nil, "lib/d.rb" # 2nd level
|
267
|
+
d2 = new_spec "d", "2", nil, "lib/d.rb"
|
268
|
+
d3 = new_spec "d", "3", nil, "lib/d.rb"
|
269
|
+
|
270
|
+
install_specs d1, d2, d3, c1, c2, b1, b2, a1
|
271
|
+
|
272
|
+
a1.activate
|
273
|
+
|
274
|
+
require "d"
|
275
|
+
|
276
|
+
assert_equal %w(a-1 b-2 c-2 d-2), loaded_spec_names
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
def test_require_should_prefer_reachable_gems
|
281
|
+
save_loaded_features do
|
282
|
+
a1 = new_spec "a", "1", "b" => "> 0"
|
283
|
+
b1 = new_spec "b", "1", "c" => ">= 0" # unresolved
|
284
|
+
b2 = new_spec "b", "2", "c" => ">= 0"
|
285
|
+
c1 = new_spec "c", "1", "d" => "<= 2" # 1st level
|
286
|
+
c2 = new_spec "c", "2", "d" => "<= 2"
|
287
|
+
d1 = new_spec "d", "1", nil, "lib/d.rb" # 2nd level
|
288
|
+
d2 = new_spec "d", "2", nil, "lib/d.rb"
|
289
|
+
d3 = new_spec "d", "3", nil, "lib/d.rb"
|
290
|
+
e = new_spec "anti_d", "1", nil, "lib/d.rb"
|
291
|
+
|
292
|
+
install_specs d1, d2, d3, e, c1, c2, b1, b2, a1
|
293
|
+
|
294
|
+
a1.activate
|
295
|
+
|
296
|
+
require "d"
|
297
|
+
|
298
|
+
assert_equal %w(a-1 b-2 c-2 d-2), loaded_spec_names
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
def test_require_should_not_conflict
|
303
|
+
save_loaded_features do
|
304
|
+
base = new_spec "0", "1", "A" => ">= 1"
|
305
|
+
a1 = new_spec "A", "1", {"c" => ">= 2", "b" => "> 0"}, "lib/a.rb"
|
306
|
+
a2 = new_spec "A", "2", {"c" => ">= 2", "b" => "> 0"}, "lib/a.rb"
|
307
|
+
b1 = new_spec "b", "1", {"c" => "= 1"}, "lib/d.rb"
|
308
|
+
b2 = new_spec "b", "2", {"c" => "= 2"}, "lib/d.rb"
|
309
|
+
c1 = new_spec "c", "1", {}, "lib/c.rb"
|
310
|
+
c2 = new_spec "c", "2", {}, "lib/c.rb"
|
311
|
+
c3 = new_spec "c", "3", {}, "lib/c.rb"
|
312
|
+
|
313
|
+
install_specs c1, c2, c3, b1, b2, a1, a2, base
|
314
|
+
|
315
|
+
base.activate
|
316
|
+
assert_equal %w(0-1), loaded_spec_names
|
317
|
+
assert_equal ["A (>= 1)"], unresolved_names
|
318
|
+
|
319
|
+
require "d"
|
320
|
+
|
321
|
+
assert_equal %w(0-1 A-2 b-2 c-2), loaded_spec_names
|
322
|
+
assert_equal [], unresolved_names
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
def test_inner_clonflict_in_indirect_gems
|
327
|
+
save_loaded_features do
|
328
|
+
a1 = new_spec "a", "1", "b" => "> 0"
|
329
|
+
b1 = new_spec "b", "1", "c" => ">= 1" # unresolved
|
330
|
+
b2 = new_spec "b", "2", "c" => ">= 1", "d" => "< 3"
|
331
|
+
c1 = new_spec "c", "1", "d" => "<= 2" # 1st level
|
332
|
+
c2 = new_spec "c", "2", "d" => "<= 2"
|
333
|
+
c3 = new_spec "c", "3", "d" => "<= 3"
|
334
|
+
d1 = new_spec "d", "1", nil, "lib/d.rb" # 2nd level
|
335
|
+
d2 = new_spec "d", "2", nil, "lib/d.rb"
|
336
|
+
d3 = new_spec "d", "3", nil, "lib/d.rb"
|
337
|
+
|
338
|
+
install_specs d1, d2, d3, c1, c2, c3, b1, b2, a1
|
339
|
+
|
340
|
+
a1.activate
|
341
|
+
|
342
|
+
require "d"
|
343
|
+
|
344
|
+
assert_includes [%w(a-1 b-2 c-3 d-2),%w(a-1 b-2 d-2)], loaded_spec_names
|
345
|
+
end
|
346
|
+
end
|
347
|
+
|
348
|
+
def test_inner_clonflict_in_indirect_gems_reversed
|
349
|
+
save_loaded_features do
|
350
|
+
a1 = new_spec "a", "1", "b" => "> 0"
|
351
|
+
b1 = new_spec "b", "1", "xc" => ">= 1" # unresolved
|
352
|
+
b2 = new_spec "b", "2", "xc" => ">= 1", "d" => "< 3"
|
353
|
+
c1 = new_spec "xc", "1", "d" => "<= 3" # 1st level
|
354
|
+
c2 = new_spec "xc", "2", "d" => "<= 2"
|
355
|
+
c3 = new_spec "xc", "3", "d" => "<= 3"
|
356
|
+
d1 = new_spec "d", "1", nil, "lib/d.rb" # 2nd level
|
357
|
+
d2 = new_spec "d", "2", nil, "lib/d.rb"
|
358
|
+
d3 = new_spec "d", "3", nil, "lib/d.rb"
|
359
|
+
|
360
|
+
install_specs d1, d2, d3, c1, c2, c3, b1, b2, a1
|
361
|
+
|
362
|
+
a1.activate
|
363
|
+
|
364
|
+
require "d"
|
365
|
+
|
366
|
+
assert_includes [%w(a-1 b-2 d-2 xc-3), %w(a-1 b-2 d-2)], loaded_spec_names
|
367
|
+
end
|
368
|
+
end
|
369
|
+
|
193
370
|
##
|
194
371
|
# [A] depends on
|
195
372
|
# [C] = 1.0 depends on
|
@@ -197,13 +374,14 @@ end
|
|
197
374
|
# [B] ~> 1.0 (satisfied by 1.0)
|
198
375
|
|
199
376
|
def test_self_activate_checks_dependencies
|
200
|
-
a
|
377
|
+
a = util_spec 'a', '1.0'
|
201
378
|
a.add_dependency 'c', '= 1.0'
|
202
379
|
a.add_dependency 'b', '~> 1.0'
|
203
380
|
|
204
|
-
|
205
|
-
|
206
|
-
c
|
381
|
+
b1 = util_spec 'b', '1.0'
|
382
|
+
b2 = util_spec 'b', '2.0'
|
383
|
+
c = util_spec 'c', '1.0', 'b' => '= 2.0'
|
384
|
+
install_specs b1, b2, c, a
|
207
385
|
|
208
386
|
e = assert_raises Gem::LoadError do
|
209
387
|
assert_activate nil, a, c, "b"
|
@@ -220,10 +398,12 @@ end
|
|
220
398
|
# [B] = 2.0
|
221
399
|
|
222
400
|
def test_self_activate_divergent
|
223
|
-
a
|
224
|
-
|
225
|
-
|
226
|
-
c
|
401
|
+
a = util_spec 'a', '1.0', 'b' => '~> 1.0', 'c' => '= 1.0'
|
402
|
+
b1 = util_spec 'b', '1.0'
|
403
|
+
b2 = util_spec 'b', '2.0'
|
404
|
+
c = util_spec 'c', '1.0', 'b' => '= 2.0'
|
405
|
+
|
406
|
+
install_specs b1, b2, c, a
|
227
407
|
|
228
408
|
e = assert_raises Gem::ConflictError do
|
229
409
|
assert_activate nil, a, c, "b"
|
@@ -241,6 +421,8 @@ end
|
|
241
421
|
@d1 = util_spec 'd', '1'
|
242
422
|
@d2 = util_spec 'd', '2'
|
243
423
|
|
424
|
+
install_specs @d1, @d2, e1
|
425
|
+
|
244
426
|
assert_activate %w[d-1 e-1], e1, "d"
|
245
427
|
end
|
246
428
|
|
@@ -259,6 +441,7 @@ end
|
|
259
441
|
@w1 = util_spec 'w', '1', 'x' => nil
|
260
442
|
|
261
443
|
util_set_arch 'cpu-my_platform1'
|
444
|
+
install_specs @x1_m, @x1_o, @w1
|
262
445
|
|
263
446
|
assert_activate %w[x-1-cpu-my_platform-1 w-1], @w1, @x1_m
|
264
447
|
end
|
@@ -274,6 +457,7 @@ end
|
|
274
457
|
end
|
275
458
|
|
276
459
|
@z1 = util_spec 'z', '1', 'y' => nil
|
460
|
+
install_specs @y1, @y1_1_p, @z1
|
277
461
|
|
278
462
|
assert_activate %w[y-1 z-1], @z1, @y1
|
279
463
|
end
|
@@ -291,6 +475,7 @@ end
|
|
291
475
|
s.add_dependency 'a'
|
292
476
|
s.add_development_dependency 'aa'
|
293
477
|
end
|
478
|
+
install_specs @a1_pre, @b1, @c1_pre
|
294
479
|
|
295
480
|
assert_activate %w[a-1.a b-1 c-1.a], @c1_pre, @a1_pre, @b1
|
296
481
|
end
|
@@ -300,7 +485,7 @@ end
|
|
300
485
|
b1 = new_spec "b", "1", nil, "lib/b/c.rb"
|
301
486
|
b2 = new_spec "b", "2", nil, "lib/b/c.rb"
|
302
487
|
|
303
|
-
install_specs
|
488
|
+
install_specs b1, b2, a1
|
304
489
|
|
305
490
|
a1.activate
|
306
491
|
save_loaded_features do
|
@@ -320,7 +505,7 @@ end
|
|
320
505
|
d1 = new_spec "d", "1", { "c" => "< 2" }, "lib/d.rb"
|
321
506
|
d2 = new_spec "d", "2", { "c" => "< 2" }, "lib/d.rb" # this
|
322
507
|
|
323
|
-
install_specs
|
508
|
+
install_specs c1, c2, b1, b2, d1, d2, a1
|
324
509
|
|
325
510
|
a1.activate
|
326
511
|
|
@@ -347,7 +532,7 @@ end
|
|
347
532
|
c1 = new_spec "c", "1"
|
348
533
|
c2 = new_spec "c", "2"
|
349
534
|
|
350
|
-
install_specs
|
535
|
+
install_specs c1, c2, b1, b2, a1
|
351
536
|
|
352
537
|
a1.activate
|
353
538
|
assert_equal %w(a-1 b-1 c-1), loaded_spec_names
|
@@ -367,8 +552,9 @@ end
|
|
367
552
|
|
368
553
|
def test_self_activate_unrelated
|
369
554
|
a = util_spec 'a', '1.0', 'b' => '>= 1.0'
|
370
|
-
|
555
|
+
b = util_spec 'b', '1.0'
|
371
556
|
c = util_spec 'c', '1.0'
|
557
|
+
install_specs b, c, a
|
372
558
|
|
373
559
|
assert_activate %w[b-1.0 c-1.0 a-1.0], a, c, "b"
|
374
560
|
end
|
@@ -384,10 +570,11 @@ end
|
|
384
570
|
|
385
571
|
def test_self_activate_over
|
386
572
|
a = util_spec 'a', '1.0', 'b' => '>= 1.0', 'c' => '= 1.0'
|
387
|
-
util_spec 'b', '1.0'
|
388
|
-
util_spec 'b', '1.1'
|
389
|
-
util_spec 'b', '2.0'
|
390
|
-
util_spec 'c', '1.0', 'b' => '~> 1.0'
|
573
|
+
install_specs util_spec 'b', '1.0'
|
574
|
+
install_specs util_spec 'b', '1.1'
|
575
|
+
install_specs util_spec 'b', '2.0'
|
576
|
+
install_specs util_spec 'c', '1.0', 'b' => '~> 1.0'
|
577
|
+
install_specs a
|
391
578
|
|
392
579
|
a.activate
|
393
580
|
|
@@ -407,10 +594,12 @@ end
|
|
407
594
|
# first resolve through a dependency that is later pruned.
|
408
595
|
|
409
596
|
def test_self_activate_under
|
410
|
-
a
|
411
|
-
|
412
|
-
|
413
|
-
c
|
597
|
+
a = util_spec 'a', '1.0', 'b' => '~> 1.0', 'c' => '= 1.0'
|
598
|
+
b1 = util_spec 'b', '1.0'
|
599
|
+
b1_1 = util_spec 'b', '1.1'
|
600
|
+
c = util_spec 'c', '1.0', 'b' => '= 1.0'
|
601
|
+
|
602
|
+
install_specs b1, b1_1, c, a
|
414
603
|
|
415
604
|
assert_activate %w[b-1.0 c-1.0 a-1.0], a, c, "b"
|
416
605
|
end
|
@@ -424,10 +613,11 @@ end
|
|
424
613
|
# [C1] depends on nothing
|
425
614
|
|
426
615
|
def test_self_activate_dropped
|
427
|
-
a1
|
428
|
-
|
429
|
-
|
430
|
-
|
616
|
+
a1 = util_spec 'a', '1', 'b' => nil
|
617
|
+
b1 = util_spec 'b', '1', 'c' => nil
|
618
|
+
b2 = util_spec 'b', '2'
|
619
|
+
c1 = util_spec 'c', '1'
|
620
|
+
install_specs c1, b1, b2, a1
|
431
621
|
|
432
622
|
assert_activate %w[b-2 a-1], a1, "b"
|
433
623
|
end
|
@@ -443,17 +633,20 @@ end
|
|
443
633
|
# resolve.
|
444
634
|
|
445
635
|
def test_self_activate_raggi_the_edgecase_generator
|
446
|
-
a
|
447
|
-
|
448
|
-
|
449
|
-
c
|
636
|
+
a = util_spec 'a', '1.0', 'b' => '>= 1.0', 'c' => '>= 1.0'
|
637
|
+
b1 = util_spec 'b', '1.0'
|
638
|
+
b1_0 = util_spec 'b', '1.1', 'z' => '>= 1.0'
|
639
|
+
c = util_spec 'c', '1.0', 'b' => '= 1.0'
|
640
|
+
z = util_spec 'z', '1'
|
641
|
+
|
642
|
+
install_specs z, b1, b1_0, c, z
|
450
643
|
|
451
644
|
assert_activate %w[b-1.0 c-1.0 a-1.0], a, c, "b"
|
452
645
|
end
|
453
646
|
|
454
647
|
def test_self_activate_conflict
|
455
|
-
util_spec 'b', '1.0'
|
456
|
-
util_spec 'b', '2.0'
|
648
|
+
install_specs util_spec 'b', '1.0'
|
649
|
+
install_specs util_spec 'b', '2.0'
|
457
650
|
|
458
651
|
gem "b", "= 1.0"
|
459
652
|
|
@@ -465,6 +658,7 @@ end
|
|
465
658
|
def test_self_all_equals
|
466
659
|
a = new_spec "foo", "1", nil, "lib/foo.rb"
|
467
660
|
|
661
|
+
install_specs a
|
468
662
|
Gem::Specification.all = [a]
|
469
663
|
|
470
664
|
assert_equal a, Gem::Specification.find_inactive_by_path('foo')
|
@@ -748,8 +942,12 @@ dependencies: []
|
|
748
942
|
@a2.name = 'a};raise "improper escaping";%q{'
|
749
943
|
|
750
944
|
full_path = @a2.spec_file
|
751
|
-
|
752
|
-
io
|
945
|
+
begin
|
946
|
+
write_file full_path do |io|
|
947
|
+
io.write @a2.to_ruby_for_cache
|
948
|
+
end
|
949
|
+
rescue Errno::EINVAL
|
950
|
+
skip "cannot create '#{full_path}' on this platform"
|
753
951
|
end
|
754
952
|
|
755
953
|
spec = Gem::Specification.load full_path
|
@@ -763,8 +961,12 @@ dependencies: []
|
|
763
961
|
@a2.name = 'a#{raise %<improper escaping>}'
|
764
962
|
|
765
963
|
full_path = @a2.spec_file
|
766
|
-
|
767
|
-
io
|
964
|
+
begin
|
965
|
+
write_file full_path do |io|
|
966
|
+
io.write @a2.to_ruby_for_cache
|
967
|
+
end
|
968
|
+
rescue Errno::EINVAL
|
969
|
+
skip "cannot create '#{full_path}' on this platform"
|
768
970
|
end
|
769
971
|
|
770
972
|
spec = Gem::Specification.load full_path
|
@@ -778,8 +980,12 @@ dependencies: []
|
|
778
980
|
@a2.name = 'a";raise "improper escaping";"'
|
779
981
|
|
780
982
|
full_path = @a2.spec_file
|
781
|
-
|
782
|
-
io
|
983
|
+
begin
|
984
|
+
write_file full_path do |io|
|
985
|
+
io.write @a2.to_ruby_for_cache
|
986
|
+
end
|
987
|
+
rescue Errno::EINVAL
|
988
|
+
skip "cannot create '#{full_path}' on this platform"
|
783
989
|
end
|
784
990
|
|
785
991
|
spec = Gem::Specification.load full_path
|
@@ -854,9 +1060,7 @@ dependencies: []
|
|
854
1060
|
|
855
1061
|
def test_self_outdated
|
856
1062
|
spec_fetcher do |fetcher|
|
857
|
-
fetcher.
|
858
|
-
|
859
|
-
fetcher.clear
|
1063
|
+
fetcher.download 'a', 4
|
860
1064
|
|
861
1065
|
fetcher.spec 'a', 3
|
862
1066
|
end
|
@@ -866,10 +1070,8 @@ dependencies: []
|
|
866
1070
|
|
867
1071
|
def test_self_outdated_and_latest_remotes
|
868
1072
|
specs = spec_fetcher do |fetcher|
|
869
|
-
fetcher.
|
870
|
-
fetcher.
|
871
|
-
|
872
|
-
fetcher.clear
|
1073
|
+
fetcher.download 'a', 4
|
1074
|
+
fetcher.download 'b', 3
|
873
1075
|
|
874
1076
|
fetcher.spec 'a', '3.a'
|
875
1077
|
fetcher.spec 'b', 2
|
@@ -884,10 +1086,13 @@ dependencies: []
|
|
884
1086
|
end
|
885
1087
|
|
886
1088
|
def test_self_remove_spec
|
1089
|
+
install_specs @a1
|
1090
|
+
|
887
1091
|
assert_includes Gem::Specification.all_names, 'a-1'
|
888
1092
|
assert_includes Gem::Specification.stubs.map { |s| s.full_name }, 'a-1'
|
889
1093
|
|
890
|
-
|
1094
|
+
uninstall_gem @a1
|
1095
|
+
Gem::Specification.reset
|
891
1096
|
|
892
1097
|
refute_includes Gem::Specification.all_names, 'a-1'
|
893
1098
|
refute_includes Gem::Specification.stubs.map { |s| s.full_name }, 'a-1'
|
@@ -902,7 +1107,7 @@ dependencies: []
|
|
902
1107
|
|
903
1108
|
FileUtils.rm @a1.spec_file # bug #698
|
904
1109
|
|
905
|
-
Gem::Specification.
|
1110
|
+
Gem::Specification.reset
|
906
1111
|
|
907
1112
|
refute_includes Gem::Specification.all_names, 'a-1'
|
908
1113
|
refute_includes Gem::Specification.stubs.map { |s| s.full_name }, 'a-1'
|
@@ -973,7 +1178,7 @@ dependencies: []
|
|
973
1178
|
s.summary = 'summary'
|
974
1179
|
s.description = 'description'
|
975
1180
|
s.authors = 'author a', 'author b'
|
976
|
-
s.licenses = 'BSD'
|
1181
|
+
s.licenses = 'BSD-2-Clause'
|
977
1182
|
s.files = 'lib/file.rb'
|
978
1183
|
s.test_files = 'test/file.rb'
|
979
1184
|
s.rdoc_options = '--foo'
|
@@ -1183,6 +1388,17 @@ dependencies: []
|
|
1183
1388
|
assert_path_exists @ext.extension_dir
|
1184
1389
|
end
|
1185
1390
|
|
1391
|
+
def test_default_spec_stub_is_marked_default
|
1392
|
+
default = new_default_spec 'default', 2
|
1393
|
+
install_default_gems default
|
1394
|
+
|
1395
|
+
stub = Gem::Specification.stubs.find { |s| s.name == 'default' }
|
1396
|
+
assert_predicate stub, :default_gem?
|
1397
|
+
|
1398
|
+
stub = Gem::Specification.find_all_by_name('default').first
|
1399
|
+
assert_predicate stub, :default_gem?
|
1400
|
+
end
|
1401
|
+
|
1186
1402
|
def test_build_extensions_built
|
1187
1403
|
ext_spec
|
1188
1404
|
|
@@ -1419,7 +1635,9 @@ dependencies: []
|
|
1419
1635
|
|
1420
1636
|
assert_empty @gem.dependent_gems
|
1421
1637
|
|
1422
|
-
bonobo = util_spec 'bonobo'
|
1638
|
+
bonobo = util_spec 'bonobo', 1
|
1639
|
+
install_gem bonobo
|
1640
|
+
install_gem @gem
|
1423
1641
|
|
1424
1642
|
expected = [
|
1425
1643
|
[@gem, @bonobo, [bonobo]],
|
@@ -1506,6 +1724,8 @@ dependencies: []
|
|
1506
1724
|
class << Gem
|
1507
1725
|
alias orig_default_ext_dir_for default_ext_dir_for
|
1508
1726
|
|
1727
|
+
remove_method :default_ext_dir_for
|
1728
|
+
|
1509
1729
|
def Gem.default_ext_dir_for(base_dir)
|
1510
1730
|
'elsewhere'
|
1511
1731
|
end
|
@@ -1815,6 +2035,8 @@ dependencies: []
|
|
1815
2035
|
def test_require_paths_default_ext_dir_for
|
1816
2036
|
class << Gem
|
1817
2037
|
send :alias_method, :orig_default_ext_dir_for, :default_ext_dir_for
|
2038
|
+
|
2039
|
+
remove_method :default_ext_dir_for
|
1818
2040
|
end
|
1819
2041
|
|
1820
2042
|
def Gem.default_ext_dir_for base_dir
|
@@ -1932,7 +2154,7 @@ dependencies: []
|
|
1932
2154
|
c1 = new_spec "c", "1", nil, "lib/d.rb"
|
1933
2155
|
c2 = new_spec("c", "2", { "a" => "1" }, "lib/d.rb") # conflicts with a-2
|
1934
2156
|
|
1935
|
-
install_specs
|
2157
|
+
install_specs c1, b1, a1, a2, c2, b2
|
1936
2158
|
|
1937
2159
|
a1.activate
|
1938
2160
|
c1.activate
|
@@ -2014,6 +2236,19 @@ dependencies: []
|
|
2014
2236
|
assert_equal ['test/suite.rb'], @a1.test_files
|
2015
2237
|
end
|
2016
2238
|
|
2239
|
+
def test_runtime_predicate_true
|
2240
|
+
@a2.add_runtime_dependency 'b', '1'
|
2241
|
+
assert_predicate @a2.dependencies.first, :runtime?
|
2242
|
+
|
2243
|
+
@a2.dependencies.first.instance_variable_set :@type, nil
|
2244
|
+
assert_predicate @a2.dependencies.first, :runtime?
|
2245
|
+
end
|
2246
|
+
|
2247
|
+
def test_runtime_predicate_false
|
2248
|
+
@a2.add_development_dependency 'b', '1'
|
2249
|
+
refute_predicate @a2.dependencies.first, :runtime?
|
2250
|
+
end
|
2251
|
+
|
2017
2252
|
def test_to_ruby
|
2018
2253
|
@a2.add_runtime_dependency 'b', '1'
|
2019
2254
|
@a2.dependencies.first.instance_variable_set :@type, nil
|
@@ -2377,12 +2612,14 @@ end
|
|
2377
2612
|
end
|
2378
2613
|
end
|
2379
2614
|
|
2380
|
-
def
|
2615
|
+
def test_validate_dependencies_duplicates
|
2381
2616
|
util_setup_validate
|
2382
2617
|
|
2383
2618
|
Dir.chdir @tempdir do
|
2384
2619
|
@a1.add_runtime_dependency 'b', '~> 1.2'
|
2385
2620
|
@a1.add_runtime_dependency 'b', '>= 1.2.3'
|
2621
|
+
@a1.add_development_dependency 'c', '~> 1.2'
|
2622
|
+
@a1.add_development_dependency 'c', '>= 1.2.3'
|
2386
2623
|
|
2387
2624
|
use_ui @ui do
|
2388
2625
|
e = assert_raises Gem::InvalidSpecificationException do
|
@@ -2392,6 +2629,8 @@ end
|
|
2392
2629
|
expected = <<-EXPECTED
|
2393
2630
|
duplicate dependency on b (>= 1.2.3), (~> 1.2) use:
|
2394
2631
|
add_runtime_dependency 'b', '>= 1.2.3', '~> 1.2'
|
2632
|
+
duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
|
2633
|
+
add_development_dependency 'c', '>= 1.2.3', '~> 1.2'
|
2395
2634
|
EXPECTED
|
2396
2635
|
|
2397
2636
|
assert_equal expected, e.message
|
@@ -2403,6 +2642,21 @@ duplicate dependency on b (>= 1.2.3), (~> 1.2) use:
|
|
2403
2642
|
end
|
2404
2643
|
end
|
2405
2644
|
|
2645
|
+
def test_validate_dependencies_allowed_duplicates
|
2646
|
+
util_setup_validate
|
2647
|
+
|
2648
|
+
Dir.chdir @tempdir do
|
2649
|
+
@a1.add_runtime_dependency 'b', '~> 1.2'
|
2650
|
+
@a1.add_development_dependency 'b', '= 1.2.3'
|
2651
|
+
|
2652
|
+
use_ui @ui do
|
2653
|
+
@a1.validate
|
2654
|
+
end
|
2655
|
+
|
2656
|
+
assert_equal '', @ui.error, 'warning'
|
2657
|
+
end
|
2658
|
+
end
|
2659
|
+
|
2406
2660
|
def test_validate_description
|
2407
2661
|
util_setup_validate
|
2408
2662
|
|
@@ -2413,8 +2667,6 @@ duplicate dependency on b (>= 1.2.3), (~> 1.2) use:
|
|
2413
2667
|
@a1.validate
|
2414
2668
|
end
|
2415
2669
|
|
2416
|
-
assert_match "#{w}: no description specified\n", @ui.error, "error"
|
2417
|
-
|
2418
2670
|
@ui = Gem::MockGemUi.new
|
2419
2671
|
@a1.summary = "this is my summary"
|
2420
2672
|
@a1.description = @a1.summary
|
@@ -2535,13 +2787,13 @@ duplicate dependency on b (>= 1.2.3), (~> 1.2) use:
|
|
2535
2787
|
@a1.extensions << 'ext/a/extconf.rb'
|
2536
2788
|
|
2537
2789
|
Dir.chdir @tempdir do
|
2538
|
-
FileUtils.ln_s '/
|
2790
|
+
FileUtils.ln_s 'lib/code.rb', 'lib2' unless vc_windows?
|
2539
2791
|
|
2540
|
-
|
2792
|
+
use_ui @ui do
|
2541
2793
|
@a1.validate
|
2542
2794
|
end
|
2543
2795
|
|
2544
|
-
|
2796
|
+
assert_match 'WARNING: lib2 is a symlink, which is not supported on all platforms', @ui.error
|
2545
2797
|
end
|
2546
2798
|
|
2547
2799
|
assert_equal %w[bin/exec ext/a/extconf.rb lib/code.rb lib2 test/suite.rb].sort,
|
@@ -2603,8 +2855,22 @@ duplicate dependency on b (>= 1.2.3), (~> 1.2) use:
|
|
2603
2855
|
end
|
2604
2856
|
|
2605
2857
|
assert_match <<-warning, @ui.error
|
2606
|
-
WARNING: licenses is empty, but is recommended. Use a license
|
2607
|
-
http://
|
2858
|
+
WARNING: licenses is empty, but is recommended. Use a license identifier from
|
2859
|
+
http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
|
2860
|
+
warning
|
2861
|
+
end
|
2862
|
+
|
2863
|
+
def test_validate_license_values
|
2864
|
+
util_setup_validate
|
2865
|
+
|
2866
|
+
use_ui @ui do
|
2867
|
+
@a1.licenses = ['BSD']
|
2868
|
+
@a1.validate
|
2869
|
+
end
|
2870
|
+
|
2871
|
+
assert_match <<-warning, @ui.error
|
2872
|
+
WARNING: license value 'BSD' is invalid. Use a license identifier from
|
2873
|
+
http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
|
2608
2874
|
warning
|
2609
2875
|
end
|
2610
2876
|
|
@@ -2658,6 +2924,20 @@ http://opensource.org/licenses/alphabetical
|
|
2658
2924
|
end
|
2659
2925
|
end
|
2660
2926
|
|
2927
|
+
def test_validate_permissions_of_missing_file_non_packaging
|
2928
|
+
skip 'chmod not supported' if Gem.win_platform?
|
2929
|
+
|
2930
|
+
util_setup_validate
|
2931
|
+
|
2932
|
+
Dir.chdir @tempdir do
|
2933
|
+
File.delete File.join('lib', 'code.rb')
|
2934
|
+
|
2935
|
+
use_ui @ui do
|
2936
|
+
assert @a1.validate(false)
|
2937
|
+
end
|
2938
|
+
end
|
2939
|
+
end
|
2940
|
+
|
2661
2941
|
def test_validate_platform_legacy
|
2662
2942
|
util_setup_validate
|
2663
2943
|
|
@@ -2994,7 +3274,8 @@ end
|
|
2994
3274
|
end
|
2995
3275
|
|
2996
3276
|
def test_find_by_name
|
2997
|
-
util_spec "a"
|
3277
|
+
install_specs util_spec "a"
|
3278
|
+
install_specs util_spec "a", 1
|
2998
3279
|
|
2999
3280
|
assert Gem::Specification.find_by_name "a"
|
3000
3281
|
assert Gem::Specification.find_by_name "a", "1"
|
@@ -3010,6 +3291,8 @@ end
|
|
3010
3291
|
|
3011
3292
|
b.activate
|
3012
3293
|
|
3294
|
+
install_specs b
|
3295
|
+
|
3013
3296
|
assert Gem::Specification.find_by_name "b"
|
3014
3297
|
|
3015
3298
|
assert_raises Gem::LoadError do
|