summaryrefslogtreecommitdiff
path: root/spec/ruby/core/dir/close_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/core/dir/close_spec.rb')
-rw-r--r--spec/ruby/core/dir/close_spec.rb52
1 files changed, 38 insertions, 14 deletions
diff --git a/spec/ruby/core/dir/close_spec.rb b/spec/ruby/core/dir/close_spec.rb
index 7b08ec5ee8..9902d98934 100644
--- a/spec/ruby/core/dir/close_spec.rb
+++ b/spec/ruby/core/dir/close_spec.rb
@@ -1,9 +1,5 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-require File.expand_path('../fixtures/common', __FILE__)
-ruby_version_is ''...'2.3' do
- require File.expand_path('../shared/closed', __FILE__)
-end
-
+require_relative '../../spec_helper'
+require_relative 'fixtures/common'
describe "Dir#close" do
before :all do
DirSpecs.create_mock_dirs
@@ -13,17 +9,45 @@ describe "Dir#close" do
DirSpecs.delete_mock_dirs
end
- ruby_version_is ''...'2.3' do
- it_behaves_like :dir_closed, :close
+ it "does not raise an IOError even if the Dir instance is closed" do
+ dir = Dir.open DirSpecs.mock_dir
+ dir.close.should == nil
+ dir.close.should == nil
+
+ platform_is_not :windows do
+ -> { dir.fileno }.should.raise(IOError, /closed directory/)
+ end
end
- ruby_version_is '2.3' do
- it "does not raise an IOError even if the Dir instance is closed" do
- dir = Dir.open DirSpecs.mock_dir
- dir.close
- lambda {
+ it "returns nil" do
+ dir = Dir.open DirSpecs.mock_dir
+ dir.close.should == nil
+ end
+
+ ruby_version_is ''...'3.4' do
+ platform_is_not :windows do
+ it "does not raise an error even if the file descriptor is closed with another Dir instance" do
+ dir = Dir.open DirSpecs.mock_dir
+ dir_new = Dir.for_fd(dir.fileno)
+
dir.close
- }.should_not raise_error(IOError)
+ dir_new.close
+
+ -> { dir.fileno }.should.raise(IOError, /closed directory/)
+ -> { dir_new.fileno }.should.raise(IOError, /closed directory/)
+ end
+ end
+ end
+
+ ruby_version_is '3.4' do
+ platform_is_not :windows do
+ it "raises an error if the file descriptor is closed with another Dir instance" do
+ dir = Dir.open DirSpecs.mock_dir
+ dir_new = Dir.for_fd(dir.fileno)
+ dir.close
+
+ -> { dir_new.close }.should.raise(Errno::EBADF, 'Bad file descriptor - closedir')
+ end
end
end
end