diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-03-05 16:39:31 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-03-07 09:54:35 +0900 |
commit | ef9bde6516a46359ad68fef96bd180f12262cceb (patch) | |
tree | 40a81a12f64fd43a90baf6503916bfe2173deb75 /test/io/wait | |
parent | 05d118feea447d195e5662a03c2a41b50aa6b8d9 (diff) | |
download | ruby-ef9bde6516a46359ad68fef96bd180f12262cceb.tar.gz |
[ruby/io-wait] Refined uncommon device type tests
https://github.com/ruby/io-wait/commit/0c73ebcf5d
Diffstat (limited to 'test/io/wait')
-rw-r--r-- | test/io/wait/test_io_wait_uncommon.rb | 33 |
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 |