diff options
-rw-r--r-- | lib/rubygems/core_ext/kernel_require.rb | 2 | ||||
-rw-r--r-- | test/rubygems/test_require.rb | 27 |
2 files changed, 28 insertions, 1 deletions
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb index 115ae0cb50..faf9886d78 100644 --- a/lib/rubygems/core_ext/kernel_require.rb +++ b/lib/rubygems/core_ext/kernel_require.rb @@ -148,7 +148,7 @@ module Kernel RUBYGEMS_ACTIVATION_MONITOR.enter begin - if load_error.message.end_with?(path) and Gem.try_activate(path) + if load_error.path == path and Gem.try_activate(path) require_again = true end ensure diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb index 2b11e26dfe..d1767cb4a6 100644 --- a/test/rubygems/test_require.rb +++ b/test/rubygems/test_require.rb @@ -509,6 +509,33 @@ class TestGemRequire < Gem::TestCase assert_equal %w[default-3.0], loaded_spec_names end + def test_normal_gems_with_overridden_load_error_message + normal_gem_spec = util_spec("normal", "3.0", nil, "lib/normal/gem.rb") + + install_specs(normal_gem_spec) + + File.write("require_with_overridden_load_error_message.rb", <<-RUBY) + LoadError.class_eval do + def message + "Overridden message" + end + end + + require 'normal/gem' + RUBY + + require "open3" + + output, exit_status = Open3.capture2e( + { "GEM_HOME" => Gem.paths.home }, + *ruby_with_rubygems_in_load_path, + "-r", + "./require_with_overridden_load_error_message.rb" + ) + + assert exit_status.success?, "Require failed due to #{output}" + end + def test_default_gem_prerelease default_gem_spec = new_default_spec("default", "2.0.0", nil, "default/gem.rb") |