diff options
Diffstat (limited to 'spec/ruby/core/process/waitall_spec.rb')
| -rw-r--r-- | spec/ruby/core/process/waitall_spec.rb | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/spec/ruby/core/process/waitall_spec.rb b/spec/ruby/core/process/waitall_spec.rb new file mode 100644 index 0000000000..f5fbce71c1 --- /dev/null +++ b/spec/ruby/core/process/waitall_spec.rb @@ -0,0 +1,44 @@ +require_relative '../../spec_helper' +require_relative 'fixtures/common' + +describe "Process.waitall" do + ProcessSpecs.use_system_ruby(self) + + before :all do + begin + Process.waitall + rescue NotImplementedError + end + end + + it "returns an empty array when there are no children" do + Process.waitall.should == [] + end + + it "takes no arguments" do + -> { Process.waitall(0) }.should.raise(ArgumentError) + end + + platform_is_not :windows do + it "waits for all children and returns an array of pid/status pairs" do + pids = [] + pids << Process.spawn(ruby_cmd('exit 2')) + pids << Process.spawn(ruby_cmd('exit 1')) + pids << Process.spawn(ruby_cmd('exit 0')) + a = Process.waitall + pids.each { |pid| + -> { Process.kill(0, pid) }.should.raise(Errno::ESRCH) + } + + a.should.is_a?(Array) + a.size.should == 3 + pids.each { |pid| + pid_status = a.assoc(pid) + pid_status.should.is_a?(Array) + pid_status.size.should == 2 + pid_status.first.should == pid + pid_status.last.should.is_a?(Process::Status) + } + end + end +end |
