diff options
Diffstat (limited to 'test/fiber')
-rw-r--r-- | test/fiber/scheduler.rb | 7 | ||||
-rw-r--r-- | test/fiber/test_io.rb | 22 |
2 files changed, 29 insertions, 0 deletions
diff --git a/test/fiber/scheduler.rb b/test/fiber/scheduler.rb index 322564fe6d..3fd41ef6f1 100644 --- a/test/fiber/scheduler.rb +++ b/test/fiber/scheduler.rb @@ -197,6 +197,13 @@ class Scheduler @writable.delete(io) end + def io_select(...) + # Emulate the operation using a non-blocking thread: + Thread.new do + IO.select(...) + end.value + end + # Used for Kernel#sleep and Thread::Mutex#sleep def kernel_sleep(duration = nil) # $stderr.puts [__method__, duration, Fiber.current].inspect diff --git a/test/fiber/test_io.rb b/test/fiber/test_io.rb index 4252641cde..821a169e44 100644 --- a/test/fiber/test_io.rb +++ b/test/fiber/test_io.rb @@ -172,4 +172,26 @@ class TestFiberIO < Test::Unit::TestCase assert_predicate(i, :closed?) assert_predicate(o, :closed?) end + + def test_io_select + omit "UNIXSocket is not defined!" unless defined?(UNIXSocket) + + UNIXSocket.pair do |r, w| + result = nil + + thread = Thread.new do + scheduler = Scheduler.new + Fiber.set_scheduler scheduler + + Fiber.schedule do + w.write("Hello World") + result = IO.select([r], [w]) + end + end + + thread.join + + assert_equal [[r], [w], []], result + end + end end |