summaryrefslogtreecommitdiff
path: root/spec/ruby/library/stringio/shared
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/library/stringio/shared')
-rw-r--r--spec/ruby/library/stringio/shared/codepoints.rb8
-rw-r--r--spec/ruby/library/stringio/shared/each.rb69
-rw-r--r--spec/ruby/library/stringio/shared/each_byte.rb6
-rw-r--r--spec/ruby/library/stringio/shared/each_char.rb6
-rw-r--r--spec/ruby/library/stringio/shared/getc.rb6
-rw-r--r--spec/ruby/library/stringio/shared/isatty.rb2
-rw-r--r--spec/ruby/library/stringio/shared/read.rb52
-rw-r--r--spec/ruby/library/stringio/shared/readchar.rb8
-rw-r--r--spec/ruby/library/stringio/shared/sysread.rb4
-rw-r--r--spec/ruby/library/stringio/shared/write.rb74
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