ruby/test/io/console/test_ractor.rb
Nobuyoshi Nakada 4a1ea9b63a [ruby/io-console] Store console IO in Ractor-local storage
Ractor requires a shareable class has shareable constants only, but IO
is not shareable unless frozen.

65e0ff895c
2024-08-31 08:43:59 +00:00

34 lines
873 B
Ruby

# 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;
$VERBOSE = nil
r = Ractor.new do
$stdout.console_mode
rescue SystemCallError
true
rescue Ractor::UnsafeError
false
else
true # should not success
end
puts r.take
end;
assert_in_out_err(%W[-r#{path}], "#{<<~"begin;"}\n#{<<~'end;'}", ["true"], [])
begin;
console = IO.console
$VERBOSE = nil
r = Ractor.new do
IO.console
end
puts console.class == r.take.class
end;
end
end if defined? Ractor