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
|
# frozen_string_literal: true
require_relative "helper"
class TestGemKernel < Gem::TestCase
def setup
super
util_make_gems
without_any_upwards_gemfiles
end
def test_gem
assert gem("a", "= 1"), "Should load"
assert $:.any? {|p| p.include?("a-1/lib") }
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_raise 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, $:.count {|p| p.include?("a-1/lib") }
end
def test_gem_overlapping
assert gem("a", "= 1"), "Should load"
refute gem("a", ">= 1"), "Should not load"
assert_equal 1, $:.count {|p| p.include?("a-1/lib") }
end
def test_gem_prerelease_is_the_only_available
quick_gem "d", "1.1.a"
assert gem("d", ">= 1"), "release requirement may load prerelease when sole option"
assert $:.one? {|p| p.include?("/d-1.1.a/lib") }
end
def test_release_favored_over_prerelease
quick_gem "d", "1.1.a"
quick_gem "d", "1.2"
gem("d", ">= 1")
refute $:.any? {|p| p.include?("/d-1.1.a/lib") }
assert $:.one? {|p| p.include?("/d-1.2/lib") }
end
def test_gem_env_req
ENV["GEM_REQUIREMENT_A"] = "~> 2.0"
assert_raise(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_raise 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| p.include?("a-1/lib") }
refute $:.any? {|p| p.include?("a-2/lib") }
end
def test_gem_not_adding_bin
assert gem("a", "= 1"), "Should load"
refute $:.any? {|p| p.include?("a-1/bin") }
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| p.include?("bundler-1/lib") }
end
def test_gem_bundler_inferred_bundler_version
require "rubygems/bundler_version_finder"
Gem::BundlerVersionFinder.stub(:bundler_version, Gem::Version.new("1")) do
quick_gem "bundler", "1"
quick_gem "bundler", "2.a"
assert gem("bundler", ">= 0.a")
assert $:.any? {|p| p.include?("bundler-1/lib") }
end
end
end
|