mirror of
https://github.com/ruby/ruby.git
synced 2025-08-23 21:14:23 +02:00

Ractor requires a shareable class has shareable constants only, but IO
is not shareable unless frozen.
65e0ff895c
34 lines
873 B
Ruby
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
|