reimplement #eof. fixes #66.

This commit is contained in:
Tomoyuki Sahara
2016-09-30 16:27:11 +09:00
parent 51cf6b6048
commit 2229a2aa0f
2 changed files with 27 additions and 27 deletions
+6 -21
View File
@@ -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
+21 -6
View File
@@ -70,14 +70,29 @@ end
#assert('IO#each_line', '15.2.20.5.5') do
assert('IO#eof?', '15.2.20.5.6') do
io = IO.new(IO.sysopen($mrbtest_io_rfname))
$mrbtest_io_msg.each_char { |ch|
# XXX
#assert_false io.eof?
io.getc
}
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))
assert_false io.eof?
io.readchar
assert_false io.eof?
io.read
assert_true io.eof?
io.close
true
end