Bug #12248 ยป 65ab980dbc13d1b8e95b7d1f7266406720718c24.patch
| lib/rubygems/core_ext/kernel_require.rb | ||
|---|---|---|
|     begin | ||
|       RUBYGEMS_ACTIVATION_MONITOR.exit | ||
|       return gem_original_require(spec.to_fullpath(path) || path) | ||
|       return gem_original_require(path) | ||
|     end if spec | ||
|     # Attempt to find +path+ in any unresolved gems... | ||
| test/rubygems/test_require.rb | ||
|---|---|---|
|     end | ||
|   end | ||
|   # Providing -I on the commandline should always beat gems | ||
|   def test_dash_i_beats_gems | ||
|     a1 = new_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb" | ||
|     b1 = new_spec "b", "1", {"c" => "> 0"}, "lib/b/c.rb" | ||
|     c1 = new_spec "c", "1", nil, "lib/c/c.rb" | ||
|     c2 = new_spec "c", "2", nil, "lib/c/c.rb" | ||
|     install_specs c1, c2, b1, a1 | ||
|     dir = Dir.mktmpdir | ||
|     dash_i_arg = File.join Dir.mktmpdir, 'lib' | ||
|     c_rb = File.join dash_i_arg, 'b', 'c.rb' | ||
|     FileUtils.mkdir_p File.dirname c_rb | ||
|     File.open(c_rb, 'w') { |f| f.write "class Object; HELLO = 'world' end" } | ||
|     lp = $LOAD_PATH.dup | ||
|     # Pretend to provide a commandline argument that overrides a file in gem b | ||
|     $LOAD_PATH.unshift dash_i_arg | ||
|     assert_require 'test_gem_require_a' | ||
|     assert_require 'b/c' # this should be required from -I | ||
|     assert_equal "world", ::Object::HELLO | ||
|   ensure | ||
|     $LOAD_PATH.replace lp | ||
|     Object.send :remove_const, :HELLO if Object.const_defined? :HELLO | ||
|   end | ||
|   def test_concurrent_require | ||
|     Object.const_set :FILE_ENTERED_LATCH, Latch.new(2) | ||
|     Object.const_set :FILE_EXIT_LATCH, Latch.new(1) | ||