summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authornagachika <nagachika@ruby-lang.org>2021-01-30 20:43:44 +0900
committernagachika <nagachika@ruby-lang.org>2021-01-30 20:43:44 +0900
commit99b4f20fd65075d2d9ee02f8c7a6b5d6a914ce31 (patch)
tree873aba7eced9f3ec7938c2ef4efe1dff8f171b40 /test
parentd0693391103672b7fc3976e5ae8ae414059b3e97 (diff)
Merge RubyGems-3.1.6 [Bug #16926]
https://github.com/ruby/ruby/pull/4122
Diffstat (limited to 'test')
-rw-r--r--test/rubygems/test_bundled_ca.rb1
-rw-r--r--test/rubygems/test_kernel.rb19
-rw-r--r--test/rubygems/test_require.rb104
3 files changed, 124 insertions, 0 deletions
diff --git a/test/rubygems/test_bundled_ca.rb b/test/rubygems/test_bundled_ca.rb
index 9538d6b898..4224755562 100644
--- a/test/rubygems/test_bundled_ca.rb
+++ b/test/rubygems/test_bundled_ca.rb
@@ -62,5 +62,6 @@ if ENV["CI"] || ENV["TEST_SSL"]
def test_accessing_new_index
assert_https('index.rubygems.org')
end
+
end
end
diff --git a/test/rubygems/test_kernel.rb b/test/rubygems/test_kernel.rb
index b9f9b5e254..daf9b57d7c 100644
--- a/test/rubygems/test_kernel.rb
+++ b/test/rubygems/test_kernel.rb
@@ -91,6 +91,25 @@ class TestKernel < Gem::TestCase
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 },
+ Gem.ruby,
+ "-I",
+ File.expand_path("../../lib", __dir__),
+ "-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'
diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb
index aa2675af5d..392ede7ba0 100644
--- a/test/rubygems/test_require.rb
+++ b/test/rubygems/test_require.rb
@@ -45,6 +45,35 @@ class TestGemRequire < Gem::TestCase
refute require(path), "'#{path}' was not yet required"
end
+ def test_respect_loaded_features_caching_like_standard_require
+ dir = Dir.mktmpdir("test_require", @tempdir)
+
+ lp1 = File.join dir, 'foo1'
+ foo1 = File.join lp1, 'foo.rb'
+
+ FileUtils.mkdir_p lp1
+ File.open(foo1, 'w') { |f| f.write "class Object; HELLO = 'foo1' end" }
+
+ lp = $LOAD_PATH.dup
+
+ $LOAD_PATH.unshift lp1
+ assert_require 'foo'
+ assert_equal "foo1", ::Object::HELLO
+
+ lp2 = File.join dir, 'foo2'
+ foo2 = File.join lp2, 'foo.rb'
+
+ FileUtils.mkdir_p lp2
+ File.open(foo2, 'w') { |f| f.write "class Object; HELLO = 'foo2' end" }
+
+ $LOAD_PATH.unshift lp2
+ refute_require 'foo'
+ assert_equal "foo1", ::Object::HELLO
+ ensure
+ $LOAD_PATH.replace lp
+ Object.send :remove_const, :HELLO if Object.const_defined? :HELLO
+ end
+
# Providing -I on the commandline should always beat gems
def test_dash_i_beats_gems
a1 = util_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb"
@@ -120,6 +149,24 @@ class TestGemRequire < Gem::TestCase
Object.send :remove_const, :HELLO if Object.const_defined? :HELLO
end
+ def test_dash_i_respects_default_library_extension_priority
+ skip "extensions don't quite work on jruby" if Gem.java_platform?
+
+ dash_i_ext_arg = util_install_extension_file('a')
+ dash_i_lib_arg = util_install_ruby_file('a')
+
+ lp = $LOAD_PATH.dup
+
+ begin
+ $LOAD_PATH.unshift dash_i_lib_arg
+ $LOAD_PATH.unshift dash_i_ext_arg
+ assert_require 'a'
+ assert_match(/a\.rb$/, $LOADED_FEATURES.last)
+ ensure
+ $LOAD_PATH.replace lp
+ end
+ end
+
def test_concurrent_require
Object.const_set :FILE_ENTERED_LATCH, Latch.new(2)
Object.const_set :FILE_EXIT_LATCH, Latch.new(1)
@@ -364,6 +411,17 @@ class TestGemRequire < Gem::TestCase
assert_equal 0, times_called
end
+ def test_second_gem_require_does_not_resolve_path_manually_before_going_through_standard_require
+ a1 = util_spec "a", "1", nil, "lib/test_gem_require_a.rb"
+ install_gem a1
+
+ assert_require "test_gem_require_a"
+
+ stub(:gem_original_require, ->(path) { assert_equal "test_gem_require_a", path }) do
+ require "test_gem_require_a"
+ end
+ end
+
def test_realworld_default_gem
testing_ruby_repo = !ENV["GEM_COMMAND"].nil?
skip "this test can't work under ruby-core setup" if testing_ruby_repo || java_platform?
@@ -539,4 +597,50 @@ class TestGemRequire < Gem::TestCase
$VERBOSE = old_verbose
end
+ def util_install_extension_file(name)
+ spec = quick_gem name
+ util_build_gem spec
+
+ spec.extensions << "extconf.rb"
+ write_file File.join(@tempdir, "extconf.rb") do |io|
+ io.write <<-RUBY
+ require "mkmf"
+ CONFIG['LDSHARED'] = '$(TOUCH) $@ ||'
+ create_makefile("#{name}")
+ RUBY
+ end
+
+ write_file File.join(@tempdir, "#{name}.c") do |io|
+ io.write <<-C
+ void Init_#{name}() { }
+ C
+ end
+
+ write_file File.join(@tempdir, "depend")
+
+ spec.files += ["extconf.rb", "depend", "#{name}.c"]
+
+ so = File.join(spec.gem_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}")
+ refute_path_exists so
+
+ path = Gem::Package.build spec
+ installer = Gem::Installer.at path
+ installer.install
+ assert_path_exists so
+
+ spec.gem_dir
+ end
+
+ def util_install_ruby_file(name)
+ dir_lib = Dir.mktmpdir("test_require_lib", @tempdir)
+ dash_i_lib_arg = File.join dir_lib
+
+ a_rb = File.join dash_i_lib_arg, "#{name}.rb"
+
+ FileUtils.mkdir_p File.dirname a_rb
+ File.open(a_rb, 'w') { |f| f.write "# #{name}.rb" }
+
+ dash_i_lib_arg
+ end
+
end