about summary refs log tree commit homepage
path: root/test/test_posix_mq.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_posix_mq.rb')
-rw-r--r--test/test_posix_mq.rb14
1 files changed, 14 insertions, 0 deletions
diff --git a/test/test_posix_mq.rb b/test/test_posix_mq.rb
index 1cc24aa..54c7223 100644
--- a/test/test_posix_mq.rb
+++ b/test/test_posix_mq.rb
@@ -17,6 +17,8 @@ class Test_POSIX_MQ < Test::Unit::TestCase
     warn "POSIX_MQ#to_io not supported on this platform: #{RUBY_PLATFORM}"
   POSIX_MQ.method_defined?(:notify) or
     warn "POSIX_MQ#notify not supported on this platform: #{RUBY_PLATFORM}"
+  POSIX_MQ.respond_to?(:for_fd) or
+    warn "POSIX_MQ::for_fd not supported on this platform: #{RUBY_PLATFORM}"
 
   def setup
     @mq = nil
@@ -244,6 +246,18 @@ class Test_POSIX_MQ < Test::Unit::TestCase
     assert_nothing_raised { IO.select([@mq], nil, nil, 0) }
   end if POSIX_MQ.method_defined?(:to_io)
 
+  def test_for_fd
+    buf = ""
+    @mq = POSIX_MQ.new @path, IO::CREAT|IO::RDWR, 0666
+    @alt = POSIX_MQ.for_fd(@mq.to_io.to_i)
+    assert_equal true, @mq.send("hello", 0)
+    assert_equal [ "hello", 0 ], @alt.receive(buf)
+    assert_equal "hello", buf
+    assert_equal @mq.to_io.to_i, @alt.to_io.to_i
+    assert_raises(ArgumentError) { @alt.name }
+    assert_raises(Errno::EBADF) { POSIX_MQ.for_fd(1) }
+  end if POSIX_MQ.respond_to?(:for_fd) && POSIX_MQ.method_defined?(:to_io)
+
   def test_notify
     rd, wr = IO.pipe
     orig = trap(:USR1) { wr.syswrite('.') }