* 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
This commit is contained in:
parent
fdc4287e87
commit
04e19b5587
@ -8,6 +8,19 @@ require 'tempfile'
|
|||||||
require_relative 'envutil'
|
require_relative 'envutil'
|
||||||
|
|
||||||
class TestIO < Test::Unit::TestCase
|
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
|
def test_gets_rs
|
||||||
# default_rs
|
# default_rs
|
||||||
r, w = IO.pipe
|
r, w = IO.pipe
|
||||||
@ -236,6 +249,7 @@ class TestIO < Test::Unit::TestCase
|
|||||||
assert_equal(content[1,1], r.read)
|
assert_equal(content[1,1], r.read)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if have_nonblock?
|
||||||
with_read_pipe("abc") {|r1|
|
with_read_pipe("abc") {|r1|
|
||||||
assert_equal("a", r1.getc)
|
assert_equal("a", r1.getc)
|
||||||
with_pipe {|r2, w2|
|
with_pipe {|r2, w2|
|
||||||
@ -248,6 +262,7 @@ class TestIO < Test::Unit::TestCase
|
|||||||
assert_equal("a" * s + "bc", t.value)
|
assert_equal("a" * s + "bc", t.value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
end
|
||||||
|
|
||||||
bigcontent = "abc" * 123456
|
bigcontent = "abc" * 123456
|
||||||
File.open("bigsrc", "w") {|f| f << bigcontent }
|
File.open("bigsrc", "w") {|f| f << bigcontent }
|
||||||
@ -266,6 +281,7 @@ class TestIO < Test::Unit::TestCase
|
|||||||
assert_equal(bigcontent[100, 30000], File.read("bigdst"))
|
assert_equal(bigcontent[100, 30000], File.read("bigdst"))
|
||||||
|
|
||||||
File.open("bigsrc") {|f|
|
File.open("bigsrc") {|f|
|
||||||
|
begin
|
||||||
assert_equal(0, f.pos)
|
assert_equal(0, f.pos)
|
||||||
ret = IO.copy_stream(f, "bigdst", nil, 10)
|
ret = IO.copy_stream(f, "bigdst", nil, 10)
|
||||||
assert_equal(bigcontent.bytesize-10, ret)
|
assert_equal(bigcontent.bytesize-10, ret)
|
||||||
@ -275,6 +291,9 @@ class TestIO < Test::Unit::TestCase
|
|||||||
assert_equal(40, ret)
|
assert_equal(40, ret)
|
||||||
assert_equal(bigcontent[30, 40], File.read("bigdst"))
|
assert_equal(bigcontent[30, 40], File.read("bigdst"))
|
||||||
assert_equal(0, f.pos)
|
assert_equal(0, f.pos)
|
||||||
|
rescue NotImplementedError
|
||||||
|
#skip "pread(2) is not implemtented."
|
||||||
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
with_pipe {|r, w|
|
with_pipe {|r, w|
|
||||||
@ -285,6 +304,7 @@ class TestIO < Test::Unit::TestCase
|
|||||||
megacontent = "abc" * 1234567
|
megacontent = "abc" * 1234567
|
||||||
File.open("megasrc", "w") {|f| f << megacontent }
|
File.open("megasrc", "w") {|f| f << megacontent }
|
||||||
|
|
||||||
|
if have_nonblock?
|
||||||
with_pipe {|r1, w1|
|
with_pipe {|r1, w1|
|
||||||
with_pipe {|r2, w2|
|
with_pipe {|r2, w2|
|
||||||
t1 = Thread.new { w1 << megacontent; w1.close }
|
t1 = Thread.new { w1 << megacontent; w1.close }
|
||||||
@ -298,6 +318,7 @@ class TestIO < Test::Unit::TestCase
|
|||||||
assert_equal(megacontent, t2.value)
|
assert_equal(megacontent, t2.value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
end
|
||||||
|
|
||||||
with_pipe {|r1, w1|
|
with_pipe {|r1, w1|
|
||||||
with_pipe {|r2, w2|
|
with_pipe {|r2, w2|
|
||||||
@ -323,6 +344,7 @@ class TestIO < Test::Unit::TestCase
|
|||||||
|
|
||||||
def test_copy_stream_rbuf
|
def test_copy_stream_rbuf
|
||||||
mkcdtmpdir {
|
mkcdtmpdir {
|
||||||
|
begin
|
||||||
with_pipe {|r, w|
|
with_pipe {|r, w|
|
||||||
File.open("foo", "w") {|f| f << "abcd" }
|
File.open("foo", "w") {|f| f << "abcd" }
|
||||||
File.open("foo") {|f|
|
File.open("foo") {|f|
|
||||||
@ -332,6 +354,9 @@ class TestIO < Test::Unit::TestCase
|
|||||||
w.close
|
w.close
|
||||||
assert_equal("bcd", r.read)
|
assert_equal("bcd", r.read)
|
||||||
}
|
}
|
||||||
|
rescue NotImplementedError
|
||||||
|
skip "pread(2) is not implemtented."
|
||||||
|
end
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -410,6 +435,7 @@ class TestIO < Test::Unit::TestCase
|
|||||||
megacontent = "abc" * 1234567
|
megacontent = "abc" * 1234567
|
||||||
File.open("megasrc", "w") {|f| f << megacontent }
|
File.open("megasrc", "w") {|f| f << megacontent }
|
||||||
|
|
||||||
|
if have_nonblock?
|
||||||
with_socketpair {|s1, s2|
|
with_socketpair {|s1, s2|
|
||||||
t = Thread.new { s2.read }
|
t = Thread.new { s2.read }
|
||||||
s1.nonblock = true
|
s1.nonblock = true
|
||||||
@ -419,6 +445,7 @@ class TestIO < Test::Unit::TestCase
|
|||||||
result = t.value
|
result = t.value
|
||||||
assert_equal(megacontent, result)
|
assert_equal(megacontent, result)
|
||||||
}
|
}
|
||||||
|
end
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -874,6 +901,7 @@ class TestIO < Test::Unit::TestCase
|
|||||||
|
|
||||||
def test_bytes
|
def test_bytes
|
||||||
pipe(proc do |w|
|
pipe(proc do |w|
|
||||||
|
w.binmode
|
||||||
w.puts "foo"
|
w.puts "foo"
|
||||||
w.puts "bar"
|
w.puts "bar"
|
||||||
w.puts "baz"
|
w.puts "baz"
|
||||||
@ -904,11 +932,13 @@ class TestIO < Test::Unit::TestCase
|
|||||||
|
|
||||||
def test_readbyte
|
def test_readbyte
|
||||||
pipe(proc do |w|
|
pipe(proc do |w|
|
||||||
|
w.binmode
|
||||||
w.puts "foo"
|
w.puts "foo"
|
||||||
w.puts "bar"
|
w.puts "bar"
|
||||||
w.puts "baz"
|
w.puts "baz"
|
||||||
w.close
|
w.close
|
||||||
end, proc do |r|
|
end, proc do |r|
|
||||||
|
r.binmode
|
||||||
(%w(f o o) + ["\n"] + %w(b a r) + ["\n"] + %w(b a z) + ["\n"]).each do |c|
|
(%w(f o o) + ["\n"] + %w(b a r) + ["\n"] + %w(b a z) + ["\n"]).each do |c|
|
||||||
assert_equal(c.ord, r.readbyte)
|
assert_equal(c.ord, r.readbyte)
|
||||||
end
|
end
|
||||||
@ -931,7 +961,7 @@ class TestIO < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_close_on_exec
|
def test_close_on_exec
|
||||||
# xxx
|
skip "IO\#close_on_exec is not implemented." unless have_close_on_exec?
|
||||||
ruby do |f|
|
ruby do |f|
|
||||||
assert_equal(false, f.close_on_exec?)
|
assert_equal(false, f.close_on_exec?)
|
||||||
f.close_on_exec = true
|
f.close_on_exec = true
|
||||||
|
Loading…
x
Reference in New Issue
Block a user