Do not load files in build directory

related https://bugs.ruby-lang.org/issues/16177
This commit is contained in:
Kazuhiro NISHIYAMA 2019-12-10 18:31:01 +09:00 коммит произвёл Kazuhiro NISHIYAMA
Родитель 85e43e1dfe
Коммит 1ed0212bcf
6 изменённых файлов: 84 добавлений и 80 удалений

4
.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:

Просмотреть файл

@ -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

Просмотреть файл

@ -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

Просмотреть файл

@ -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

Просмотреть файл

@ -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

Просмотреть файл

@ -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