1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
# frozen_string_literal: true
require 'rubygems/test_case'
class TestKernel < Gem::TestCase
def setup
super
@old_path = $:.dup
util_make_gems
end
def teardown
super
$:.replace @old_path
end
def test_gem
assert gem('a', '= 1'), "Should load"
assert $:.any? {|p| %r{a-1/lib} =~ p }
end
def test_gem_default
assert gem('a', '>= 0')
assert_equal @a2, Gem.loaded_specs['a']
end
def test_gem_default_re_gem
assert gem('a', '=1')
refute gem('a', '>= 0')
assert_equal @a1, Gem.loaded_specs['a']
end
def test_gem_re_gem_mismatch
assert gem('a', '=1')
assert_raises Gem::LoadError do
gem('a', '= 2')
end
assert_equal @a1, Gem.loaded_specs['a']
end
def test_gem_redundant
assert gem('a', '= 1'), "Should load"
refute gem('a', '= 1'), "Should not load"
assert_equal 1, $:.select {|p| %r{a-1/lib} =~ p }.size
end
def test_gem_overlapping
assert gem('a', '= 1'), "Should load"
refute gem('a', '>= 1'), "Should not load"
assert_equal 1, $:.select {|p| %r{a-1/lib} =~ p }.size
end
def test_gem_prerelease
quick_gem 'd', '1.1.a'
refute gem('d', '>= 1'), 'release requirement must not load prerelease'
assert gem('d', '>= 1.a'), 'prerelease requirement may load prerelease'
end
def test_gem_env_req
ENV["GEM_REQUIREMENT_A"] = '~> 2.0'
assert_raises(Gem::MissingSpecVersionError) { gem('a', '= 1') }
assert gem('a', '> 1')
assert_equal @a2, Gem.loaded_specs['a']
end
def test_gem_conflicting
assert gem('a', '= 1'), "Should load"
ex = assert_raises Gem::LoadError do
gem 'a', '= 2'
end
assert_equal "can't activate a-2, already activated a-1", ex.message
assert_match(/activated a-1/, ex.message)
assert_equal 'a', ex.name
assert $:.any? {|p| %r{a-1/lib} =~ p }
refute $:.any? {|p| %r{a-2/lib} =~ p }
end
def test_gem_not_adding_bin
assert gem('a', '= 1'), "Should load"
refute $:.any? {|p| %r{a-1/bin} =~ p }
end
def test_gem_failing_inside_require_doesnt_cause_double_exceptions
File.write("activate.rb", "gem('a', '= 999')\n")
require "open3"
output, _ = Open3.capture2e(
{ "GEM_HOME" => Gem.paths.home },
*ruby_with_rubygems_in_load_path,
"-r",
"./activate.rb"
)
load_errors = output.split("\n").select {|line| line.include?("Could not find") }
assert_equal 1, load_errors.size
end
def test_gem_bundler
quick_gem 'bundler', '1'
quick_gem 'bundler', '2.a'
assert gem('bundler')
assert $:.any? {|p| %r{bundler-1/lib} =~ p }
end
def test_gem_bundler_missing_bundler_version
Gem::BundlerVersionFinder.stub(:bundler_version_with_reason, ["55", "reason"]) do
quick_gem 'bundler', '1'
quick_gem 'bundler', '2.a'
e = assert_raises Gem::MissingSpecVersionError do
gem('bundler')
end
assert_match "Could not find 'bundler' (55) required by reason.", e.message
end
end
def test_gem_bundler_inferred_bundler_version
Gem::BundlerVersionFinder.stub(:bundler_version_with_reason, ["1", "reason"]) do
quick_gem 'bundler', '1'
quick_gem 'bundler', '2.a'
assert gem('bundler', '>= 0.a')
assert $:.any? {|p| %r{bundler-1/lib} =~ p }
end
end
end
|