diff options
Diffstat (limited to 'test/fiber/test_process.rb')
-rw-r--r-- | test/fiber/test_process.rb | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/test/fiber/test_process.rb b/test/fiber/test_process.rb index c6583cac9b..a09b070c0a 100644 --- a/test/fiber/test_process.rb +++ b/test/fiber/test_process.rb @@ -3,13 +3,15 @@ require 'test/unit' require_relative 'scheduler' class TestFiberProcess < Test::Unit::TestCase + TRUE_CMD = RUBY_PLATFORM =~ /mswin|mingw/ ? "exit 0" : "true" + def test_process_wait Thread.new do scheduler = Scheduler.new Fiber.set_scheduler scheduler Fiber.schedule do - pid = Process.spawn("true") + pid = Process.spawn(TRUE_CMD) Process.wait(pid) # TODO test that scheduler was invoked. @@ -25,7 +27,7 @@ class TestFiberProcess < Test::Unit::TestCase Fiber.set_scheduler scheduler Fiber.schedule do - system("true") + system(TRUE_CMD) # TODO test that scheduler was invoked (currently it's not). @@ -33,4 +35,40 @@ class TestFiberProcess < Test::Unit::TestCase end end.join end + + def test_system_faulty_process_wait + Thread.new do + scheduler = Scheduler.new + + def scheduler.process_wait(pid, flags) + Fiber.blocking{Process.wait(pid, flags)} + + # Don't return `Process::Status` instance. + return false + end + + Fiber.set_scheduler scheduler + + Fiber.schedule do + assert_raise TypeError do + system(TRUE_CMD) + end + end + end.join + end + + def test_fork + omit 'fork not supported' unless Process.respond_to?(:fork) + Thread.new do + scheduler = Scheduler.new + Fiber.set_scheduler scheduler + + Fiber.schedule do + pid = Process.fork {} + Process.wait(pid) + + assert_predicate $?, :success? + end + end.join + end end |