diff options
Diffstat (limited to 'spec/ruby/library/stringio/shared')
| -rw-r--r-- | spec/ruby/library/stringio/shared/codepoints.rb | 8 | ||||
| -rw-r--r-- | spec/ruby/library/stringio/shared/each.rb | 69 | ||||
| -rw-r--r-- | spec/ruby/library/stringio/shared/each_byte.rb | 6 | ||||
| -rw-r--r-- | spec/ruby/library/stringio/shared/each_char.rb | 6 | ||||
| -rw-r--r-- | spec/ruby/library/stringio/shared/getc.rb | 6 | ||||
| -rw-r--r-- | spec/ruby/library/stringio/shared/isatty.rb | 2 | ||||
| -rw-r--r-- | spec/ruby/library/stringio/shared/read.rb | 52 | ||||
| -rw-r--r-- | spec/ruby/library/stringio/shared/readchar.rb | 8 | ||||
| -rw-r--r-- | spec/ruby/library/stringio/shared/sysread.rb | 4 | ||||
| -rw-r--r-- | spec/ruby/library/stringio/shared/write.rb | 74 |
10 files changed, 57 insertions, 178 deletions
diff --git a/spec/ruby/library/stringio/shared/codepoints.rb b/spec/ruby/library/stringio/shared/codepoints.rb index 25333bb0fd..c8ca03329f 100644 --- a/spec/ruby/library/stringio/shared/codepoints.rb +++ b/spec/ruby/library/stringio/shared/codepoints.rb @@ -20,15 +20,15 @@ describe :stringio_codepoints, shared: true do it "raises an error if reading invalid sequence" do @io.pos = 1 # inside of a multibyte sequence - -> { @enum.first }.should raise_error(ArgumentError) + lambda { @enum.first }.should raise_error(ArgumentError) end it "raises an IOError if not readable" do @io.close_read - -> { @enum.to_a }.should raise_error(IOError) + lambda { @enum.to_a }.should raise_error(IOError) - io = StringIO.new(+"xyz", "w") - -> { io.send(@method).to_a }.should raise_error(IOError) + io = StringIO.new("xyz", "w") + lambda { io.send(@method).to_a }.should raise_error(IOError) end diff --git a/spec/ruby/library/stringio/shared/each.rb b/spec/ruby/library/stringio/shared/each.rb index e0dd3f9b8f..55ed27c1c7 100644 --- a/spec/ruby/library/stringio/shared/each.rb +++ b/spec/ruby/library/stringio/shared/each.rb @@ -36,22 +36,11 @@ describe :stringio_each_separator, shared: true do seen.should == ["2 1 2 1 2"] end - version_is StringIO::VERSION, ""..."3.0.4" do #ruby_version_is ""..."3.2" do - it "yields each paragraph with two separation characters when passed an empty String as separator" do - seen = [] - io = StringIO.new("para1\n\npara2\n\n\npara3") - io.send(@method, "") {|s| seen << s} - seen.should == ["para1\n\n", "para2\n\n", "para3"] - end - end - - version_is StringIO::VERSION, "3.0.4" do #ruby_version_is "3.2" do - it "yields each paragraph with all separation characters when passed an empty String as separator" do - seen = [] - io = StringIO.new("para1\n\npara2\n\n\npara3") - io.send(@method, "") {|s| seen << s} - seen.should == ["para1\n\n", "para2\n\n\n", "para3"] - end + it "yields each paragraph when passed an empty String as separator" do + seen = [] + io = StringIO.new("para1\n\npara2\n\n\npara3") + io.send(@method, "") {|s| seen << s} + seen.should == ["para1\n\n", "para2\n\n", "para3"] end end @@ -82,12 +71,11 @@ describe :stringio_each_no_arguments, shared: true do it "uses $/ as the default line separator" do seen = [] begin - old_rs = $/ - suppress_warning {$/ = " "} + old_rs, $/ = $/, " " @io.send(@method) {|s| seen << s } seen.should eql(["a ", "b ", "c ", "d ", "e\n1 ", "2 ", "3 ", "4 ", "5"]) ensure - suppress_warning {$/ = old_rs} + $/ = old_rs end end @@ -107,12 +95,12 @@ end describe :stringio_each_not_readable, shared: true do it "raises an IOError" do - io = StringIO.new(+"a b c d e", "w") - -> { io.send(@method) { |b| b } }.should raise_error(IOError) + io = StringIO.new("a b c d e", "w") + lambda { io.send(@method) { |b| b } }.should raise_error(IOError) io = StringIO.new("a b c d e") io.close_read - -> { io.send(@method) { |b| b } }.should raise_error(IOError) + lambda { io.send(@method) { |b| b } }.should raise_error(IOError) end end @@ -123,41 +111,4 @@ describe :stringio_each_chomp, shared: true do io.send(@method, chomp: true) {|s| seen << s } seen.should == ["a b \rc d e", "1 2 3 4 5", "the end"] end - - it "returns each line with removed newline characters when called without block" do - seen = [] - io = StringIO.new("a b \rc d e\n1 2 3 4 5\r\nthe end") - enum = io.send(@method, chomp: true) - enum.each {|s| seen << s } - seen.should == ["a b \rc d e", "1 2 3 4 5", "the end"] - end -end - -describe :stringio_each_separator_and_chomp, shared: true do - it "yields each line with removed separator to the passed block" do - seen = [] - io = StringIO.new("a b \nc d e|1 2 3 4 5\n|the end") - io.send(@method, "|", chomp: true) {|s| seen << s } - seen.should == ["a b \nc d e", "1 2 3 4 5\n", "the end"] - end - - it "returns each line with removed separator when called without block" do - seen = [] - io = StringIO.new("a b \nc d e|1 2 3 4 5\n|the end") - enum = io.send(@method, "|", chomp: true) - enum.each {|s| seen << s } - seen.should == ["a b \nc d e", "1 2 3 4 5\n", "the end"] - end -end - -describe :stringio_each_limit, shared: true do - before :each do - @io = StringIO.new("a b c d e\n1 2 3 4 5") - end - - it "returns the data read until the limit is met" do - seen = [] - @io.send(@method, 4) { |s| seen << s } - seen.should == ["a b ", "c d ", "e\n", "1 2 ", "3 4 ", "5"] - end end diff --git a/spec/ruby/library/stringio/shared/each_byte.rb b/spec/ruby/library/stringio/shared/each_byte.rb index b51fa38f2f..1dc48ee437 100644 --- a/spec/ruby/library/stringio/shared/each_byte.rb +++ b/spec/ruby/library/stringio/shared/each_byte.rb @@ -38,11 +38,11 @@ end describe :stringio_each_byte_not_readable, shared: true do it "raises an IOError" do - io = StringIO.new(+"xyz", "w") - -> { io.send(@method) { |b| b } }.should raise_error(IOError) + io = StringIO.new("xyz", "w") + lambda { io.send(@method) { |b| b } }.should raise_error(IOError) io = StringIO.new("xyz") io.close_read - -> { io.send(@method) { |b| b } }.should raise_error(IOError) + lambda { io.send(@method) { |b| b } }.should raise_error(IOError) end end diff --git a/spec/ruby/library/stringio/shared/each_char.rb b/spec/ruby/library/stringio/shared/each_char.rb index 197237c1c8..35efdcb749 100644 --- a/spec/ruby/library/stringio/shared/each_char.rb +++ b/spec/ruby/library/stringio/shared/each_char.rb @@ -26,11 +26,11 @@ end describe :stringio_each_char_not_readable, shared: true do it "raises an IOError" do - io = StringIO.new(+"xyz", "w") - -> { io.send(@method) { |b| b } }.should raise_error(IOError) + io = StringIO.new("xyz", "w") + lambda { io.send(@method) { |b| b } }.should raise_error(IOError) io = StringIO.new("xyz") io.close_read - -> { io.send(@method) { |b| b } }.should raise_error(IOError) + lambda { io.send(@method) { |b| b } }.should raise_error(IOError) end end diff --git a/spec/ruby/library/stringio/shared/getc.rb b/spec/ruby/library/stringio/shared/getc.rb index ba65040bce..3e064f9c1e 100644 --- a/spec/ruby/library/stringio/shared/getc.rb +++ b/spec/ruby/library/stringio/shared/getc.rb @@ -33,11 +33,11 @@ end describe :stringio_getc_not_readable, shared: true do it "raises an IOError" do - io = StringIO.new(+"xyz", "w") - -> { io.send(@method) }.should raise_error(IOError) + io = StringIO.new("xyz", "w") + lambda { io.send(@method) }.should raise_error(IOError) io = StringIO.new("xyz") io.close_read - -> { io.send(@method) }.should raise_error(IOError) + lambda { io.send(@method) }.should raise_error(IOError) end end diff --git a/spec/ruby/library/stringio/shared/isatty.rb b/spec/ruby/library/stringio/shared/isatty.rb index c9e7ee7321..3da5999953 100644 --- a/spec/ruby/library/stringio/shared/isatty.rb +++ b/spec/ruby/library/stringio/shared/isatty.rb @@ -1,5 +1,5 @@ describe :stringio_isatty, shared: true do it "returns false" do - StringIO.new("tty").send(@method).should be_false + StringIO.new('tty').send(@method).should be_false end end diff --git a/spec/ruby/library/stringio/shared/read.rb b/spec/ruby/library/stringio/shared/read.rb index 8ef6ec2734..025829a2b1 100644 --- a/spec/ruby/library/stringio/shared/read.rb +++ b/spec/ruby/library/stringio/shared/read.rb @@ -5,48 +5,30 @@ 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 = +"").should.equal?(buffer) + @io.send(@method, 7, buffer = "") buffer.should == "example" end - ruby_version_is ""..."3.4" 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 - - ruby_version_is "3.4" 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 - -> { @io.send(@method, 7, Object.new) }.should raise_error(TypeError) + lambda { @io.send(@method, 7, Object.new) }.should raise_error(TypeError) end - it "raises a FrozenError error when passed a frozen String as buffer" do - -> { @io.send(@method, 7, "".freeze) }.should raise_error(FrozenError) + it "raises an error when passed a frozen String as buffer" do + lambda { @io.send(@method, 7, "".freeze) }.should raise_error(RuntimeError) end end @@ -79,21 +61,21 @@ describe :stringio_read_length, shared: true do end it "raises a TypeError when the passed length can't be converted to an Integer" do - -> { @io.send(@method, Object.new) }.should raise_error(TypeError) + lambda { @io.send(@method, Object.new) }.should raise_error(TypeError) end it "raises a TypeError when the passed length is negative" do - -> { @io.send(@method, -2) }.should raise_error(ArgumentError) + lambda { @io.send(@method, -2) }.should raise_error(ArgumentError) end it "returns a binary String" do - @io.send(@method, 4).encoding.should == Encoding::BINARY + @io.send(@method, 4).encoding.should == Encoding::ASCII_8BIT end 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 @@ -107,12 +89,6 @@ 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 @@ -135,11 +111,11 @@ end describe :stringio_read_not_readable, shared: true do it "raises an IOError" do - io = StringIO.new(+"test", "w") - -> { io.send(@method) }.should raise_error(IOError) + io = StringIO.new("test", "w") + lambda { io.send(@method) }.should raise_error(IOError) io = StringIO.new("test") io.close_read - -> { io.send(@method) }.should raise_error(IOError) + lambda { io.send(@method) }.should raise_error(IOError) end end diff --git a/spec/ruby/library/stringio/shared/readchar.rb b/spec/ruby/library/stringio/shared/readchar.rb index 72d7446c36..19194f0680 100644 --- a/spec/ruby/library/stringio/shared/readchar.rb +++ b/spec/ruby/library/stringio/shared/readchar.rb @@ -13,17 +13,17 @@ describe :stringio_readchar, shared: true do it "raises an EOFError when self is at the end" do @io.pos = 7 - -> { @io.send(@method) }.should raise_error(EOFError) + lambda { @io.send(@method) }.should raise_error(EOFError) end end describe :stringio_readchar_not_readable, shared: true do it "raises an IOError" do - io = StringIO.new(+"a b c d e", "w") - -> { io.send(@method) }.should raise_error(IOError) + io = StringIO.new("a b c d e", "w") + lambda { io.send(@method) }.should raise_error(IOError) io = StringIO.new("a b c d e") io.close_read - -> { io.send(@method) }.should raise_error(IOError) + lambda { io.send(@method) }.should raise_error(IOError) end end diff --git a/spec/ruby/library/stringio/shared/sysread.rb b/spec/ruby/library/stringio/shared/sysread.rb index 3e23fbc233..9800b2339b 100644 --- a/spec/ruby/library/stringio/shared/sysread.rb +++ b/spec/ruby/library/stringio/shared/sysread.rb @@ -1,4 +1,4 @@ -describe :stringio_sysread_length, shared: true do +describe :stringio_sysread_length, :shared => true do before :each do @io = StringIO.new("example") end @@ -10,6 +10,6 @@ describe :stringio_sysread_length, shared: true do it "raises an EOFError when passed length > 0 and no data remains" do @io.read.should == "example" - -> { @io.send(@method, 1) }.should raise_error(EOFError) + lambda { @io.sysread(1) }.should raise_error(EOFError) end end diff --git a/spec/ruby/library/stringio/shared/write.rb b/spec/ruby/library/stringio/shared/write.rb index 4661658baf..bcb548bbd0 100644 --- a/spec/ruby/library/stringio/shared/write.rb +++ b/spec/ruby/library/stringio/shared/write.rb @@ -1,6 +1,6 @@ describe :stringio_write, shared: true do before :each do - @io = StringIO.new(+'12345') + @io = StringIO.new('12345') end it "tries to convert the passed Object to a String using #to_s" do @@ -13,7 +13,7 @@ end describe :stringio_write_string, shared: true do before :each do - @io = StringIO.new(+'12345') + @io = StringIO.new('12345') end # TODO: RDoc says that #write appends at the current position. @@ -45,79 +45,31 @@ describe :stringio_write_string, shared: true do @io.pos.should eql(4) end - it "handles concurrent writes correctly" do - @io = StringIO.new - n = 8 - go = false - threads = n.times.map { |i| - Thread.new { - Thread.pass until go - @io.write i.to_s - } - } - go = true - threads.each(&:join) - @io.string.size.should == n.times.map(&:to_s).join.size + it "taints self's String when the passed argument is tainted" do + @io.send(@method, "test".taint) + @io.string.tainted?.should be_true end - it "handles writing non-ASCII UTF-8 after seek" do - @io.binmode - @io << "\x80" - @io.pos = 0 - @io << "\x81" - @io.string.should == "\x812345".b - end - - it "handles writing with position < buffer size" do - @io.pos = 2 - @io.write "abc" - @io.string.should == "12abc" - - @io.pos = 2 - @io.write "de" - @io.string.should == "12dec" - - @io.pos = 2 - @io.write "fghi" - @io.string.should == "12fghi" - end - - it "transcodes the given string when the external encoding is set and neither is BINARY" do - utf8_str = "hello" - io = StringIO.new.set_encoding(Encoding::UTF_16BE) - io.external_encoding.should == Encoding::UTF_16BE - - io.send(@method, utf8_str) - - expected = [0, 104, 0, 101, 0, 108, 0, 108, 0, 111] # UTF-16BE bytes for "hello" - io.string.bytes.should == expected - end - - it "does not transcode the given string when the external encoding is set and the string encoding is BINARY" do - str = "été_".b - io = StringIO.new.set_encoding(Encoding::UTF_16BE) - io.external_encoding.should == Encoding::UTF_16BE - - io.send(@method, str) - - io.string.bytes.should == str.bytes + it "does not taint self when the passed argument is tainted" do + @io.send(@method, "test".taint) + @io.tainted?.should be_false end end describe :stringio_write_not_writable, shared: true do it "raises an IOError" do - io = StringIO.new(+"test", "r") - -> { io.send(@method, "test") }.should raise_error(IOError) + io = StringIO.new("test", "r") + lambda { io.send(@method, "test") }.should raise_error(IOError) - io = StringIO.new(+"test") + io = StringIO.new("test") io.close_write - -> { io.send(@method, "test") }.should raise_error(IOError) + lambda { io.send(@method, "test") }.should raise_error(IOError) end end describe :stringio_write_append, shared: true do before :each do - @io = StringIO.new(+"example", "a") + @io = StringIO.new("example", "a") end it "appends the passed argument to the end of self" do |
