Commit 2229a2aa authored by Tomoyuki Sahara's avatar Tomoyuki Sahara

reimplement #eof. fixes #66.

parent 51cf6b60
......@@ -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
......
......@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment