From 5d7953f86b7ae164017e2292dfb3c108e0e02527 Mon Sep 17 00:00:00 2001 From: Jeremy Evans Date: Fri, 25 Sep 2020 13:29:20 -0700 Subject: Switch conflicting chdir warning to RuntimeError The documentation already stated this was an error in one case (when it was previously a warning). Describe the other case, where chdir without block is called inside block passed to chdir. Fixes [Bug #15661] --- test/ruby/test_dir.rb | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'test/ruby/test_dir.rb') diff --git a/test/ruby/test_dir.rb b/test/ruby/test_dir.rb index 13b9c1ddf2..cf18af134c 100644 --- a/test/ruby/test_dir.rb +++ b/test/ruby/test_dir.rb @@ -99,8 +99,12 @@ class TestDir < Test::Unit::TestCase ENV["HOME"] = @pwd Dir.chdir do assert_equal(@pwd, Dir.pwd) - Dir.chdir(@root) - assert_equal(@root, Dir.pwd) + assert_raise(RuntimeError) { Dir.chdir(@root) } + assert_equal(@pwd, Dir.pwd) + Dir.chdir(@root) do + assert_equal(@root, Dir.pwd) + end + assert_equal(@pwd, Dir.pwd) end ensure @@ -121,6 +125,28 @@ class TestDir < Test::Unit::TestCase end end + def test_chdir_conflict + @pwd = Dir.pwd + q = Queue.new + t = Thread.new do + q.pop + Dir.chdir(@pwd) rescue $! + end + Dir.chdir(@pwd) do + q.push nil + assert_instance_of(RuntimeError, t.value) + end + + t = Thread.new do + q.pop + Dir.chdir(@pwd){} rescue $! + end + Dir.chdir(@pwd) do + q.push nil + assert_instance_of(RuntimeError, t.value) + end + end + def test_chroot_nodir skip if RUBY_PLATFORM =~ /android/ assert_raise(NotImplementedError, Errno::ENOENT, Errno::EPERM -- cgit v1.2.3