summaryrefslogtreecommitdiff
path: root/vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_attach.rb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_attach.rb')
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_attach.rb151
1 files changed, 151 insertions, 0 deletions
diff --git a/vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_attach.rb b/vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_attach.rb
new file mode 100644
index 0000000..4a55017
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_attach.rb
@@ -0,0 +1,151 @@
+require 'em_test_helper'
+require 'socket'
+
+class TestAttach < Test::Unit::TestCase
+ class EchoServer < EM::Connection
+ def receive_data data
+ $received_data << data
+ send_data data
+ end
+ end
+
+ class EchoClient < EM::Connection
+ def initialize socket
+ self.notify_readable = true
+ @socket = socket
+ @socket.write("abc\n")
+ end
+
+ def notify_readable
+ $read = @socket.readline
+ $fd = detach
+ end
+
+ def unbind
+ EM.next_tick do
+ @socket.write("def\n")
+ EM.add_timer(0.1) { EM.stop }
+ end
+ end
+ end
+
+ def setup
+ @port = next_port
+ $read, $r, $w, $fd = nil
+ $received_data = ""
+ end
+
+ def teardown
+ [$r, $w].each do |io|
+ io.close rescue nil
+ end
+ $received_data = nil
+ end
+
+ def test_attach
+ socket = nil
+
+ EM.run {
+ EM.start_server "127.0.0.1", @port, EchoServer
+ socket = TCPSocket.new "127.0.0.1", @port
+ EM.watch socket, EchoClient, socket
+ }
+
+ assert_equal $read, "abc\n"
+ unless jruby? # jruby filenos are not real
+ assert_equal $fd, socket.fileno
+ end
+ assert_equal false, socket.closed?
+ assert_equal socket.readline, "def\n"
+ end
+
+ module PipeWatch
+ def notify_readable
+ $read = $r.readline
+ EM.stop
+ end
+ end
+
+ def test_attach_server
+ omit_if(jruby?)
+ $before = TCPServer.new("127.0.0.1", @port)
+ sig = nil
+ EM.run {
+ sig = EM.attach_server $before, EchoServer
+
+ handler = Class.new(EM::Connection) do
+ def initialize
+ send_data "hello world"
+ close_connection_after_writing
+ EM.add_timer(0.1) { EM.stop }
+ end
+ end
+ EM.connect("127.0.0.1", @port, handler)
+ }
+
+ assert_equal false, $before.closed?
+ assert_equal "hello world", $received_data
+ assert sig.is_a?(Integer)
+ end
+
+ def test_attach_pipe
+ EM.run{
+ $r, $w = IO.pipe
+ EM.watch $r, PipeWatch do |c|
+ c.notify_readable = true
+ end
+ $w.write("ghi\n")
+ }
+
+ assert_equal $read, "ghi\n"
+ end
+
+ def test_set_readable
+ before, after = nil
+
+ EM.run{
+ $r, $w = IO.pipe
+ c = EM.watch $r, PipeWatch do |con|
+ con.notify_readable = false
+ end
+
+ EM.next_tick{
+ before = c.notify_readable?
+ c.notify_readable = true
+ after = c.notify_readable?
+ }
+
+ $w.write("jkl\n")
+ }
+
+ assert !before
+ assert after
+ assert_equal $read, "jkl\n"
+ end
+
+ def test_read_write_pipe
+ result = nil
+
+ pipe_reader = Module.new do
+ define_method :receive_data do |data|
+ result = data
+ EM.stop
+ end
+ end
+
+ r,w = IO.pipe
+
+ EM.run {
+ EM.attach r, pipe_reader
+ writer = EM.attach(w)
+ writer.send_data 'ghi'
+
+ # XXX: Process will hang in Windows without this line
+ writer.close_connection_after_writing
+ }
+
+ assert_equal "ghi", result
+ ensure
+ [r,w].each {|io| io.close rescue nil }
+ end
+end