about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--test/test_kqueue_io.rb47
1 files changed, 47 insertions, 0 deletions
diff --git a/test/test_kqueue_io.rb b/test/test_kqueue_io.rb
index ea18767..dc5f8ea 100644
--- a/test/test_kqueue_io.rb
+++ b/test/test_kqueue_io.rb
@@ -6,6 +6,53 @@ require 'sleepy_penguin'
 class TestKqueueIO < Test::Unit::TestCase
   include SleepyPenguin
 
+  def setup
+    @to_close = []
+  end
+
+  def teardown
+    @to_close.each do |io|
+      io.close unless io.closed?
+    end
+  end
+
+  def test_multi_event
+    kq = Kqueue::IO.new
+    @to_close << kq
+    list = []
+    pipes = [ IO.pipe, IO.pipe, IO.pipe, IO.pipe ]
+    pipes.each do |(r,w)|
+      @to_close << r
+      @to_close << w
+      list << Kevent[r.fileno, EvFilt::READ, Ev::ADD|Ev::ONESHOT, 0, 0, r]
+    end
+    kq.kevent(list)
+
+    pipes.each do |(_,w)|
+      w.syswrite('.')
+    end
+    received = []
+    seen = {}
+    kq.kevent(nil, 1) do |*args|
+      received << args
+      assert_equal 6, args.size
+      assert_kind_of IO, args[5]
+      assert_nil seen[args[5]]
+      seen[args[5]] = true
+    end
+
+    assert_equal 1, received.size
+
+    kq.kevent(nil, 666) do |*args|
+      received << args
+      assert_equal 6, args.size
+      assert_kind_of IO, args[5]
+      assert_nil seen[args[5]]
+      seen[args[5]] = true
+    end
+    assert_equal 4, received.size
+  end
+
   def test_xthread
     kq = Kqueue::IO.new
     assert_kind_of IO, kq