summaryrefslogtreecommitdiff
path: root/test/psych
diff options
context:
space:
mode:
authorAlexander Momchilov <alexander.momchilov@shopify.com>2022-07-22 16:45:03 -0400
committergit <svn-admin@ruby-lang.org>2022-08-09 01:31:23 +0900
commit0b7cfdca09651f2eae5cd0e8ae4efed5033493f2 (patch)
tree548d2a2a85db2b4376b57c674e3a87525b0a9ee9 /test/psych
parentc851bced390204d6624e58c47941f34d0858b352 (diff)
[ruby/psych] Test that recursive refs dump as aliases
https://github.com/ruby/psych/commit/d9f7289190
Diffstat (limited to 'test/psych')
-rw-r--r--test/psych/test_array.rb13
-rw-r--r--test/psych/test_hash.rb12
-rw-r--r--test/psych/test_object.rb12
3 files changed, 37 insertions, 0 deletions
diff --git a/test/psych/test_array.rb b/test/psych/test_array.rb
index 28b76da785..a6be0baf2f 100644
--- a/test/psych/test_array.rb
+++ b/test/psych/test_array.rb
@@ -57,6 +57,19 @@ module Psych
assert_cycle(@list)
end
+ def test_recursive_array_uses_alias
+ @list << @list
+
+ expected = <<~eoyaml
+ --- &1
+ - :a: b
+ - foo
+ - *1
+ eoyaml
+
+ assert_equal expected, Psych.dump(@list)
+ end
+
def test_cycle
assert_cycle(@list)
end
diff --git a/test/psych/test_hash.rb b/test/psych/test_hash.rb
index 5374781339..43e4b8bf14 100644
--- a/test/psych/test_hash.rb
+++ b/test/psych/test_hash.rb
@@ -112,6 +112,18 @@ eoyml
assert_equal({"foo"=>{"hello"=>"world"}, "bar"=>{"hello"=>"world"}}, hash)
end
+ def test_recursive_hash_uses_alias
+ h = { }
+ h["recursive_reference"] = h
+
+ expected = <<~eoyaml
+ --- &1
+ recursive_reference: *1
+ eoyaml
+
+ assert_equal(expected, Psych.dump(h))
+ end
+
def test_key_deduplication
unless String.method_defined?(:-@) && (-("a" * 20)).equal?((-("a" * 20)))
pend "This Ruby implementation doesn't support string deduplication"
diff --git a/test/psych/test_object.rb b/test/psych/test_object.rb
index 0faf6b244d..648a3ca6a5 100644
--- a/test/psych/test_object.rb
+++ b/test/psych/test_object.rb
@@ -41,5 +41,17 @@ module Psych
assert_instance_of(Foo, loaded)
assert_equal loaded, loaded.parent
end
+
+ def test_cyclic_reference_uses_alias
+ foo = Foo.new(nil)
+ foo.parent = foo
+
+ expected = <<~eoyaml
+ --- &1 !ruby/object:Psych::Foo
+ parent: *1
+ eoyaml
+
+ assert_equal expected, Psych.dump(foo)
+ end
end
end