From c31bcdf409bd08af35789ddd253fe5e20d27db5b Mon Sep 17 00:00:00 2001 From: Herwin Date: Sat, 14 Oct 2023 12:13:46 +0200 Subject: [PATCH 1/2] Add specs for non default argument types in IO#pwrite --- core/io/pwrite_spec.rb | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/core/io/pwrite_spec.rb b/core/io/pwrite_spec.rb index c10578a8e..839e6e71c 100644 --- a/core/io/pwrite_spec.rb +++ b/core/io/pwrite_spec.rb @@ -28,6 +28,20 @@ @file.pread(6, 0).should == "foobar" end + it "calls #to_s on the object to be written" do + object = mock("to_s") + object.should_receive(:to_s).and_return("foo") + @file.pwrite(object, 0) + @file.pread(3, 0).should == "foo" + end + + it "calls #to_int on the offset" do + offset = mock("to_int") + offset.should_receive(:to_int).and_return(2) + @file.pwrite("foo", offset) + @file.pread(3, 2).should == "foo" + end + it "raises IOError when file is not open in write mode" do File.open(@fname, "r") do |file| -> { file.pwrite("foo", 1) }.should raise_error(IOError) @@ -39,5 +53,17 @@ file.close -> { file.pwrite("foo", 1) }.should raise_error(IOError) end + + it "raises a NoMethodError if object does not respond to #to_s" do + -> { + @file.pwrite(BasicObject.new, 0) + }.should raise_error(NoMethodError, /undefined method `to_s'/) + end + + it "raises a TypeError if the offset cannot be converted to an Integer" do + -> { + @file.pwrite("foo", Object.new) + }.should raise_error(TypeError, "no implicit conversion of Object into Integer") + end end end From d3a3f56c55ec021eafa935c2ecbce876f4ec140f Mon Sep 17 00:00:00 2001 From: Herwin Date: Sat, 14 Oct 2023 12:15:09 +0200 Subject: [PATCH 2/2] Add message matchers for exception specs in IO#pwrite --- core/io/pwrite_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/io/pwrite_spec.rb b/core/io/pwrite_spec.rb index 839e6e71c..00d40db28 100644 --- a/core/io/pwrite_spec.rb +++ b/core/io/pwrite_spec.rb @@ -44,14 +44,14 @@ it "raises IOError when file is not open in write mode" do File.open(@fname, "r") do |file| - -> { file.pwrite("foo", 1) }.should raise_error(IOError) + -> { file.pwrite("foo", 1) }.should raise_error(IOError, "not opened for writing") end end it "raises IOError when file is closed" do file = File.open(@fname, "w+") file.close - -> { file.pwrite("foo", 1) }.should raise_error(IOError) + -> { file.pwrite("foo", 1) }.should raise_error(IOError, "closed stream") end it "raises a NoMethodError if object does not respond to #to_s" do