summaryrefslogtreecommitdiff
path: root/test/psych/test_ractor.rb
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2020-12-23 19:08:52 +0900
committerGitHub <noreply@github.com>2020-12-23 19:08:52 +0900
commitf150e592af1d77bf43a807fd6787764f1b5bd1a2 (patch)
tree0a39a33b9d00d11aa4964710739c5016c828e08c /test/psych/test_ractor.rb
parente2a628c7d3e5561940a3ac42239fff70f8e0cda5 (diff)
parent7da26358f18ec6d070d43a14b04a862517cc2f06 (diff)
downloadpsych-f150e592af1d77bf43a807fd6787764f1b5bd1a2.zip
Merge pull request #471 from ruby/ractor
Ractor support
Diffstat (limited to 'test/psych/test_ractor.rb')
-rw-r--r--test/psych/test_ractor.rb50
1 files changed, 50 insertions, 0 deletions
diff --git a/test/psych/test_ractor.rb b/test/psych/test_ractor.rb
new file mode 100644
index 0000000..c6bed7c
--- /dev/null
+++ b/test/psych/test_ractor.rb
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+require_relative 'helper'
+
+class TestPsychRactor < Test::Unit::TestCase
+ def test_ractor_round_trip
+ assert_ractor(<<~RUBY, require_relative: 'helper')
+ obj = {foo: [42]}
+ obj2 = Ractor.new(obj) do |obj|
+ Psych.load(Psych.dump(obj))
+ end.take
+ assert_equal obj, obj2
+ RUBY
+ end
+
+ def test_not_shareable
+ # There's no point in making these frozen / shareable
+ # and the C-ext disregards begin frozen
+ assert_ractor(<<~RUBY, require_relative: 'helper')
+ parser = Psych::Parser.new
+ emitter = Psych::Emitter.new(nil)
+ assert_raise(Ractor::Error) { Ractor.make_shareable(parser) }
+ assert_raise(Ractor::Error) { Ractor.make_shareable(emitter) }
+ RUBY
+ end
+
+ def test_ractor_config
+ # Config is ractor-local
+ # Test is to make sure it works, even though usage is probably very low.
+ # The methods are not documented and might be deprecated one day
+ assert_ractor(<<~RUBY, require_relative: 'helper')
+ r = Ractor.new do
+ Psych.add_builtin_type 'omap' do |type, val|
+ val * 2
+ end
+ Psych.load('--- !!omap hello')
+ end.take
+ assert_equal 'hellohello', r
+ assert_equal 'hello', Psych.load('--- !!omap hello')
+ RUBY
+ end
+
+ def test_ractor_constants
+ assert_ractor(<<~RUBY, require_relative: 'helper')
+ r = Ractor.new do
+ Psych.libyaml_version.join('.') == Psych::LIBYAML_VERSION
+ end.take
+ assert_equal true, r
+ RUBY
+ end
+end if defined?(Test::Unit::TestCase)