diff options
Diffstat (limited to 'test/ruby/test_dir.rb')
| -rw-r--r-- | test/ruby/test_dir.rb | 66 |
1 files changed, 53 insertions, 13 deletions
diff --git a/test/ruby/test_dir.rb b/test/ruby/test_dir.rb index 026338f567..edb5210af1 100644 --- a/test/ruby/test_dir.rb +++ b/test/ruby/test_dir.rb @@ -104,22 +104,23 @@ class TestDir < Test::Unit::TestCase assert_raise(ArgumentError) { Dir.chdir } ENV["HOME"] = pwd Dir.chdir do - assert_warning(/conflicting chdir during another chdir block/) { Dir.chdir(pwd) } + conflicting = /conflicting chdir during another chdir block\n^#{Regexp.quote(__FILE__)}:#{__LINE__-1}:/ + assert_warning(conflicting) { Dir.chdir(pwd) } - assert_warning(/conflicting chdir during another chdir block/) { Dir.chdir(@root) } + assert_warning(conflicting) { Dir.chdir(@root) } assert_equal(@root, Dir.pwd) - assert_warning(/conflicting chdir during another chdir block/) { Dir.chdir(pwd) } + assert_warning(conflicting) { Dir.chdir(pwd) } assert_raise(RuntimeError) { Thread.new { Thread.current.report_on_exception = false; Dir.chdir(@root) }.join } assert_raise(RuntimeError) { Thread.new { Thread.current.report_on_exception = false; Dir.chdir(@root) { } }.join } - assert_warning(/conflicting chdir during another chdir block/) { Dir.chdir(pwd) } + assert_warning(conflicting) { Dir.chdir(pwd) } - assert_warning(/conflicting chdir during another chdir block/) { Dir.chdir(@root) } + assert_warning(conflicting) { Dir.chdir(@root) } assert_equal(@root, Dir.pwd) - assert_warning(/conflicting chdir during another chdir block/) { Dir.chdir(pwd) } + assert_warning(conflicting) { Dir.chdir(pwd) } Dir.chdir(@root) do assert_equal(@root, Dir.pwd) end @@ -142,23 +143,25 @@ class TestDir < Test::Unit::TestCase ENV["HOME"] = pwd ret = root_dir.chdir do |*a| + conflicting = /conflicting chdir during another chdir block\n^#{Regexp.quote(__FILE__)}:#{__LINE__-1}:/ + assert_empty(a) - assert_warning(/conflicting chdir during another chdir block/) { dir.chdir } - assert_warning(/conflicting chdir during another chdir block/) { root_dir.chdir } + assert_warning(conflicting) { dir.chdir } + assert_warning(conflicting) { root_dir.chdir } assert_equal(@root, Dir.pwd) assert_raise(RuntimeError) { Thread.new { Thread.current.report_on_exception = false; dir.chdir }.join } assert_raise(RuntimeError) { Thread.new { Thread.current.report_on_exception = false; dir.chdir{} }.join } - assert_warning(/conflicting chdir during another chdir block/) { dir.chdir } + assert_warning(conflicting) { dir.chdir } assert_equal(pwd, Dir.pwd) - assert_warning(/conflicting chdir during another chdir block/) { root_dir.chdir } + assert_warning(conflicting) { root_dir.chdir } assert_equal(@root, Dir.pwd) - assert_warning(/conflicting chdir during another chdir block/) { dir.chdir } + assert_warning(conflicting) { dir.chdir } root_dir.chdir do assert_equal(@root, Dir.pwd) @@ -168,6 +171,26 @@ class TestDir < Test::Unit::TestCase 42 end + assert_separately(["-", @root], "#{<<~"begin;"}\n#{<<~'end;'}") + begin; + root = ARGV.shift + + $dir_warnings = [] + + def Warning.warn(message) + $dir_warnings << message + end + + line2 = line1 = __LINE__; Dir.chdir(root) do + line2 = __LINE__; Dir.chdir + end + + message = $dir_warnings.shift + assert_include(message, "#{__FILE__}:#{line2}:") + assert_include(message, "#{__FILE__}:#{line1}:") + assert_empty($dir_warnings) + end; + assert_equal(42, ret) ensure begin @@ -233,7 +256,7 @@ class TestDir < Test::Unit::TestCase Dir.glob(@root, sort: nil) end - assert_equal(("a".."z").step(2).map {|f| File.join(File.join(@root, f), "") }, + assert_equal(("a".."z").each_slice(2).map {|f,_| File.join(File.join(@root, f), "") }, Dir.glob(File.join(@root, "*/"))) assert_equal([File.join(@root, '//a')], Dir.glob(@root + '//a')) @@ -618,6 +641,21 @@ class TestDir < Test::Unit::TestCase assert_equal("C:/ruby/homepath", Dir.home) end; end + + def test_children_long_name + Dir.mktmpdir do |dirname| + longest_possible_component = "b" * 255 + long_path = File.join(dirname, longest_possible_component) + Dir.mkdir(long_path) + File.write("#{long_path}/c", "") + assert_equal(%w[c], Dir.children(long_path)) + ensure + File.unlink("#{long_path}/c") + Dir.rmdir(long_path) + end + rescue Errno::ENOENT + omit "File system does not support long file name" + end end def test_home @@ -687,7 +725,9 @@ class TestDir < Test::Unit::TestCase assert_equal(new_dir.chdir{Dir.pwd}, for_fd_dir.chdir{Dir.pwd}) ensure new_dir&.close - for_fd_dir&.close + if for_fd_dir + assert_raise(Errno::EBADF) { for_fd_dir.close } + end end else assert_raise(NotImplementedError) { Dir.for_fd(0) } |
