test/test_kqueue.rb in sleepy_penguin-3.4.1 vs test/test_kqueue.rb in sleepy_penguin-3.5.0

- old
+ new

@@ -1,11 +1,8 @@ -require './test/helper' -$-w = true -Thread.abort_on_exception = true -require 'sleepy_penguin' +require_relative 'helper' -class TestKqueue < Testcase +class TestKqueue < Test::Unit::TestCase include SleepyPenguin def test_kqueue kq = Kqueue.new assert_kind_of IO, kq.to_io @@ -69,7 +66,38 @@ _, status = Process.waitpid2(pid) assert status.success?, status.inspect ensure kq.close end -end if defined?(SleepyPenguin::Kqueue) && - IO.instance_methods.include?(:autoclose=) + + def test_epoll_nest + kq1 = Kqueue.new + kq2 = Kqueue.new + r1, w1 = IO.pipe + r2, w2 = IO.pipe + w1.write '.' + w2.write '.' + kq1.kevent([ + Kevent[r1.fileno, EvFilt::READ, Ev::ADD, 0, 0, r1], + Kevent[w1.fileno, EvFilt::WRITE, Ev::ADD, 0, 0, w1] + ]) + kq2.kevent([ + Kevent[r2.fileno, EvFilt::READ, Ev::ADD, 0, 0, r2], + Kevent[w2.fileno, EvFilt::WRITE, Ev::ADD, 0, 0, w2] + ]) + outer = [] + inner = [] + nr = 0 + kq1.kevent(nil, 2) do |kev1| + outer << kev1.udata + kq2.kevent(nil, 2) do |kev2| + (inner[nr] ||= []) << kev2.udata + end + nr += 1 + end + assert_equal [ r1, w1 ].sort_by(&:fileno), outer.sort_by(&:fileno) + exp = [ r2, w2 ].sort_by(&:fileno) + assert_equal [ exp, exp ], inner.map { |x| x.sort_by(&:fileno) } + ensure + [ r1, w1, r2, w2, kq1, kq2 ].compact.each(&:close) + end +end if defined?(SleepyPenguin::Kqueue)