diff options
Diffstat (limited to 'spec/ruby/library/stringio/shared/read.rb')
| -rw-r--r-- | spec/ruby/library/stringio/shared/read.rb | 50 |
1 files changed, 37 insertions, 13 deletions
diff --git a/spec/ruby/library/stringio/shared/read.rb b/spec/ruby/library/stringio/shared/read.rb index 139c4fb02f..22f76b0fb0 100644 --- a/spec/ruby/library/stringio/shared/read.rb +++ b/spec/ruby/library/stringio/shared/read.rb @@ -5,30 +5,48 @@ describe :stringio_read, shared: true do it "returns the passed buffer String" do # Note: Rubinius bug: - # @io.send(@method, 7, buffer = "").should equal(buffer) - ret = @io.send(@method, 7, buffer = "") + # @io.send(@method, 7, buffer = +"").should equal(buffer) + ret = @io.send(@method, 7, buffer = +"") ret.should equal(buffer) end it "reads length bytes and writes them to the buffer String" do - @io.send(@method, 7, buffer = "") + @io.send(@method, 7, buffer = +"").should.equal?(buffer) buffer.should == "example" end + guard -> { StringIO::VERSION < "3.1.2" } do + it "does not preserve the encoding of the given buffer" do + buffer = ''.encode(Encoding::ISO_8859_1) + @io.send(@method, 7, buffer) + + buffer.encoding.should_not == Encoding::ISO_8859_1 + end + end + + guard -> { StringIO::VERSION >= "3.1.2" } do + it "preserves the encoding of the given buffer" do + buffer = ''.encode(Encoding::ISO_8859_1) + @io.send(@method, 7, buffer) + + buffer.encoding.should == Encoding::ISO_8859_1 + end + end + it "tries to convert the passed buffer Object to a String using #to_str" do obj = mock("to_str") - obj.should_receive(:to_str).and_return(buffer = "") + obj.should_receive(:to_str).and_return(buffer = +"") @io.send(@method, 7, obj) buffer.should == "example" end it "raises a TypeError when the passed buffer Object can't be converted to a String" do - lambda { @io.send(@method, 7, Object.new) }.should raise_error(TypeError) + -> { @io.send(@method, 7, Object.new) }.should raise_error(TypeError) end - it "raises a #{frozen_error_class} error when passed a frozen String as buffer" do - lambda { @io.send(@method, 7, "".freeze) }.should raise_error(frozen_error_class) + it "raises a FrozenError error when passed a frozen String as buffer" do + -> { @io.send(@method, 7, "".freeze) }.should raise_error(FrozenError) end end @@ -61,11 +79,11 @@ describe :stringio_read_length, shared: true do end it "raises a TypeError when the passed length can't be converted to an Integer" do - lambda { @io.send(@method, Object.new) }.should raise_error(TypeError) + -> { @io.send(@method, Object.new) }.should raise_error(TypeError) end it "raises a TypeError when the passed length is negative" do - lambda { @io.send(@method, -2) }.should raise_error(ArgumentError) + -> { @io.send(@method, -2) }.should raise_error(ArgumentError) end it "returns a binary String" do @@ -75,7 +93,7 @@ end describe :stringio_read_no_arguments, shared: true do before :each do - @io = StringIO.new("example") + @io = StringIO.new(+"example") end it "reads the whole content starting from the current position" do @@ -89,6 +107,12 @@ describe :stringio_read_no_arguments, shared: true do @io.send(@method) @io.pos.should eql(7) end + + it "correctly update the current position in bytes when multi-byte characters are used" do + @io.print("example\u03A3") # Overwrite the original string with 8 characters containing 9 bytes. + @io.send(@method) + @io.pos.should eql(9) + end end describe :stringio_read_nil, shared: true do @@ -111,11 +135,11 @@ end describe :stringio_read_not_readable, shared: true do it "raises an IOError" do - io = StringIO.new("test", "w") - lambda { io.send(@method) }.should raise_error(IOError) + io = StringIO.new(+"test", "w") + -> { io.send(@method) }.should raise_error(IOError) io = StringIO.new("test") io.close_read - lambda { io.send(@method) }.should raise_error(IOError) + -> { io.send(@method) }.should raise_error(IOError) end end |
