6 module LibReadWriteTest
8 assert_nothing_raised do
9 @rd.close unless @rd.closed?
10 @wr.close unless @wr.closed?
12 assert_nothing_raised do
13 Kgio.wait_readable = Kgio.wait_writable = nil
19 assert_raises(EOFError) { @rd.kgio_read 5 }
24 assert_raises(Errno::EPIPE) { loop { @wr.kgio_write "HI" } }
28 assert_equal nil, @wr.kgio_write(10)
29 assert_equal "10", @rd.kgio_read(2)
33 assert_equal Kgio::WaitReadable, @rd.kgio_read(1)
36 def test_read_too_much
37 assert_equal nil, @wr.kgio_write("hi")
38 assert_equal "hi", @rd.kgio_read(4)
42 assert_equal nil, @wr.kgio_write("hi")
43 assert_equal "h", @rd.kgio_read(1)
44 assert_equal "i", @rd.kgio_read(1)
47 def test_read_extra_buf
49 tmp_object_id = tmp.object_id
50 assert_equal nil, @wr.kgio_write("hi")
51 rv = @rd.kgio_read(2, tmp)
53 assert_equal rv.object_id, tmp.object_id
54 assert_equal tmp_object_id, rv.object_id
57 def test_write_return_wait_writable
59 tmp << @wr.kgio_write("HI") until tmp[-1] == Kgio::WaitWritable
60 assert_equal Kgio::WaitWritable, tmp.pop
63 assert(penultimate == "I" || penultimate == nil)
65 tmp.each { |count| assert_equal nil, count }
68 def test_monster_write
69 buf = "." * 1024 * 1024 * 10
70 rv = @wr.kgio_write(buf)
71 assert_kind_of String, rv
72 assert rv.size < buf.size
73 assert_equal(buf, (rv + @rd.read(buf.size - rv.size)))
76 def test_wait_readable_ruby_default
78 raise RuntimeError, "Hello"
80 assert_nothing_raised { Kgio.wait_readable = :ruby }
84 thr = Thread.new { sleep 1; @wr.write "HELLO" }
85 assert_nothing_raised do
86 foo = @rd.kgio_read(5)
87 elapsed = Time.now - t0
89 assert elapsed >= 1.0, "elapsed: #{elapsed}"
90 assert_equal "HELLO", foo
92 assert_equal 5, thr.value
95 def test_wait_writable_ruby_default
97 raise RuntimeError, "Hello"
102 nr += @wr.write_nonblock(buf)
106 assert_nothing_raised { Kgio.wait_writable = :ruby }
110 thr = Thread.new { sleep 1; @rd.readpartial(nr) }
111 assert_nothing_raised do
112 foo = @wr.kgio_write("HELLO")
113 elapsed = Time.now - t0
117 assert elapsed >= 1.0, "elapsed: #{elapsed}"
119 assert(String === foo || foo == nil)
120 assert_kind_of String, thr.value
123 def test_wait_readable_method
125 defined?(@z) ? raise(RuntimeError, "Hello") : @z = "HI"
127 assert_nothing_raised { Kgio.wait_readable = :moo }
130 foo = @rd.kgio_read(5)
132 rescue RuntimeError => e
133 assert_equal("Hello", e.message)
135 assert_equal "HI", @rd.instance_variable_get(:@z)
139 def test_wait_writable_method
141 defined?(@z) ? raise(RuntimeError, "Hello") : @z = "HI"
143 assert_nothing_raised { Kgio.wait_writable = :moo }
146 loop { n << @wr.kgio_write("HIHIHIHIHIHI") }
148 rescue RuntimeError => e
149 assert_equal("Hello", e.message)
152 assert_equal "HI", @wr.instance_variable_get(:@z)