stdlib_libraries/io_wait_forms.rb
tests/_examples/stdlib_libraries/io_wait_forms.rb in the metorex repository.
# IO#wait with an event mask answers the events that came ready, and with a
# timeout and modes answers the stream. Bad arguments are refused.
reading, writing = IO.pipe
p([IO::READABLE, IO::PRIORITY, IO::WRITABLE])
p(reading.wait(IO::READABLE, 0))
p(writing.wait(IO::WRITABLE, 0))
writing.write("ready")
p(reading.wait(IO::READABLE, 0))
p(reading.wait(0, :read).equal?(reading))
p(reading.wait(:r, 0, :w).equal?(reading))
p(writing.wait(0.5, :writable).equal?(writing))
def refused
yield
rescue ArgumentError, TypeError, IOError => error
p([error.class, error.message])
end
refused { writing.wait(0, 0) }
refused { writing.wait(-1, 0) }
refused { reading.wait(0, :sideways) }
refused { reading.wait(0, 1, :r) }
refused { reading.wait(:r, -1) }
refused { reading.wait(nil, 0) }
reading.close
refused { reading.wait(IO::READABLE, 0) }
refused { reading.wait(0, :r) }
writing.close
Output:
[1, 2, 4]
nil
4
1
true
true
true
[ArgumentError, "Events must be positive integer!"]
[ArgumentError, "Events must be positive integer!"]
[ArgumentError, "unsupported mode: sideways"]
[ArgumentError, "timeout given more than once"]
[ArgumentError, "time interval must not be negative"]
[TypeError, "no implicit conversion from nil to integer"]
[IOError, "closed stream"]
[IOError, "closed stream"]