From 2229a2aa0fcd76bd5498417aca934d6ec7a211ef Mon Sep 17 00:00:00 2001 From: Tomoyuki Sahara Date: Fri, 30 Sep 2016 16:27:11 +0900 Subject: reimplement #eof. fixes #66. --- mrblib/io.rb | 27 ++++++--------------------- test/io.rb | 25 ++++++++++++++++++++----- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/mrblib/io.rb b/mrblib/io.rb index 4bcf4f800..8408aea87 100644 --- a/mrblib/io.rb +++ b/mrblib/io.rb @@ -133,20 +133,12 @@ class IO end def eof? - return true if @buf && @buf.size > 0 - - ret = false - char = '' - begin - char = sysread(1) - rescue EOFError => e - ret = true - ensure - _ungets(char) + buf = _read_buf + return buf.size == 0 + rescue EOFError + return true end - - ret end alias_method :eof, :eof? @@ -176,24 +168,17 @@ class IO @buf = sysread(BUF_SIZE) end - def _ungets(substr) + def ungetc(substr) raise TypeError.new "expect String, got #{substr.class}" unless substr.is_a?(String) - raise IOError if @pos == 0 || @pos.nil? @pos -= substr.size if @buf.empty? - @buf = substr + @buf = substr.dup else @buf = substr + @buf end nil end - def ungetc(char) - raise IOError if @pos == 0 || @pos.nil? - _ungets(char) - nil - end - def read(length = nil) unless length.nil? unless length.is_a? Fixnum diff --git a/test/io.rb b/test/io.rb index 1b0a2d52e..c3f78da7e 100644 --- a/test/io.rb +++ b/test/io.rb @@ -70,14 +70,29 @@ end #assert('IO#each_line', '15.2.20.5.5') do assert('IO#eof?', '15.2.20.5.6') do + if false # XXX: not implemented yet + io = IO.new(IO.sysopen($mrbtest_io_wfname, 'w'), 'w') + assert_raise(IOError) do + io.eof? + end + end + + # empty file + io = IO.open(IO.sysopen($mrbtest_io_wfname, 'w'), 'w') + io.close + io = IO.open(IO.sysopen($mrbtest_io_wfname, 'r'), 'r') + assert_true io.eof? + io.close + + # nonempty file io = IO.new(IO.sysopen($mrbtest_io_rfname)) - $mrbtest_io_msg.each_char { |ch| - # XXX - #assert_false io.eof? - io.getc - } + assert_false io.eof? + io.readchar + assert_false io.eof? + io.read assert_true io.eof? io.close + true end -- cgit v1.2.3