From 04e19b558749a6122ee2f0f29df41474ec70f2c7 Mon Sep 17 00:00:00 2001 From: usa Date: Tue, 28 Oct 2008 09:41:30 +0000 Subject: * test/ruby/test_io.rb (test_copy_stream, test_copy_stream_socket): skip some tests if there isn't IO#nonblock=. * test/ruby/test_io.rb (test_close_on_exec): skip if there isn't IO#close_on_exec=. * test/ruby/test_io.rb (test_bytes, test_readbyte): depend on binmode. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19992 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/test_io.rb | 130 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 80 insertions(+), 50 deletions(-) (limited to 'test/ruby/test_io.rb') diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb index 4305293a3d..ebf158b393 100644 --- a/test/ruby/test_io.rb +++ b/test/ruby/test_io.rb @@ -8,6 +8,19 @@ require 'tempfile' require_relative 'envutil' class TestIO < Test::Unit::TestCase + def have_close_on_exec? + begin + $stdin.close_on_exec? + true + rescue NotImplementedError + false + end + end + + def have_nonblock? + IO.instance_methods.index(:"nonblock=") + end + def test_gets_rs # default_rs r, w = IO.pipe @@ -236,18 +249,20 @@ class TestIO < Test::Unit::TestCase assert_equal(content[1,1], r.read) } - with_read_pipe("abc") {|r1| - assert_equal("a", r1.getc) - with_pipe {|r2, w2| - w2.nonblock = true - s = w2.syswrite("a" * 100000) - t = Thread.new { sleep 0.1; r2.read } - ret = IO.copy_stream(r1, w2) - w2.close - assert_equal(2, ret) - assert_equal("a" * s + "bc", t.value) + if have_nonblock? + with_read_pipe("abc") {|r1| + assert_equal("a", r1.getc) + with_pipe {|r2, w2| + w2.nonblock = true + s = w2.syswrite("a" * 100000) + t = Thread.new { sleep 0.1; r2.read } + ret = IO.copy_stream(r1, w2) + w2.close + assert_equal(2, ret) + assert_equal("a" * s + "bc", t.value) + } } - } + end bigcontent = "abc" * 123456 File.open("bigsrc", "w") {|f| f << bigcontent } @@ -266,15 +281,19 @@ class TestIO < Test::Unit::TestCase assert_equal(bigcontent[100, 30000], File.read("bigdst")) File.open("bigsrc") {|f| - assert_equal(0, f.pos) - ret = IO.copy_stream(f, "bigdst", nil, 10) - assert_equal(bigcontent.bytesize-10, ret) - assert_equal(bigcontent[10..-1], File.read("bigdst")) - assert_equal(0, f.pos) - ret = IO.copy_stream(f, "bigdst", 40, 30) - assert_equal(40, ret) - assert_equal(bigcontent[30, 40], File.read("bigdst")) - assert_equal(0, f.pos) + begin + assert_equal(0, f.pos) + ret = IO.copy_stream(f, "bigdst", nil, 10) + assert_equal(bigcontent.bytesize-10, ret) + assert_equal(bigcontent[10..-1], File.read("bigdst")) + assert_equal(0, f.pos) + ret = IO.copy_stream(f, "bigdst", 40, 30) + assert_equal(40, ret) + assert_equal(bigcontent[30, 40], File.read("bigdst")) + assert_equal(0, f.pos) + rescue NotImplementedError + #skip "pread(2) is not implemtented." + end } with_pipe {|r, w| @@ -285,19 +304,21 @@ class TestIO < Test::Unit::TestCase megacontent = "abc" * 1234567 File.open("megasrc", "w") {|f| f << megacontent } - with_pipe {|r1, w1| - with_pipe {|r2, w2| - t1 = Thread.new { w1 << megacontent; w1.close } - t2 = Thread.new { r2.read } - r1.nonblock = true - w2.nonblock = true - ret = IO.copy_stream(r1, w2) - assert_equal(megacontent.bytesize, ret) - w2.close - t1.join - assert_equal(megacontent, t2.value) + if have_nonblock? + with_pipe {|r1, w1| + with_pipe {|r2, w2| + t1 = Thread.new { w1 << megacontent; w1.close } + t2 = Thread.new { r2.read } + r1.nonblock = true + w2.nonblock = true + ret = IO.copy_stream(r1, w2) + assert_equal(megacontent.bytesize, ret) + w2.close + t1.join + assert_equal(megacontent, t2.value) + } } - } + end with_pipe {|r1, w1| with_pipe {|r2, w2| @@ -323,15 +344,19 @@ class TestIO < Test::Unit::TestCase def test_copy_stream_rbuf mkcdtmpdir { - with_pipe {|r, w| - File.open("foo", "w") {|f| f << "abcd" } - File.open("foo") {|f| - f.read(1) - assert_equal(3, IO.copy_stream(f, w, 10, 1)) + begin + with_pipe {|r, w| + File.open("foo", "w") {|f| f << "abcd" } + File.open("foo") {|f| + f.read(1) + assert_equal(3, IO.copy_stream(f, w, 10, 1)) + } + w.close + assert_equal("bcd", r.read) } - w.close - assert_equal("bcd", r.read) - } + rescue NotImplementedError + skip "pread(2) is not implemtented." + end } end @@ -410,15 +435,17 @@ class TestIO < Test::Unit::TestCase megacontent = "abc" * 1234567 File.open("megasrc", "w") {|f| f << megacontent } - with_socketpair {|s1, s2| - t = Thread.new { s2.read } - s1.nonblock = true - ret = IO.copy_stream("megasrc", s1) - assert_equal(megacontent.bytesize, ret) - s1.close - result = t.value - assert_equal(megacontent, result) - } + if have_nonblock? + with_socketpair {|s1, s2| + t = Thread.new { s2.read } + s1.nonblock = true + ret = IO.copy_stream("megasrc", s1) + assert_equal(megacontent.bytesize, ret) + s1.close + result = t.value + assert_equal(megacontent, result) + } + end } end @@ -874,6 +901,7 @@ class TestIO < Test::Unit::TestCase def test_bytes pipe(proc do |w| + w.binmode w.puts "foo" w.puts "bar" w.puts "baz" @@ -904,11 +932,13 @@ class TestIO < Test::Unit::TestCase def test_readbyte pipe(proc do |w| + w.binmode w.puts "foo" w.puts "bar" w.puts "baz" w.close end, proc do |r| + r.binmode (%w(f o o) + ["\n"] + %w(b a r) + ["\n"] + %w(b a z) + ["\n"]).each do |c| assert_equal(c.ord, r.readbyte) end @@ -931,7 +961,7 @@ class TestIO < Test::Unit::TestCase end def test_close_on_exec - # xxx + skip "IO\#close_on_exec is not implemented." unless have_close_on_exec? ruby do |f| assert_equal(false, f.close_on_exec?) f.close_on_exec = true -- cgit v1.2.3