mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Implement IO.pipe
This commit is contained in:
+52
-21
@@ -402,28 +402,23 @@ assert('IO#close_on_exec') do
|
||||
io.close
|
||||
io.closed?
|
||||
|
||||
# # Use below when IO.pipe is implemented.
|
||||
# begin
|
||||
# r, w = IO.pipe
|
||||
# assert_equal(false, r.close_on_exec?)
|
||||
# r.close_on_exec = true
|
||||
# assert_equal(true, r.close_on_exec?)
|
||||
# r.close_on_exec = false
|
||||
# assert_equal(false, r.close_on_exec?)
|
||||
# r.close_on_exec = true
|
||||
# assert_equal(true, r.close_on_exec?)
|
||||
begin
|
||||
r, w = IO.pipe
|
||||
assert_equal(true, r.close_on_exec?)
|
||||
r.close_on_exec = false
|
||||
assert_equal(false, r.close_on_exec?)
|
||||
r.close_on_exec = true
|
||||
assert_equal(true, r.close_on_exec?)
|
||||
|
||||
# assert_equal(false, w.close_on_exec?)
|
||||
# w.close_on_exec = true
|
||||
# assert_equal(true, w.close_on_exec?)
|
||||
# w.close_on_exec = false
|
||||
# assert_equal(false, w.close_on_exec?)
|
||||
# w.close_on_exec = true
|
||||
# assert_equal(true, w.close_on_exec?)
|
||||
# ensure
|
||||
# r.close unless r.closed?
|
||||
# w.close unless w.closed?
|
||||
# end
|
||||
assert_equal(true, w.close_on_exec?)
|
||||
w.close_on_exec = false
|
||||
assert_equal(false, w.close_on_exec?)
|
||||
w.close_on_exec = true
|
||||
assert_equal(true, w.close_on_exec?)
|
||||
ensure
|
||||
r.close unless r.closed?
|
||||
w.close unless w.closed?
|
||||
end
|
||||
end
|
||||
|
||||
assert('IO#sysseek') do
|
||||
@@ -434,6 +429,42 @@ assert('IO#sysseek') do
|
||||
end
|
||||
end
|
||||
|
||||
assert('IO.pipe') do
|
||||
called = false
|
||||
IO.pipe do |r, w|
|
||||
assert_true r.kind_of?(IO)
|
||||
assert_true w.kind_of?(IO)
|
||||
assert_false r.closed?
|
||||
assert_false w.closed?
|
||||
assert_true FileTest.pipe?(r)
|
||||
assert_true FileTest.pipe?(w)
|
||||
assert_nil r.pid
|
||||
assert_nil w.pid
|
||||
assert_true 2 < r.fileno
|
||||
assert_true 2 < w.fileno
|
||||
assert_true r.fileno != w.fileno
|
||||
assert_false r.sync
|
||||
assert_true w.sync
|
||||
assert_equal 8, w.write('test for')
|
||||
assert_equal 'test', r.read(4)
|
||||
assert_equal ' for', r.read(4)
|
||||
assert_equal 5, w.write(' pipe')
|
||||
assert_equal nil, w.close
|
||||
assert_equal ' pipe', r.read
|
||||
called = true
|
||||
assert_raise(IOError) { r.write 'test' }
|
||||
# TODO:
|
||||
# This assert expect raise IOError but got RuntimeError
|
||||
# Because mruby-io not have flag for I/O readable
|
||||
# assert_raise(IOError) { w.read }
|
||||
end
|
||||
assert_true called
|
||||
|
||||
assert_nothing_raised do
|
||||
IO.pipe { |r, w| r.close; w.close }
|
||||
end
|
||||
end
|
||||
|
||||
assert('`cmd`') do
|
||||
assert_equal `echo foo`, "foo\n"
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user