From 1ed0212bcf76ec244ca5b75c65f09e5b04158377 Mon Sep 17 00:00:00 2001 From: Kazuhiro NISHIYAMA Date: Tue, 10 Dec 2019 18:31:01 +0900 Subject: Do not load files in build directory related https://bugs.ruby-lang.org/issues/16177 --- .github/workflows/ubuntu.yml | 4 ++ test/ruby/test_autoload.rb | 36 ++++++------- test/ruby/test_require.rb | 6 +-- test/rubygems/test_gem.rb | 4 +- test/rubygems/test_gem_specification.rb | 96 ++++++++++++++++----------------- test/rubygems/test_require.rb | 18 +++---- 6 files changed, 84 insertions(+), 80 deletions(-) diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index fd3fdf7d53..8e4cff84c2 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -87,6 +87,10 @@ jobs: - name: Extract gems run: make -C build update-gems extract-gems if: matrix.test_task == 'check' + - name: Create dummy files in build dir + run: | + cd build + ./miniruby -e '(("a".."z").to_a+%w[foo bar test zzz]).each{|basename|File.write("#{basename}.rb", "raise %(do not load #{basename}.rb)")}' - name: Tests run: make -C build $JOBS -s ${{ matrix.test_task }} env: diff --git a/test/ruby/test_autoload.rb b/test/ruby/test_autoload.rb index e9e13eef96..2e53c9203d 100644 --- a/test/ruby/test_autoload.rb +++ b/test/ruby/test_autoload.rb @@ -76,12 +76,12 @@ p Foo::Bar eval <<-END class ::Object module A - autoload :C, 'b' + autoload :C, 'test-ruby-core-69206' end end END - File.open('b.rb', 'w') {|file| file.puts 'module A; class C; end; end'} + File.write("test-ruby-core-69206.rb", 'module A; class C; end; end') assert_kind_of Class, ::A::C end } @@ -257,7 +257,7 @@ p Foo::Bar def test_autoload_private_constant Dir.mktmpdir('autoload') do |tmpdir| - File.write(tmpdir+"/zzz.rb", "#{<<~"begin;"}\n#{<<~'end;'}") + File.write(tmpdir+"/test-bug-14469.rb", "#{<<~"begin;"}\n#{<<~'end;'}") begin; class AutoloadTest ZZZ = :ZZZ @@ -268,7 +268,7 @@ p Foo::Bar bug = '[ruby-core:85516] [Bug #14469]' begin; class AutoloadTest - autoload :ZZZ, "zzz.rb" + autoload :ZZZ, "test-bug-14469.rb" end assert_raise(NameError, bug) {AutoloadTest::ZZZ} end; @@ -277,7 +277,7 @@ p Foo::Bar def test_autoload_deprecate_constant Dir.mktmpdir('autoload') do |tmpdir| - File.write(tmpdir+"/zzz.rb", "#{<<~"begin;"}\n#{<<~'end;'}") + File.write(tmpdir+"/test-bug-14469.rb", "#{<<~"begin;"}\n#{<<~'end;'}") begin; class AutoloadTest ZZZ = :ZZZ @@ -288,7 +288,7 @@ p Foo::Bar bug = '[ruby-core:85516] [Bug #14469]' begin; class AutoloadTest - autoload :ZZZ, "zzz.rb" + autoload :ZZZ, "test-bug-14469.rb" end assert_warning(/ZZZ is deprecated/, bug) {AutoloadTest::ZZZ} end; @@ -297,7 +297,7 @@ p Foo::Bar def test_autoload_private_constant_before_autoload Dir.mktmpdir('autoload') do |tmpdir| - File.write(tmpdir+"/zzz.rb", "#{<<~"begin;"}\n#{<<~'end;'}") + File.write(tmpdir+"/test-bug-11055.rb", "#{<<~"begin;"}\n#{<<~'end;'}") begin; class AutoloadTest ZZZ = :ZZZ @@ -307,7 +307,7 @@ p Foo::Bar bug = '[Bug #11055]' begin; class AutoloadTest - autoload :ZZZ, "zzz.rb" + autoload :ZZZ, "test-bug-11055.rb" private_constant :ZZZ ZZZ end @@ -317,7 +317,7 @@ p Foo::Bar bug = '[Bug #11055]' begin; class AutoloadTest - autoload :ZZZ, "zzz.rb" + autoload :ZZZ, "test-bug-11055.rb" private_constant :ZZZ end assert_raise(NameError, bug) {AutoloadTest::ZZZ} @@ -327,7 +327,7 @@ p Foo::Bar def test_autoload_deprecate_constant_before_autoload Dir.mktmpdir('autoload') do |tmpdir| - File.write(tmpdir+"/zzz.rb", "#{<<~"begin;"}\n#{<<~'end;'}") + File.write(tmpdir+"/test-bug-11055.rb", "#{<<~"begin;"}\n#{<<~'end;'}") begin; class AutoloadTest ZZZ = :ZZZ @@ -337,7 +337,7 @@ p Foo::Bar bug = '[Bug #11055]' begin; class AutoloadTest - autoload :ZZZ, "zzz.rb" + autoload :ZZZ, "test-bug-11055.rb" deprecate_constant :ZZZ end assert_warning(/ZZZ is deprecated/, bug) {class AutoloadTest; ZZZ; end} @@ -347,7 +347,7 @@ p Foo::Bar bug = '[Bug #11055]' begin; class AutoloadTest - autoload :ZZZ, "zzz.rb" + autoload :ZZZ, "test-bug-11055.rb" deprecate_constant :ZZZ end assert_warning(/ZZZ is deprecated/, bug) {AutoloadTest::ZZZ} @@ -383,7 +383,7 @@ p Foo::Bar def test_autoload_same_file Dir.mktmpdir('autoload') do |tmpdir| - File.write("#{tmpdir}/bug14742.rb", "#{<<~'begin;'}\n#{<<~'end;'}") + File.write("#{tmpdir}/test-bug-14742.rb", "#{<<~'begin;'}\n#{<<~'end;'}") begin; module Foo; end module Bar; end @@ -391,8 +391,8 @@ p Foo::Bar 3.times do # timing-dependent, needs a few times to hit [Bug #14742] assert_separately(%W[-I #{tmpdir}], "#{<<-'begin;'}\n#{<<-'end;'}") begin; - autoload :Foo, 'bug14742' - autoload :Bar, 'bug14742' + autoload :Foo, 'test-bug-14742' + autoload :Bar, 'test-bug-14742' t1 = Thread.new do Foo end t2 = Thread.new do Bar end t1.join @@ -407,15 +407,15 @@ p Foo::Bar def test_autoload_same_file_with_raise Dir.mktmpdir('autoload') do |tmpdir| - File.write("#{tmpdir}/bug16177.rb", "#{<<~'begin;'}\n#{<<~'end;'}") + File.write("#{tmpdir}/test-bug-16177.rb", "#{<<~'begin;'}\n#{<<~'end;'}") begin; raise '[ruby-core:95055] [Bug #16177]' end; assert_raise(RuntimeError, '[ruby-core:95055] [Bug #16177]') do assert_separately(%W[-I #{tmpdir}], "#{<<-'begin;'}\n#{<<-'end;'}") begin; - autoload :Foo, 'bug16177' - autoload :Bar, 'bug16177' + autoload :Foo, 'test-bug-16177' + autoload :Bar, 'test-bug-16177' t1 = Thread.new do Foo end t2 = Thread.new do Bar end t1.join diff --git a/test/ruby/test_require.rb b/test/ruby/test_require.rb index e310ac7c70..05dc18cd17 100644 --- a/test/ruby/test_require.rb +++ b/test/ruby/test_require.rb @@ -818,9 +818,9 @@ class TestRequire < Test::Unit::TestCase rescue NotImplementedError, Errno::EACCES skip "File.symlink is not implemented" end - File.write(File.join(tmp, "real/a.rb"), "print __FILE__") - result = IO.popen([EnvUtil.rubybin, "-I#{tmp}/symlink", "-e", "require 'a.rb'"], &:read) - assert_operator(result, :end_with?, "/real/a.rb") + File.write(File.join(tmp, "real/test_symlink_load_path.rb"), "print __FILE__") + result = IO.popen([EnvUtil.rubybin, "-I#{tmp}/symlink", "-e", "require 'test_symlink_load_path.rb'"], &:read) + assert_operator(result, :end_with?, "/real/test_symlink_load_path.rb") } end diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index 859aba6588..47ef8a3a0b 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb @@ -1388,7 +1388,7 @@ class TestGem < Gem::TestCase a = util_spec "a", "1" b = util_spec "b", "1", "c" => nil c = util_spec "c", "2" - d = util_spec "d", "1", {'e' => '= 1'}, "lib/d.rb" + d = util_spec "d", "1", {'e' => '= 1'}, "lib/d#{$$}.rb" e = util_spec "e", "1" install_specs a, c, b, e, d @@ -1397,7 +1397,7 @@ class TestGem < Gem::TestCase r.gem "a" r.gem "b", "= 1" - require 'd' + require "d#{$$}" end assert_equal %w!a-1 b-1 c-2 d-1 e-1!, loaded_spec_names diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb index 8f345f87a2..dbd45a31fd 100644 --- a/test/rubygems/test_gem_specification.rb +++ b/test/rubygems/test_gem_specification.rb @@ -126,8 +126,8 @@ end def test_self_activate_ambiguous_direct save_loaded_features do a1 = util_spec "a", "1", "b" => "> 0" - b1 = util_spec("b", "1", { "c" => ">= 1" }, "lib/d.rb") - b2 = util_spec("b", "2", { "c" => ">= 2" }, "lib/d.rb") + b1 = util_spec("b", "1", { "c" => ">= 1" }, "lib/d#{$$}.rb") + b2 = util_spec("b", "2", { "c" => ">= 2" }, "lib/d#{$$}.rb") c1 = util_spec "c", "1" c2 = util_spec "c", "2" @@ -138,7 +138,7 @@ end assert_equal %w(a-1), loaded_spec_names assert_equal ["b (> 0)"], unresolved_names - require "d" + require "d#{$$}" assert_equal %w(a-1 b-2 c-2), loaded_spec_names assert_equal [], unresolved_names @@ -176,8 +176,8 @@ end a1 = util_spec "a", "1", "b" => "> 0" b1 = util_spec "b", "1", "c" => ">= 1" b2 = util_spec "b", "2", "c" => ">= 2" - c1 = util_spec "c", "1", nil, "lib/d.rb" - c2 = util_spec "c", "2", nil, "lib/d.rb" + c1 = util_spec "c", "1", nil, "lib/d#{$$}.rb" + c2 = util_spec "c", "2", nil, "lib/d#{$$}.rb" install_specs c1, c2, b1, b2, a1 @@ -185,7 +185,7 @@ end assert_equal %w(a-1), loaded_spec_names assert_equal ["b (> 0)"], unresolved_names - require "d" + require "d#{$$}" assert_equal %w(a-1 b-2 c-2), loaded_spec_names assert_equal [], unresolved_names @@ -198,8 +198,8 @@ end a2 = util_spec "a", "2", "b" => "> 0" b1 = util_spec "b", "1", "c" => ">= 1" b2 = util_spec "b", "2", "c" => ">= 2" - c1 = util_spec "c", "1", nil, "lib/d.rb" - c2 = util_spec("c", "2", { "a" => "1" }, "lib/d.rb") # conflicts with a-2 + c1 = util_spec "c", "1", nil, "lib/d#{$$}.rb" + c2 = util_spec("c", "2", { "a" => "1" }, "lib/d#{$$}.rb") # conflicts with a-2 install_specs c1, b1, a1, a2, c2, b2 @@ -207,7 +207,7 @@ end assert_equal %w(a-2), loaded_spec_names assert_equal ["b (> 0)"], unresolved_names - require "d" + require "d#{$$}" assert_equal %w(a-2 b-1 c-1), loaded_spec_names assert_equal [], unresolved_names @@ -221,7 +221,7 @@ end b2 = util_spec "b", "2", "c" => ">= 2" c1 = util_spec "c", "1" c2 = util_spec "c", "2" - d1 = util_spec "d", "1", nil, "lib/d.rb" + d1 = util_spec "d", "1", nil, "lib/d#{$$}.rb" install_specs d1, c1, c2, b1, b2, a1 @@ -229,7 +229,7 @@ end assert_equal %w(a-1), loaded_spec_names assert_equal ["b (> 0)"], unresolved_names - require "d" + require "d#{$$}" assert_equal %w(a-1 d-1), loaded_spec_names assert_equal ["b (> 0)"], unresolved_names @@ -241,14 +241,14 @@ end a1 = util_spec "a", "1", "b" => "> 0" b1 = util_spec "b", "1", "c" => ">= 0" # unresolved b2 = util_spec "b", "2", "c" => ">= 0" - c1 = util_spec "c", "1", nil, "lib/c.rb" # 1st level - c2 = util_spec "c", "2", nil, "lib/c.rb" + c1 = util_spec "c", "1", nil, "lib/c#{$$}.rb" # 1st level + c2 = util_spec "c", "2", nil, "lib/c#{$$}.rb" install_specs c1, c2, b1, b2, a1 a1.activate - require "c" + require "c#{$$}" assert_equal %w(a-1 b-2 c-2), loaded_spec_names end @@ -261,14 +261,14 @@ end b2 = util_spec "b", "2", "c" => ">= 0" c1 = util_spec "c", "1", "d" => ">= 0" # 1st level c2 = util_spec "c", "2", "d" => ">= 0" - d1 = util_spec "d", "1", nil, "lib/d.rb" # 2nd level - d2 = util_spec "d", "2", nil, "lib/d.rb" + d1 = util_spec "d", "1", nil, "lib/d#{$$}.rb" # 2nd level + d2 = util_spec "d", "2", nil, "lib/d#{$$}.rb" install_specs d1, d2, c1, c2, b1, b2, a1 a1.activate - require "d" + require "d#{$$}" assert_equal %w(a-1 b-2 c-2 d-2), loaded_spec_names end @@ -281,15 +281,15 @@ end b2 = util_spec "b", "2", "c" => ">= 0" c1 = util_spec "c", "1", "d" => "<= 2" # 1st level c2 = util_spec "c", "2", "d" => "<= 2" - d1 = util_spec "d", "1", nil, "lib/d.rb" # 2nd level - d2 = util_spec "d", "2", nil, "lib/d.rb" - d3 = util_spec "d", "3", nil, "lib/d.rb" + d1 = util_spec "d", "1", nil, "lib/d#{$$}.rb" # 2nd level + d2 = util_spec "d", "2", nil, "lib/d#{$$}.rb" + d3 = util_spec "d", "3", nil, "lib/d#{$$}.rb" install_specs d1, d2, d3, c1, c2, b1, b2, a1 a1.activate - require "d" + require "d#{$$}" assert_equal %w(a-1 b-2 c-2 d-2), loaded_spec_names end @@ -302,16 +302,16 @@ end b2 = util_spec "b", "2", "c" => ">= 0" c1 = util_spec "c", "1", "d" => "<= 2" # 1st level c2 = util_spec "c", "2", "d" => "<= 2" - d1 = util_spec "d", "1", nil, "lib/d.rb" # 2nd level - d2 = util_spec "d", "2", nil, "lib/d.rb" - d3 = util_spec "d", "3", nil, "lib/d.rb" - e = util_spec "anti_d", "1", nil, "lib/d.rb" + d1 = util_spec "d", "1", nil, "lib/d#{$$}.rb" # 2nd level + d2 = util_spec "d", "2", nil, "lib/d#{$$}.rb" + d3 = util_spec "d", "3", nil, "lib/d#{$$}.rb" + e = util_spec "anti_d", "1", nil, "lib/d#{$$}.rb" install_specs d1, d2, d3, e, c1, c2, b1, b2, a1 a1.activate - require "d" + require "d#{$$}" assert_equal %w(a-1 b-2 c-2 d-2), loaded_spec_names end @@ -322,8 +322,8 @@ end base = util_spec "0", "1", "A" => ">= 1" a1 = util_spec "A", "1", {"c" => ">= 2", "b" => "> 0"}, "lib/a.rb" a2 = util_spec "A", "2", {"c" => ">= 2", "b" => "> 0"}, "lib/a.rb" - b1 = util_spec "b", "1", {"c" => "= 1"}, "lib/d.rb" - b2 = util_spec "b", "2", {"c" => "= 2"}, "lib/d.rb" + b1 = util_spec "b", "1", {"c" => "= 1"}, "lib/d#{$$}.rb" + b2 = util_spec "b", "2", {"c" => "= 2"}, "lib/d#{$$}.rb" c1 = util_spec "c", "1", {}, "lib/c.rb" c2 = util_spec "c", "2", {}, "lib/c.rb" c3 = util_spec "c", "3", {}, "lib/c.rb" @@ -334,7 +334,7 @@ end assert_equal %w(0-1), loaded_spec_names assert_equal ["A (>= 1)"], unresolved_names - require "d" + require "d#{$$}" assert_equal %w(0-1 A-2 b-2 c-2), loaded_spec_names assert_equal [], unresolved_names @@ -349,15 +349,15 @@ end c1 = util_spec "c", "1", "d" => "<= 2" # 1st level c2 = util_spec "c", "2", "d" => "<= 2" c3 = util_spec "c", "3", "d" => "<= 3" - d1 = util_spec "d", "1", nil, "lib/d.rb" # 2nd level - d2 = util_spec "d", "2", nil, "lib/d.rb" - d3 = util_spec "d", "3", nil, "lib/d.rb" + d1 = util_spec "d", "1", nil, "lib/d#{$$}.rb" # 2nd level + d2 = util_spec "d", "2", nil, "lib/d#{$$}.rb" + d3 = util_spec "d", "3", nil, "lib/d#{$$}.rb" install_specs d1, d2, d3, c1, c2, c3, b1, b2, a1 a1.activate - require "d" + require "d#{$$}" assert_includes [%w(a-1 b-2 c-3 d-2),%w(a-1 b-2 d-2)], loaded_spec_names end @@ -371,15 +371,15 @@ end c1 = util_spec "xc", "1", "d" => "<= 3" # 1st level c2 = util_spec "xc", "2", "d" => "<= 2" c3 = util_spec "xc", "3", "d" => "<= 3" - d1 = util_spec "d", "1", nil, "lib/d.rb" # 2nd level - d2 = util_spec "d", "2", nil, "lib/d.rb" - d3 = util_spec "d", "3", nil, "lib/d.rb" + d1 = util_spec "d", "1", nil, "lib/d#{$$}.rb" # 2nd level + d2 = util_spec "d", "2", nil, "lib/d#{$$}.rb" + d3 = util_spec "d", "3", nil, "lib/d#{$$}.rb" install_specs d1, d2, d3, c1, c2, c3, b1, b2, a1 a1.activate - require "d" + require "d#{$$}" assert_includes [%w(a-1 b-2 d-2 xc-3), %w(a-1 b-2 d-2)], loaded_spec_names end @@ -516,12 +516,12 @@ end def test_self_activate_via_require_wtf save_loaded_features do a1 = util_spec "a", "1", "b" => "> 0", "d" => "> 0" # this - b1 = util_spec "b", "1", { "c" => ">= 1" }, "lib/b.rb" - b2 = util_spec "b", "2", { "c" => ">= 2" }, "lib/b.rb" # this + b1 = util_spec "b", "1", { "c" => ">= 1" }, "lib/b#{$$}.rb" + b2 = util_spec "b", "2", { "c" => ">= 2" }, "lib/b#{$$}.rb" # this c1 = util_spec "c", "1" c2 = util_spec "c", "2" # this - d1 = util_spec "d", "1", { "c" => "< 2" }, "lib/d.rb" - d2 = util_spec "d", "2", { "c" => "< 2" }, "lib/d.rb" # this + d1 = util_spec "d", "1", { "c" => "< 2" }, "lib/d#{$$}.rb" + d2 = util_spec "d", "2", { "c" => "< 2" }, "lib/d#{$$}.rb" # this install_specs c1, c2, b1, b2, d1, d2, a1 @@ -530,10 +530,10 @@ end assert_equal %w(a-1), loaded_spec_names assert_equal ["b (> 0)", "d (> 0)"], unresolved_names - require "b" + require "b#{$$}" e = assert_raises Gem::LoadError do - require "d" + require "d#{$$}" end assert_equal "unable to find a version of 'd' to activate", e.message @@ -2287,7 +2287,7 @@ dependencies: [] def test_require_already_activated save_loaded_features do - a1 = util_spec "a", "1", nil, "lib/d.rb" + a1 = util_spec "a", "1", nil, "lib/d#{$$}.rb" install_specs a1 # , a2, b1, b2, c1, c2 @@ -2295,7 +2295,7 @@ dependencies: [] assert_equal %w(a-1), loaded_spec_names assert_equal [], unresolved_names - assert require "d" + assert require "d#{$$}" assert_equal %w(a-1), loaded_spec_names assert_equal [], unresolved_names @@ -2308,8 +2308,8 @@ dependencies: [] a2 = util_spec "a", "2", "b" => "> 0" b1 = util_spec "b", "1", "c" => ">= 1" b2 = util_spec "b", "2", "c" => ">= 2" - c1 = util_spec "c", "1", nil, "lib/d.rb" - c2 = util_spec("c", "2", { "a" => "1" }, "lib/d.rb") # conflicts with a-2 + c1 = util_spec "c", "1", nil, "lib/d#{$$}.rb" + c2 = util_spec("c", "2", { "a" => "1" }, "lib/d#{$$}.rb") # conflicts with a-2 install_specs c1, b1, a1, a2, c2, b2 @@ -2318,7 +2318,7 @@ dependencies: [] assert_equal %w(a-1 c-1), loaded_spec_names assert_equal ["b (> 0)"], unresolved_names - assert require "d" + assert require "d#{$$}" assert_equal %w(a-1 c-1), loaded_spec_names assert_equal ["b (> 0)"], unresolved_names diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb index 1590c04d21..69df9093c7 100644 --- a/test/rubygems/test_require.rb +++ b/test/rubygems/test_require.rb @@ -124,13 +124,13 @@ class TestGemRequire < Gem::TestCase Object.const_set :FILE_ENTERED_LATCH, Latch.new(2) Object.const_set :FILE_EXIT_LATCH, Latch.new(1) - a1 = util_spec "a", "1", nil, "lib/a.rb" - b1 = util_spec "b", "1", nil, "lib/b.rb" + a1 = util_spec "a#{$$}", "1", nil, "lib/a#{$$}.rb" + b1 = util_spec "b#{$$}", "1", nil, "lib/b#{$$}.rb" install_specs a1, b1 - t1 = create_sync_thread{ assert_require 'a' } - t2 = create_sync_thread{ assert_require 'b' } + t1 = create_sync_thread{ assert_require "a#{$$}" } + t2 = create_sync_thread{ assert_require "b#{$$}" } # wait until both files are waiting on the exit latch FILE_ENTERED_LATCH.await @@ -326,7 +326,7 @@ class TestGemRequire < Gem::TestCase end def test_require_doesnt_traverse_development_dependencies - a = util_spec("a", "1", nil, "lib/a.rb") + a = util_spec("a#{$$}", "1", nil, "lib/a#{$$}.rb") z = util_spec("z", "1", "w" => "> 0") w1 = util_spec("w", "1") { |s| s.add_development_dependency "non-existent" } w2 = util_spec("w", "2") { |s| s.add_development_dependency "non-existent" } @@ -337,7 +337,7 @@ class TestGemRequire < Gem::TestCase assert_equal %w(z-1), loaded_spec_names assert_equal ["w (> 0)"], unresolved_names - assert require("a") + assert require("a#{$$}") end def test_default_gem_only @@ -451,15 +451,15 @@ class TestGemRequire < Gem::TestCase end def test_require_default_when_gem_defined - a = util_spec("a", "1", nil, "lib/a.rb") + a = util_spec("a#{$$}", "1", nil, "lib/a#{$$}.rb") install_specs a c = Class.new do def self.gem(*args) raise "received #gem with #{args.inspect}" end end - assert c.send(:require, "a") - assert_equal %w(a-1), loaded_spec_names + assert c.send(:require, "a#{$$}") + assert_equal %W(a#{$$}-1), loaded_spec_names end def test_require_bundler -- cgit v1.2.3