summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/rubygems/test_gem.rb')
-rw-r--r--test/rubygems/test_gem.rb78
1 files changed, 78 insertions, 0 deletions
diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb
index 68e3eccdaf..1c6d790b25 100644
--- a/test/rubygems/test_gem.rb
+++ b/test/rubygems/test_gem.rb
@@ -297,6 +297,58 @@ class TestGem < Gem::TestCase
assert_equal %w[a-1 b-2 c-1], loaded_spec_names
end
+ def test_activate_bin_path_does_not_error_if_a_gem_thats_not_finally_activated_has_orphaned_dependencies
+ a1 = util_spec 'a', '1' do |s|
+ s.executables = ['exec']
+ s.add_dependency 'b'
+ end
+
+ b1 = util_spec 'b', '1' do |s|
+ s.add_dependency 'c', '1'
+ end
+
+ b2 = util_spec 'b', '2' do |s|
+ s.add_dependency 'c', '2'
+ end
+
+ c2 = util_spec 'c', '2'
+
+ install_specs c2, b1, b2, a1
+
+ # c1 is missing, but not needed for activation, so we should not get any errors here
+
+ Gem.activate_bin_path("a", "exec", ">= 0")
+
+ assert_equal %w[a-1 b-2 c-2], loaded_spec_names
+ end
+
+ def test_activate_bin_path_raises_a_meaningful_error_if_a_gem_thats_finally_activated_has_orphaned_dependencies
+ a1 = util_spec 'a', '1' do |s|
+ s.executables = ['exec']
+ s.add_dependency 'b'
+ end
+
+ b1 = util_spec 'b', '1' do |s|
+ s.add_dependency 'c', '1'
+ end
+
+ b2 = util_spec 'b', '2' do |s|
+ s.add_dependency 'c', '2'
+ end
+
+ c1 = util_spec 'c', '1'
+
+ install_specs c1, b1, b2, a1
+
+ # c2 is missing, and b2 which has it as a dependency will be activated, so we should get an error about the orphaned dependency
+
+ e = assert_raises Gem::UnsatisfiableDependencyError do
+ load Gem.activate_bin_path("a", "exec", ">= 0")
+ end
+
+ assert_equal "Unable to resolve dependency: 'b (>= 0)' requires 'c (= 2)'", e.message
+ end
+
def test_activate_bin_path_in_debug_mode
a1 = util_spec 'a', '1' do |s|
s.executables = ['exec']
@@ -416,6 +468,32 @@ class TestGem < Gem::TestCase
assert_equal %w[bundler-1.17.3], loaded_spec_names
end
+ def test_activate_bin_path_gives_proper_error_for_bundler_when_underscore_selection_given
+ File.open("Gemfile.lock", "w") do |f|
+ f.write <<-L.gsub(/ {8}/, "")
+ GEM
+ remote: https://rubygems.org/
+ specs:
+
+ PLATFORMS
+ ruby
+
+ DEPENDENCIES
+
+ BUNDLED WITH
+ 2.1.4
+ L
+ end
+
+ File.open("Gemfile", "w") {|f| f.puts('source "https://rubygems.org"') }
+
+ e = assert_raises Gem::GemNotFoundException do
+ load Gem.activate_bin_path("bundler", "bundle", "= 2.2.8")
+ end
+
+ assert_equal "can't find gem bundler (= 2.2.8) with executable bundle", e.message
+ end
+
def test_self_bin_path_no_exec_name
e = assert_raises ArgumentError do
Gem.bin_path 'a'