diff options
Diffstat (limited to 'spec/ruby/core/io/shared/each.rb')
| -rw-r--r-- | spec/ruby/core/io/shared/each.rb | 76 |
1 files changed, 43 insertions, 33 deletions
diff --git a/spec/ruby/core/io/shared/each.rb b/spec/ruby/core/io/shared/each.rb index 607e7de03e..ae60c3506a 100644 --- a/spec/ruby/core/io/shared/each.rb +++ b/spec/ruby/core/io/shared/each.rb @@ -24,7 +24,7 @@ describe :io_each, shared: true do end it "returns self" do - @io.send(@method) { |l| l }.should equal(@io) + @io.send(@method) { |l| l }.should.equal?(@io) end it "does not change $_" do @@ -33,12 +33,8 @@ describe :io_each, shared: true do $_.should == "test" end - it "returns self" do - @io.send(@method) { |l| l }.should equal(@io) - end - it "raises an IOError when self is not readable" do - -> { IOSpecs.closed_io.send(@method) {} }.should raise_error(IOError) + -> { IOSpecs.closed_io.send(@method) {} }.should.raise(IOError) end it "makes line count accessible via lineno" do @@ -54,7 +50,7 @@ describe :io_each, shared: true do describe "when no block is given" do it "returns an Enumerator" do enum = @io.send(@method) - enum.should be_an_instance_of(Enumerator) + enum.should.instance_of?(Enumerator) enum.each { |l| ScratchPad << l } ScratchPad.recorded.should == IOSpecs.lines @@ -74,9 +70,13 @@ describe :io_each, shared: true do describe "when limit is 0" do it "raises an ArgumentError" do # must pass block so Enumerator is evaluated and raises - -> { @io.send(@method, 0){} }.should raise_error(ArgumentError) + -> { @io.send(@method, 0){} }.should.raise(ArgumentError) end end + + it "does not accept Integers that don't fit in a C off_t" do + -> { @io.send(@method, 2**128){} }.should.raise(RangeError) + end end describe "when passed a String containing one space as a separator" do @@ -113,13 +113,20 @@ describe :io_each, shared: true do @io.send(@method, "") { |s| ScratchPad << s } ScratchPad.recorded.should == IOSpecs.paragraphs end + + it "discards leading newlines" do + @io.readline + @io.readline + @io.send(@method, "") { |s| ScratchPad << s } + ScratchPad.recorded.should == IOSpecs.paragraphs[1..-1] + end end describe "with both separator and limit" do describe "when no block is given" do it "returns an Enumerator" do enum = @io.send(@method, nil, 1024) - enum.should be_an_instance_of(Enumerator) + enum.should.instance_of?(Enumerator) enum.each { |l| ScratchPad << l } ScratchPad.recorded.should == [IOSpecs.lines.join] @@ -136,7 +143,7 @@ describe :io_each, shared: true do describe "when a block is given" do it "accepts an empty block" do - @io.send(@method, nil, 1024) {}.should equal(@io) + @io.send(@method, nil, 1024) {}.should.equal?(@io) end describe "when passed nil as a separator" do @@ -152,6 +159,13 @@ describe :io_each, shared: true do @io.send(@method, "", 1024) { |s| ScratchPad << s } ScratchPad.recorded.should == IOSpecs.paragraphs end + + it "discards leading newlines" do + @io.readline + @io.readline + @io.send(@method, "", 1024) { |s| ScratchPad << s } + ScratchPad.recorded.should == IOSpecs.paragraphs[1..-1] + end end end end @@ -162,16 +176,14 @@ describe :io_each, shared: true do ScratchPad.recorded.should == IOSpecs.lines_without_newline_characters end - ruby_version_is "3.0" do - it "raises exception when options passed as Hash" do - -> { - @io.send(@method, { chomp: true }) { |s| } - }.should raise_error(TypeError) + it "raises exception when options passed as Hash" do + -> { + @io.send(@method, { chomp: true }) { |s| } + }.should.raise(TypeError) - -> { - @io.send(@method, "\n", 1, { chomp: true }) { |s| } - }.should raise_error(ArgumentError, "wrong number of arguments (given 3, expected 0..2)") - end + -> { + @io.send(@method, "\n", 1, { chomp: true }) { |s| } + }.should.raise(ArgumentError, "wrong number of arguments (given 3, expected 0..2)") end end @@ -190,20 +202,10 @@ describe :io_each, shared: true do end describe "when passed chomp and nil as a separator" do - ruby_version_is "3.2" do - it "yields self's content" do - @io.pos = 100 - @io.send(@method, nil, chomp: true) { |s| ScratchPad << s } - ScratchPad.recorded.should == ["qui a linha cinco.\nHere is line six.\n"] - end - end - - ruby_version_is ""..."3.2" do - it "yields self's content without trailing new line character" do - @io.pos = 100 - @io.send(@method, nil, chomp: true) { |s| ScratchPad << s } - ScratchPad.recorded.should == ["qui a linha cinco.\nHere is line six."] - end + it "yields self's content" do + @io.pos = 100 + @io.send(@method, nil, chomp: true) { |s| ScratchPad << s } + ScratchPad.recorded.should == ["qui a linha cinco.\nHere is line six.\n"] end end @@ -220,6 +222,14 @@ describe :io_each, shared: true do ] end end + + describe "when passed too many arguments" do + it "raises ArgumentError" do + -> { + @io.send(@method, "", 1, "excess argument", chomp: true) {} + }.should.raise(ArgumentError) + end + end end describe :io_each_default_separator, shared: true do |
