1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
# frozen_string_literal: true
require 'test/unit'
require 'rbconfig'
class TestIOConsoleInRactor < Test::Unit::TestCase
def test_ractor
ext = "/io/console.#{RbConfig::CONFIG['DLEXT']}"
path = $".find {|path| path.end_with?(ext)}
assert_in_out_err(%W[-r#{path}], "#{<<~"begin;"}\n#{<<~'end;'}", ["true"], [])
begin;
class Ractor
alias value take
end unless Ractor.method_defined? :value # compat with Ruby 3.4 and olders
$VERBOSE = nil
r = Ractor.new do
$stdout.console_mode
rescue SystemCallError
true
rescue Ractor::UnsafeError
false
else
true # should not success
end
puts r.value
end;
assert_in_out_err(%W[-r#{path}], "#{<<~"begin;"}\n#{<<~'end;'}", ["true"], [])
begin;
class Ractor
alias value take
end unless Ractor.method_defined? :value # compat with Ruby 3.4 and olders
console = IO.console
$VERBOSE = nil
r = Ractor.new do
IO.console
end
puts console.class == r.value.class
end;
end
end if defined? Ractor
|