From ddfc4eb5ef170e7eabc7b545366cac389139f044 Mon Sep 17 00:00:00 2001 From: Tomoyuki Sahara Date: Thu, 19 Jun 2014 09:57:08 +0900 Subject: IO#read(0) should return "" immediately. fixes iij/mruby-socket#13. --- mrblib/io.rb | 15 ++++++++++----- 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) -- cgit v1.2.3