mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
parent
0b7cfdca09
commit
71f89c2874
3 changed files with 28 additions and 22 deletions
|
@ -57,17 +57,20 @@ module Psych
|
||||||
assert_cycle(@list)
|
assert_cycle(@list)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_recursive_array
|
||||||
|
@list << @list
|
||||||
|
|
||||||
|
loaded = Psych.load(Psych.dump(@list), aliases: true)
|
||||||
|
|
||||||
|
assert_same loaded, loaded.last
|
||||||
|
end
|
||||||
|
|
||||||
def test_recursive_array_uses_alias
|
def test_recursive_array_uses_alias
|
||||||
@list << @list
|
@list << @list
|
||||||
|
|
||||||
expected = <<~eoyaml
|
assert_raise(BadAlias) do
|
||||||
--- &1
|
Psych.load(Psych.dump(@list), aliases: false)
|
||||||
- :a: b
|
end
|
||||||
- foo
|
|
||||||
- *1
|
|
||||||
eoyaml
|
|
||||||
|
|
||||||
assert_equal expected, Psych.dump(@list)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_cycle
|
def test_cycle
|
||||||
|
|
|
@ -112,16 +112,22 @@ eoyml
|
||||||
assert_equal({"foo"=>{"hello"=>"world"}, "bar"=>{"hello"=>"world"}}, hash)
|
assert_equal({"foo"=>{"hello"=>"world"}, "bar"=>{"hello"=>"world"}}, hash)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_recursive_hash
|
||||||
|
h = { }
|
||||||
|
h["recursive_reference"] = h
|
||||||
|
|
||||||
|
loaded = Psych.load(Psych.dump(h), aliases: true)
|
||||||
|
|
||||||
|
assert_same loaded, loaded.fetch("recursive_reference")
|
||||||
|
end
|
||||||
|
|
||||||
def test_recursive_hash_uses_alias
|
def test_recursive_hash_uses_alias
|
||||||
h = { }
|
h = { }
|
||||||
h["recursive_reference"] = h
|
h["recursive_reference"] = h
|
||||||
|
|
||||||
expected = <<~eoyaml
|
assert_raise(BadAlias) do
|
||||||
--- &1
|
Psych.load(Psych.dump(h), aliases: false)
|
||||||
recursive_reference: *1
|
end
|
||||||
eoyaml
|
|
||||||
|
|
||||||
assert_equal(expected, Psych.dump(h))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_key_deduplication
|
def test_key_deduplication
|
||||||
|
|
|
@ -36,22 +36,19 @@ module Psych
|
||||||
def test_cyclic_references
|
def test_cyclic_references
|
||||||
foo = Foo.new(nil)
|
foo = Foo.new(nil)
|
||||||
foo.parent = foo
|
foo.parent = foo
|
||||||
loaded = Psych.unsafe_load Psych.dump foo
|
loaded = Psych.load(Psych.dump(foo), permitted_classes: [Foo], aliases: true)
|
||||||
|
|
||||||
assert_instance_of(Foo, loaded)
|
assert_instance_of(Foo, loaded)
|
||||||
assert_equal loaded, loaded.parent
|
assert_same loaded, loaded.parent
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_cyclic_reference_uses_alias
|
def test_cyclic_reference_uses_alias
|
||||||
foo = Foo.new(nil)
|
foo = Foo.new(nil)
|
||||||
foo.parent = foo
|
foo.parent = foo
|
||||||
|
|
||||||
expected = <<~eoyaml
|
assert_raise(BadAlias) do
|
||||||
--- &1 !ruby/object:Psych::Foo
|
Psych.load(Psych.dump(foo), permitted_classes: [Foo], aliases: false)
|
||||||
parent: *1
|
end
|
||||||
eoyaml
|
|
||||||
|
|
||||||
assert_equal expected, Psych.dump(foo)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue