diff options
Diffstat (limited to 'spec/ruby/shared/file')
| -rw-r--r-- | spec/ruby/shared/file/directory.rb | 18 | ||||
| -rw-r--r-- | spec/ruby/shared/file/executable.rb | 45 | ||||
| -rw-r--r-- | spec/ruby/shared/file/executable_real.rb | 43 | ||||
| -rw-r--r-- | spec/ruby/shared/file/exist.rb | 11 | ||||
| -rw-r--r-- | spec/ruby/shared/file/file.rb | 8 | ||||
| -rw-r--r-- | spec/ruby/shared/file/grpowned.rb | 6 | ||||
| -rw-r--r-- | spec/ruby/shared/file/identical.rb | 24 | ||||
| -rw-r--r-- | spec/ruby/shared/file/readable.rb | 21 | ||||
| -rw-r--r-- | spec/ruby/shared/file/readable_real.rb | 16 | ||||
| -rw-r--r-- | spec/ruby/shared/file/size.rb | 4 | ||||
| -rw-r--r-- | spec/ruby/shared/file/socket.rb | 32 | ||||
| -rw-r--r-- | spec/ruby/shared/file/sticky.rb | 2 | ||||
| -rw-r--r-- | spec/ruby/shared/file/world_readable.rb | 18 | ||||
| -rw-r--r-- | spec/ruby/shared/file/world_writable.rb | 18 | ||||
| -rw-r--r-- | spec/ruby/shared/file/writable.rb | 18 | ||||
| -rw-r--r-- | spec/ruby/shared/file/writable_real.rb | 24 | ||||
| -rw-r--r-- | spec/ruby/shared/file/zero.rb | 10 |
17 files changed, 242 insertions, 76 deletions
diff --git a/spec/ruby/shared/file/directory.rb b/spec/ruby/shared/file/directory.rb index 8ba933a601..84f8f1a958 100644 --- a/spec/ruby/shared/file/directory.rb +++ b/spec/ruby/shared/file/directory.rb @@ -12,24 +12,24 @@ describe :file_directory, shared: true do end it "returns true if the argument is a directory" do - @object.send(@method, @dir).should be_true + @object.send(@method, @dir).should == true end it "returns false if the argument is not a directory" do - @object.send(@method, @file).should be_false + @object.send(@method, @file).should == false end it "accepts an object that has a #to_path method" do - @object.send(@method, mock_to_path(@dir)).should be_true + @object.send(@method, mock_to_path(@dir)).should == true end it "raises a TypeError when passed an Integer" do - -> { @object.send(@method, 1) }.should raise_error(TypeError) - -> { @object.send(@method, bignum_value) }.should raise_error(TypeError) + -> { @object.send(@method, 1) }.should.raise(TypeError) + -> { @object.send(@method, bignum_value) }.should.raise(TypeError) end it "raises a TypeError when passed nil" do - -> { @object.send(@method, nil) }.should raise_error(TypeError) + -> { @object.send(@method, nil) }.should.raise(TypeError) end end @@ -47,13 +47,13 @@ describe :file_directory_io, shared: true do end it "returns false if the argument is an IO that's not a directory" do - @object.send(@method, STDIN).should be_false + @object.send(@method, STDIN).should == false end platform_is_not :windows do it "returns true if the argument is an IO that is a directory" do File.open(@dir, "r") do |f| - @object.send(@method, f).should be_true + @object.send(@method, f).should == true end end end @@ -61,6 +61,6 @@ describe :file_directory_io, shared: true do it "calls #to_io to convert a non-IO object" do io = mock('FileDirectoryIO') io.should_receive(:to_io).and_return(STDIN) - @object.send(@method, io).should be_false + @object.send(@method, io).should == false end end diff --git a/spec/ruby/shared/file/executable.rb b/spec/ruby/shared/file/executable.rb index 2987d0aabb..0fc65cf866 100644 --- a/spec/ruby/shared/file/executable.rb +++ b/spec/ruby/shared/file/executable.rb @@ -13,7 +13,7 @@ describe :file_executable, shared: true do rm_r @file1, @file2 end - platform_is_not :windows do + platform_is_not :windows, :android do it "returns true if named file is executable by the effective user id of the process, otherwise false" do @object.send(@method, '/etc/passwd').should == false @object.send(@method, @file1).should == true @@ -31,13 +31,48 @@ describe :file_executable, shared: true do end it "raises an ArgumentError if not passed one argument" do - -> { @object.send(@method) }.should raise_error(ArgumentError) + -> { @object.send(@method) }.should.raise(ArgumentError) end it "raises a TypeError if not passed a String type" do - -> { @object.send(@method, 1) }.should raise_error(TypeError) - -> { @object.send(@method, nil) }.should raise_error(TypeError) - -> { @object.send(@method, false) }.should raise_error(TypeError) + -> { @object.send(@method, 1) }.should.raise(TypeError) + -> { @object.send(@method, nil) }.should.raise(TypeError) + -> { @object.send(@method, false) }.should.raise(TypeError) + end + + platform_is_not :windows do + as_superuser do + context "when run by a superuser" do + before :each do + @file = tmp('temp3.txt') + touch @file + end + + after :each do + rm_r @file + end + + it "returns true if file owner has permission to execute" do + File.chmod(0766, @file) + @object.send(@method, @file).should == true + end + + it "returns true if group has permission to execute" do + File.chmod(0676, @file) + @object.send(@method, @file).should == true + end + + it "returns true if other have permission to execute" do + File.chmod(0667, @file) + @object.send(@method, @file).should == true + end + + it "return false if nobody has permission to execute" do + File.chmod(0666, @file) + @object.send(@method, @file).should == false + end + end + end end end diff --git a/spec/ruby/shared/file/executable_real.rb b/spec/ruby/shared/file/executable_real.rb index ce3d5ca176..90b7a41ba7 100644 --- a/spec/ruby/shared/file/executable_real.rb +++ b/spec/ruby/shared/file/executable_real.rb @@ -29,13 +29,48 @@ describe :file_executable_real, shared: true do end it "raises an ArgumentError if not passed one argument" do - -> { @object.send(@method) }.should raise_error(ArgumentError) + -> { @object.send(@method) }.should.raise(ArgumentError) end it "raises a TypeError if not passed a String type" do - -> { @object.send(@method, 1) }.should raise_error(TypeError) - -> { @object.send(@method, nil) }.should raise_error(TypeError) - -> { @object.send(@method, false) }.should raise_error(TypeError) + -> { @object.send(@method, 1) }.should.raise(TypeError) + -> { @object.send(@method, nil) }.should.raise(TypeError) + -> { @object.send(@method, false) }.should.raise(TypeError) + end + + platform_is_not :windows do + as_real_superuser do + context "when run by a real superuser" do + before :each do + @file = tmp('temp3.txt') + touch @file + end + + after :each do + rm_r @file + end + + it "returns true if file owner has permission to execute" do + File.chmod(0766, @file) + @object.send(@method, @file).should == true + end + + it "returns true if group has permission to execute" do + File.chmod(0676, @file) + @object.send(@method, @file).should == true + end + + it "returns true if other have permission to execute" do + File.chmod(0667, @file) + @object.send(@method, @file).should == true + end + + it "return false if nobody has permission to execute" do + File.chmod(0666, @file) + @object.send(@method, @file).should == false + end + end + end end end diff --git a/spec/ruby/shared/file/exist.rb b/spec/ruby/shared/file/exist.rb index 3bd97711b4..5075fa74b9 100644 --- a/spec/ruby/shared/file/exist.rb +++ b/spec/ruby/shared/file/exist.rb @@ -4,18 +4,13 @@ describe :file_exist, shared: true do @object.send(@method, 'a_fake_file').should == false end - it "returns true if the file exist using the alias exists?" do - @object.send(@method, __FILE__).should == true - @object.send(@method, 'a_fake_file').should == false - end - it "raises an ArgumentError if not passed one argument" do - -> { @object.send(@method) }.should raise_error(ArgumentError) - -> { @object.send(@method, __FILE__, __FILE__) }.should raise_error(ArgumentError) + -> { @object.send(@method) }.should.raise(ArgumentError) + -> { @object.send(@method, __FILE__, __FILE__) }.should.raise(ArgumentError) end it "raises a TypeError if not passed a String type" do - -> { @object.send(@method, nil) }.should raise_error(TypeError) + -> { @object.send(@method, nil) }.should.raise(TypeError) end it "accepts an object that has a #to_path method" do diff --git a/spec/ruby/shared/file/file.rb b/spec/ruby/shared/file/file.rb index c1748a88b3..18477cff55 100644 --- a/spec/ruby/shared/file/file.rb +++ b/spec/ruby/shared/file/file.rb @@ -34,12 +34,12 @@ describe :file_file, shared: true do end it "raises an ArgumentError if not passed one argument" do - -> { @object.send(@method) }.should raise_error(ArgumentError) - -> { @object.send(@method, @null, @file) }.should raise_error(ArgumentError) + -> { @object.send(@method) }.should.raise(ArgumentError) + -> { @object.send(@method, @null, @file) }.should.raise(ArgumentError) end it "raises a TypeError if not passed a String type" do - -> { @object.send(@method, nil) }.should raise_error(TypeError) - -> { @object.send(@method, 1) }.should raise_error(TypeError) + -> { @object.send(@method, nil) }.should.raise(TypeError) + -> { @object.send(@method, 1) }.should.raise(TypeError) end end diff --git a/spec/ruby/shared/file/grpowned.rb b/spec/ruby/shared/file/grpowned.rb index 24e84c28e3..07a5a69e1a 100644 --- a/spec/ruby/shared/file/grpowned.rb +++ b/spec/ruby/shared/file/grpowned.rb @@ -11,11 +11,11 @@ describe :file_grpowned, shared: true do platform_is_not :windows do it "returns true if the file exist" do - @object.send(@method, @file).should be_true + @object.send(@method, @file).should == true end it "accepts an object that has a #to_path method" do - @object.send(@method, mock_to_path(@file)).should be_true + @object.send(@method, mock_to_path(@file)).should == true end it 'takes non primary groups into account' do @@ -33,7 +33,7 @@ describe :file_grpowned, shared: true do platform_is :windows do it "returns false if the file exist" do - @object.send(@method, @file).should be_false + @object.send(@method, @file).should == false end end end diff --git a/spec/ruby/shared/file/identical.rb b/spec/ruby/shared/file/identical.rb index ecc21727ca..628abd4f48 100644 --- a/spec/ruby/shared/file/identical.rb +++ b/spec/ruby/shared/file/identical.rb @@ -9,7 +9,11 @@ describe :file_identical, shared: true do touch(@file2) { |f| f.puts "file2" } rm_r @link - File.link(@file1, @link) + begin + File.link(@file1, @link) + rescue Errno::EACCES + File.symlink(@file1, @link) + end end after :each do @@ -21,9 +25,9 @@ describe :file_identical, shared: true do end it "returns false if any of the files doesn't exist" do - @object.send(@method, @file1, @non_exist).should be_false - @object.send(@method, @non_exist, @file1).should be_false - @object.send(@method, @non_exist, @non_exist).should be_false + @object.send(@method, @file1, @non_exist).should == false + @object.send(@method, @non_exist, @file1).should == false + @object.send(@method, @non_exist, @non_exist).should == false end it "accepts an object that has a #to_path method" do @@ -31,17 +35,17 @@ describe :file_identical, shared: true do end it "raises an ArgumentError if not passed two arguments" do - -> { @object.send(@method, @file1, @file2, @link) }.should raise_error(ArgumentError) - -> { @object.send(@method, @file1) }.should raise_error(ArgumentError) + -> { @object.send(@method, @file1, @file2, @link) }.should.raise(ArgumentError) + -> { @object.send(@method, @file1) }.should.raise(ArgumentError) end it "raises a TypeError if not passed String types" do - -> { @object.send(@method, 1,1) }.should raise_error(TypeError) + -> { @object.send(@method, 1,1) }.should.raise(TypeError) end it "returns true if both named files are identical" do - @object.send(@method, @file1, @file1).should be_true - @object.send(@method, @link, @link).should be_true - @object.send(@method, @file1, @file2).should be_false + @object.send(@method, @file1, @file1).should == true + @object.send(@method, @link, @link).should == true + @object.send(@method, @file1, @file2).should == false end end diff --git a/spec/ruby/shared/file/readable.rb b/spec/ruby/shared/file/readable.rb index 74f58caaff..7b45e23e36 100644 --- a/spec/ruby/shared/file/readable.rb +++ b/spec/ruby/shared/file/readable.rb @@ -4,9 +4,12 @@ describe :file_readable, shared: true do platform_is :windows do @file2 = File.join(ENV["WINDIR"], "system32/drivers/etc/services").tr(File::SEPARATOR, File::ALT_SEPARATOR) end - platform_is_not :windows do + platform_is_not :windows, :android do @file2 = "/etc/passwd" end + platform_is :android do + @file2 = "/system/bin/sh" + end end after :each do @@ -21,6 +24,22 @@ describe :file_readable, shared: true do it "accepts an object that has a #to_path method" do @object.send(@method, mock_to_path(@file2)).should == true end + + platform_is_not :windows do + as_superuser do + context "when run by a superuser" do + it "returns true unconditionally" do + file = tmp('temp.txt') + touch file + + File.chmod(0333, file) + @object.send(@method, file).should == true + + rm_r file + end + end + end + end end describe :file_readable_missing, shared: true do diff --git a/spec/ruby/shared/file/readable_real.rb b/spec/ruby/shared/file/readable_real.rb index b6e53ac76d..32d38bc7a2 100644 --- a/spec/ruby/shared/file/readable_real.rb +++ b/spec/ruby/shared/file/readable_real.rb @@ -14,6 +14,22 @@ describe :file_readable_real, shared: true do it "accepts an object that has a #to_path method" do File.open(@file,'w') { @object.send(@method, mock_to_path(@file)).should == true } end + + platform_is_not :windows do + as_real_superuser do + context "when run by a real superuser" do + it "returns true unconditionally" do + file = tmp('temp.txt') + touch file + + File.chmod(0333, file) + @object.send(@method, file).should == true + + rm_r file + end + end + end + end end describe :file_readable_real_missing, shared: true do diff --git a/spec/ruby/shared/file/size.rb b/spec/ruby/shared/file/size.rb index 880dfbb612..fa198ed232 100644 --- a/spec/ruby/shared/file/size.rb +++ b/spec/ruby/shared/file/size.rb @@ -56,7 +56,7 @@ describe :file_size_raise_when_missing, shared: true do end it "raises an error if file_name doesn't exist" do - -> {@object.send(@method, @missing)}.should raise_error(Errno::ENOENT) + -> {@object.send(@method, @missing)}.should.raise(Errno::ENOENT) end end @@ -72,7 +72,7 @@ describe :file_size_nil_when_missing, shared: true do end it "returns nil if file_name doesn't exist or has 0 size" do - @object.send(@method, @missing).should == nil + @object.send(@method, @missing).should == nil end end diff --git a/spec/ruby/shared/file/socket.rb b/spec/ruby/shared/file/socket.rb index 55a1cfd284..ef6c482d1c 100644 --- a/spec/ruby/shared/file/socket.rb +++ b/spec/ruby/shared/file/socket.rb @@ -1,3 +1,33 @@ describe :file_socket, shared: true do - it "accepts an object that has a #to_path method" + it "returns false if the file is not a socket" do + filename = tmp("i_exist") + touch(filename) + + @object.send(@method, filename).should == false + + rm_r filename + end + + it "returns true if the file is a socket" do + require 'socket' + + # We need a really short name here. + # On Linux the path length is limited to 107, see unix(7). + name = tmp("s") + server = UNIXServer.new(name) + + @object.send(@method, name).should == true + + server.close + rm_r name + end + + it "accepts an object that has a #to_path method" do + obj = Object.new + def obj.to_path + __FILE__ + end + + @object.send(@method, obj).should == false + end end diff --git a/spec/ruby/shared/file/sticky.rb b/spec/ruby/shared/file/sticky.rb index 38bb6ed26b..e07fa22fd7 100644 --- a/spec/ruby/shared/file/sticky.rb +++ b/spec/ruby/shared/file/sticky.rb @@ -8,7 +8,7 @@ describe :file_sticky, shared: true do Dir.rmdir(@dir) if File.exist?(@dir) end - platform_is_not :windows, :darwin, :freebsd, :netbsd, :openbsd, :solaris, :aix do + platform_is_not :windows, :darwin, :freebsd, :netbsd, :openbsd, :aix do it "returns true if the named file has the sticky bit, otherwise false" do Dir.mkdir @dir, 01755 diff --git a/spec/ruby/shared/file/world_readable.rb b/spec/ruby/shared/file/world_readable.rb index 85761e633f..c8946366ad 100644 --- a/spec/ruby/shared/file/world_readable.rb +++ b/spec/ruby/shared/file/world_readable.rb @@ -14,32 +14,32 @@ describe :file_world_readable, shared: true do platform_is_not :windows do it "returns nil if the file is chmod 600" do File.chmod(0600, @file) - @object.world_readable?(@file).should be_nil + @object.world_readable?(@file).should == nil end it "returns nil if the file is chmod 000" do File.chmod(0000, @file) - @object.world_readable?(@file).should be_nil + @object.world_readable?(@file).should == nil end it "returns nil if the file is chmod 700" do File.chmod(0700, @file) - @object.world_readable?(@file).should be_nil + @object.world_readable?(@file).should == nil end end - # We don't specify what the Fixnum is because it's system dependent - it "returns a Fixnum if the file is chmod 644" do + # We don't specify what the Integer is because it's system dependent + it "returns an Integer if the file is chmod 644" do File.chmod(0644, @file) - @object.world_readable?(@file).should be_an_instance_of(Fixnum) + @object.world_readable?(@file).should.instance_of?(Integer) end - it "returns a Fixnum if the file is a directory and chmod 644" do - dir = rand().to_s + '-ww' + it "returns an Integer if the file is a directory and chmod 644" do + dir = tmp(rand().to_s + '-ww') Dir.mkdir(dir) Dir.should.exist?(dir) File.chmod(0644, dir) - @object.world_readable?(dir).should be_an_instance_of(Fixnum) + @object.world_readable?(dir).should.instance_of?(Integer) Dir.rmdir(dir) end diff --git a/spec/ruby/shared/file/world_writable.rb b/spec/ruby/shared/file/world_writable.rb index 61b691bcb6..fcff09636e 100644 --- a/spec/ruby/shared/file/world_writable.rb +++ b/spec/ruby/shared/file/world_writable.rb @@ -14,31 +14,31 @@ describe :file_world_writable, shared: true do platform_is_not :windows do it "returns nil if the file is chmod 600" do File.chmod(0600, @file) - @object.world_writable?(@file).should be_nil + @object.world_writable?(@file).should == nil end it "returns nil if the file is chmod 000" do File.chmod(0000, @file) - @object.world_writable?(@file).should be_nil + @object.world_writable?(@file).should == nil end it "returns nil if the file is chmod 700" do File.chmod(0700, @file) - @object.world_writable?(@file).should be_nil + @object.world_writable?(@file).should == nil end - # We don't specify what the Fixnum is because it's system dependent - it "returns a Fixnum if the file is chmod 777" do + # We don't specify what the Integer is because it's system dependent + it "returns an Integer if the file is chmod 777" do File.chmod(0777, @file) - @object.world_writable?(@file).should be_an_instance_of(Fixnum) + @object.world_writable?(@file).should.instance_of?(Integer) end - it "returns a Fixnum if the file is a directory and chmod 777" do - dir = rand().to_s + '-ww' + it "returns an Integer if the file is a directory and chmod 777" do + dir = tmp(rand().to_s + '-ww') Dir.mkdir(dir) Dir.should.exist?(dir) File.chmod(0777, dir) - @object.world_writable?(dir).should be_an_instance_of(Fixnum) + @object.world_writable?(dir).should.instance_of?(Integer) Dir.rmdir(dir) end end diff --git a/spec/ruby/shared/file/writable.rb b/spec/ruby/shared/file/writable.rb index 902d545da1..65ea2c1781 100644 --- a/spec/ruby/shared/file/writable.rb +++ b/spec/ruby/shared/file/writable.rb @@ -8,7 +8,7 @@ describe :file_writable, shared: true do end it "returns true if named file is writable by the effective user id of the process, otherwise false" do - platform_is_not :windows do + platform_is_not :windows, :android do as_user do @object.send(@method, "/etc/passwd").should == false end @@ -19,6 +19,22 @@ describe :file_writable, shared: true do it "accepts an object that has a #to_path method" do File.open(@file,'w') { @object.send(@method, mock_to_path(@file)).should == true } end + + platform_is_not :windows do + as_superuser do + context "when run by a superuser" do + it "returns true unconditionally" do + file = tmp('temp.txt') + touch file + + File.chmod(0555, file) + @object.send(@method, file).should == true + + rm_r file + end + end + end + end end describe :file_writable_missing, shared: true do diff --git a/spec/ruby/shared/file/writable_real.rb b/spec/ruby/shared/file/writable_real.rb index e9721fd379..4602996187 100644 --- a/spec/ruby/shared/file/writable_real.rb +++ b/spec/ruby/shared/file/writable_real.rb @@ -16,13 +16,29 @@ describe :file_writable_real, shared: true do end it "raises an ArgumentError if not passed one argument" do - -> { File.writable_real? }.should raise_error(ArgumentError) + -> { File.writable_real? }.should.raise(ArgumentError) end it "raises a TypeError if not passed a String type" do - -> { @object.send(@method, 1) }.should raise_error(TypeError) - -> { @object.send(@method, nil) }.should raise_error(TypeError) - -> { @object.send(@method, false) }.should raise_error(TypeError) + -> { @object.send(@method, 1) }.should.raise(TypeError) + -> { @object.send(@method, nil) }.should.raise(TypeError) + -> { @object.send(@method, false) }.should.raise(TypeError) + end + + platform_is_not :windows do + as_real_superuser do + context "when run by a real superuser" do + it "returns true unconditionally" do + file = tmp('temp.txt') + touch file + + File.chmod(0555, file) + @object.send(@method, file).should == true + + rm_r file + end + end + end end end diff --git a/spec/ruby/shared/file/zero.rb b/spec/ruby/shared/file/zero.rb index 6a9399a021..94285c14c5 100644 --- a/spec/ruby/shared/file/zero.rb +++ b/spec/ruby/shared/file/zero.rb @@ -40,13 +40,13 @@ describe :file_zero, shared: true do end it "raises an ArgumentError if not passed one argument" do - -> { File.zero? }.should raise_error(ArgumentError) + -> { File.zero? }.should.raise(ArgumentError) end it "raises a TypeError if not passed a String type" do - -> { @object.send(@method, nil) }.should raise_error(TypeError) - -> { @object.send(@method, true) }.should raise_error(TypeError) - -> { @object.send(@method, false) }.should raise_error(TypeError) + -> { @object.send(@method, nil) }.should.raise(TypeError) + -> { @object.send(@method, true) }.should.raise(TypeError) + -> { @object.send(@method, false) }.should.raise(TypeError) end it "returns true inside a block opening a file if it is empty" do @@ -57,7 +57,7 @@ describe :file_zero, shared: true do # See https://bugs.ruby-lang.org/issues/449 for background it "returns true or false for a directory" do - @object.send(@method, @dir).should be_true_or_false + [true, false].should.include? @object.send(@method, @dir) end end |
