mirror of
https://github.com/ruby/ruby.git
synced 2026-01-29 21:44:28 +00:00
Ractor requires a shareable class has shareable constants only, but IO is not shareable unless frozen. https://github.com/ruby/io-console/commit/65e0ff895c
35 lines
873 B
Ruby
35 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
|