summaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorksss <[email protected]>2015-11-23 21:58:38 +0900
committerksss <[email protected]>2015-11-24 14:24:24 +0900
commita55accd736e13307f7e925af86751ca878be2058 (patch)
treee2378bf7375f94a377efcaba099eedbe85fbc762 /test
parentc9a4091b83b06b20d8e9178ce748d5b101925a2e (diff)
downloadmruby-a55accd736e13307f7e925af86751ca878be2058.tar.gz
mruby-a55accd736e13307f7e925af86751ca878be2058.zip
Implement IO.pipe
Diffstat (limited to 'test')
-rw-r--r--test/io.rb75
1 files changed, 53 insertions, 22 deletions
diff --git a/test/io.rb b/test/io.rb
index 434607959..a35d7a074 100644
--- a/test/io.rb
+++ b/test/io.rb
@@ -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?)
-
- # 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
+ 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(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