mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Move spec/rubyspec to spec/ruby for consistency
* Other ruby implementations use the spec/ruby directory. [Misc #13792] [ruby-core:82287] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
75bfc6440d
commit
1d15d5f080
4370 changed files with 0 additions and 0 deletions
162
spec/ruby/core/file/new_spec.rb
Normal file
162
spec/ruby/core/file/new_spec.rb
Normal file
|
@ -0,0 +1,162 @@
|
|||
require File.expand_path('../../../spec_helper', __FILE__)
|
||||
require File.expand_path('../shared/open', __FILE__)
|
||||
|
||||
describe "File.new" do
|
||||
before :each do
|
||||
@file = tmp('test.txt')
|
||||
@fh = nil
|
||||
@flags = File::CREAT | File::TRUNC | File::WRONLY
|
||||
touch @file
|
||||
end
|
||||
|
||||
after :each do
|
||||
@fh.close if @fh
|
||||
rm_r @file
|
||||
end
|
||||
|
||||
it "returns a new File with mode string" do
|
||||
@fh = File.new(@file, 'w')
|
||||
@fh.should be_kind_of(File)
|
||||
File.exist?(@file).should == true
|
||||
end
|
||||
|
||||
it "returns a new File with mode num" do
|
||||
@fh = File.new(@file, @flags)
|
||||
@fh.should be_kind_of(File)
|
||||
File.exist?(@file).should == true
|
||||
end
|
||||
|
||||
it "returns a new File with modus num and permissions" do
|
||||
rm_r @file
|
||||
File.umask(0011)
|
||||
@fh = File.new(@file, @flags, 0755)
|
||||
@fh.should be_kind_of(File)
|
||||
platform_is_not :windows do
|
||||
File.stat(@file).mode.to_s(8).should == "100744"
|
||||
end
|
||||
File.exist?(@file).should == true
|
||||
end
|
||||
|
||||
it "creates the file and returns writable descriptor when called with 'w' mode and r-o permissions" do
|
||||
# it should be possible to write to such a file via returned descriptior,
|
||||
# even though the file permissions are r-r-r.
|
||||
|
||||
rm_r @file
|
||||
begin
|
||||
f = File.new(@file, "w", 0444)
|
||||
lambda { f.puts("test") }.should_not raise_error(IOError)
|
||||
ensure
|
||||
f.close
|
||||
end
|
||||
File.exist?(@file).should == true
|
||||
File.read(@file).should == "test\n"
|
||||
end
|
||||
|
||||
platform_is_not :windows do
|
||||
it "opens the existing file, does not change permissions even when they are specified" do
|
||||
File.chmod(0644, @file) # r-w perms
|
||||
orig_perms = File.stat(@file).mode & 0777
|
||||
begin
|
||||
f = File.new(@file, "w", 0444) # r-o perms, but they should be ignored
|
||||
f.puts("test")
|
||||
ensure
|
||||
f.close
|
||||
end
|
||||
perms = File.stat(@file).mode & 0777
|
||||
perms.should == orig_perms
|
||||
|
||||
# it should be still possible to read from the file
|
||||
File.read(@file).should == "test\n"
|
||||
end
|
||||
end
|
||||
|
||||
it "returns a new File with modus fd" do
|
||||
@fh = File.new(@file)
|
||||
fh_copy = File.new(@fh.fileno)
|
||||
fh_copy.autoclose = false
|
||||
fh_copy.should be_kind_of(File)
|
||||
File.exist?(@file).should == true
|
||||
end
|
||||
|
||||
it "creates a new file when use File::EXCL mode" do
|
||||
@fh = File.new(@file, File::EXCL)
|
||||
@fh.should be_kind_of(File)
|
||||
File.exist?(@file).should == true
|
||||
end
|
||||
|
||||
it "raises an Errorno::EEXIST if the file exists when create a new file with File::CREAT|File::EXCL" do
|
||||
lambda { @fh = File.new(@file, File::CREAT|File::EXCL) }.should raise_error(Errno::EEXIST)
|
||||
end
|
||||
|
||||
it "creates a new file when use File::WRONLY|File::APPEND mode" do
|
||||
@fh = File.new(@file, File::WRONLY|File::APPEND)
|
||||
@fh.should be_kind_of(File)
|
||||
File.exist?(@file).should == true
|
||||
end
|
||||
|
||||
it "returns a new File when use File::APPEND mode" do
|
||||
@fh = File.new(@file, File::APPEND)
|
||||
@fh.should be_kind_of(File)
|
||||
File.exist?(@file).should == true
|
||||
end
|
||||
|
||||
it "returns a new File when use File::RDONLY|File::APPEND mode" do
|
||||
@fh = File.new(@file, File::RDONLY|File::APPEND)
|
||||
@fh.should be_kind_of(File)
|
||||
File.exist?(@file).should == true
|
||||
end
|
||||
|
||||
it "returns a new File when use File::RDONLY|File::WRONLY mode" do
|
||||
@fh = File.new(@file, File::RDONLY|File::WRONLY)
|
||||
@fh.should be_kind_of(File)
|
||||
File.exist?(@file).should == true
|
||||
end
|
||||
|
||||
|
||||
it "creates a new file when use File::WRONLY|File::TRUNC mode" do
|
||||
@fh = File.new(@file, File::WRONLY|File::TRUNC)
|
||||
@fh.should be_kind_of(File)
|
||||
File.exist?(@file).should == true
|
||||
end
|
||||
|
||||
it "coerces filename using to_str" do
|
||||
name = mock("file")
|
||||
name.should_receive(:to_str).and_return(@file)
|
||||
@fh = File.new(name, "w")
|
||||
File.exist?(@file).should == true
|
||||
end
|
||||
|
||||
it "coerces filename using #to_path" do
|
||||
name = mock("file")
|
||||
name.should_receive(:to_path).and_return(@file)
|
||||
@fh = File.new(name, "w")
|
||||
File.exist?(@file).should == true
|
||||
end
|
||||
|
||||
it "raises a TypeError if the first parameter can't be coerced to a string" do
|
||||
lambda { File.new(true) }.should raise_error(TypeError)
|
||||
lambda { File.new(false) }.should raise_error(TypeError)
|
||||
end
|
||||
|
||||
it "raises a TypeError if the first parameter is nil" do
|
||||
lambda { File.new(nil) }.should raise_error(TypeError)
|
||||
end
|
||||
|
||||
it "raises an Errno::EBADF if the first parameter is an invalid file descriptor" do
|
||||
lambda { File.new(-1) }.should raise_error(Errno::EBADF)
|
||||
end
|
||||
|
||||
platform_is_not :windows do
|
||||
it "can't alter mode or permissions when opening a file" do
|
||||
@fh = File.new(@file)
|
||||
lambda {
|
||||
f = File.new(@fh.fileno, @flags)
|
||||
f.autoclose = false
|
||||
}.should raise_error(Errno::EINVAL)
|
||||
end
|
||||
end
|
||||
|
||||
platform_is_not :windows do
|
||||
it_behaves_like :open_directory, :new
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue