diff options
| -rw-r--r-- | mrblib/io.rb | 15 | ||||
| -rw-r--r-- | test/io.rb | 1 |
2 files changed, 11 insertions, 5 deletions
diff --git a/mrblib/io.rb b/mrblib/io.rb index 902d847d2..fceea1171 100644 --- a/mrblib/io.rb +++ b/mrblib/io.rb @@ -171,11 +171,16 @@ class IO end def read(length = nil) - unless length.nil? or length.class == Fixnum - raise TypeError.new "can't convert #{length.class} into Integer" - end - if length && length < 0 - raise ArgumentError.new "negative length: #{length} given" + unless length.nil? + unless length.is_a? Fixnum + raise TypeError.new "can't convert #{length.class} into Integer" + end + if length < 0 + raise ArgumentError.new "negative length: #{length} given" + end + if length == 0 + return "" # easy case + end end str = '' diff --git a/test/io.rb b/test/io.rb index b5b952425..ebfd2dd54 100644 --- a/test/io.rb +++ b/test/io.rb @@ -93,6 +93,7 @@ assert('IO#read', '15.2.20.5.14') do assert_raise(TypeError) { io.read("str") } len = $mrbtest_io_msg.length + assert_equal '', io.read(0) assert_equal 'mruby', io.read(5) assert_equal $mrbtest_io_msg[5,len], io.read(len) |
