summaryrefslogtreecommitdiff
path: root/test/io/wait
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2021-03-05 16:39:31 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-03-07 09:54:35 +0900
commitef9bde6516a46359ad68fef96bd180f12262cceb (patch)
tree40a81a12f64fd43a90baf6503916bfe2173deb75 /test/io/wait
parent05d118feea447d195e5662a03c2a41b50aa6b8d9 (diff)
[ruby/io-wait] Refined uncommon device type tests
https://github.com/ruby/io-wait/commit/0c73ebcf5d
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/4244
Diffstat (limited to 'test/io/wait')
-rw-r--r--test/io/wait/test_io_wait_uncommon.rb33
1 files changed, 16 insertions, 17 deletions
diff --git a/test/io/wait/test_io_wait_uncommon.rb b/test/io/wait/test_io_wait_uncommon.rb
index 28b4a0f8c4..b6f1c29bcd 100644
--- a/test/io/wait/test_io_wait_uncommon.rb
+++ b/test/io/wait/test_io_wait_uncommon.rb
@@ -6,15 +6,10 @@ require 'io/wait'
# We may optimize IO#wait_*able for non-Linux kernels in the future
class TestIOWaitUncommon < Test::Unit::TestCase
def test_tty_wait
- begin
- tty = File.open('/dev/tty', 'w+')
- rescue Errno::ENOENT, Errno::ENXIO => e
- skip "/dev/tty: #{e.message} (#{e.class})"
+ check_dev('/dev/tty', mode: 'w+') do |tty|
+ assert_include [ nil, tty ], tty.wait_readable(0)
+ assert_equal tty, tty.wait_writable(1), 'portability test'
end
- assert_include [ nil, tty ], tty.wait_readable(0)
- assert_equal tty, tty.wait_writable(1), 'portability test'
- ensure
- tty&.close
end
def test_fifo_wait
@@ -44,36 +39,40 @@ class TestIOWaitUncommon < Test::Unit::TestCase
# used to find portability problems because some ppoll implementations
# are incomplete and do not work for certain "file" types
- def check_dev(dev, m = :wait_readable)
+ def check_dev(dev, m = :wait_readable, mode: m == :wait_readable ? 'r' : 'w', &block)
begin
- fp = File.open("/dev/#{dev}", m == :wait_readable ? 'r' : 'w')
+ fp = File.open(dev, mode)
+ rescue Errno::ENOENT
+ return # Ignore silently
rescue SystemCallError => e
skip "#{dev} could not be opened #{e.message} (#{e.class})"
end
- assert_same fp, fp.__send__(m)
+ if block
+ yield fp
+ else
+ assert_same fp, fp.__send__(m)
+ end
ensure
fp&.close
end
def test_wait_readable_urandom
- check_dev 'urandom'
+ check_dev('/dev/urandom')
end
def test_wait_readable_random
- File.open('/dev/random') do |fp|
+ check_dev('/dev/random') do |fp|
assert_nothing_raised do
fp.wait_readable(0)
end
end
- rescue SystemCallError => e
- skip "/dev/random could not be opened #{e.message} (#{e.class})"
end
def test_wait_readable_zero
- check_dev 'zero'
+ check_dev('/dev/zero')
end
def test_wait_writable_null
- check_dev 'null', :wait_writable
+ check_dev(IO::NULL, :wait_writable)
end
end