diff options
Diffstat (limited to 'spec/ruby/core/file/umask_spec.rb')
-rw-r--r-- | spec/ruby/core/file/umask_spec.rb | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/spec/ruby/core/file/umask_spec.rb b/spec/ruby/core/file/umask_spec.rb new file mode 100644 index 0000000000..2286bf064f --- /dev/null +++ b/spec/ruby/core/file/umask_spec.rb @@ -0,0 +1,60 @@ +require File.expand_path('../../../spec_helper', __FILE__) + +describe "File.umask" do + before :each do + @orig_umask = File.umask + @file = tmp('test.txt') + touch @file + end + + after :each do + rm_r @file + File.umask(@orig_umask) + end + + it "returns a Fixnum" do + File.umask.should be_kind_of(Fixnum) + end + + platform_is_not :windows do + it "returns the current umask value for the process" do + File.umask(022) + File.umask(006).should == 022 + File.umask.should == 006 + end + + it "invokes to_int on non-integer argument" do + (obj = mock(022)).should_receive(:to_int).any_number_of_times.and_return(022) + File.umask(obj) + File.umask(obj).should == 022 + end + end + + it "always succeeds with any integer values" do + vals = [-2**30, -2**16, -2**8, -2, + -1.5, -1, 0.5, 0, 1, 2, 7.77777, 16, 32, 64, 2**8, 2**16, 2**30] + vals.each { |v| + lambda { File.umask(v) }.should_not raise_error + } + end + + it "raises ArgumentError when more than one argument is provided" do + lambda { File.umask(022, 022) }.should raise_error(ArgumentError) + end + + platform_is :windows do + it "returns the current umask value for this process (basic)" do + File.umask.should == 0 + File.umask(022).should == 0 + File.umask(044).should == 0 + end + + # The value used here is the value of _S_IWRITE. + it "returns the current umask value for this process" do + File.umask(0000200) + File.umask.should == 0000200 + File.umask(0006) + File.umask.should == 0 + end + end +end |