* 2022-01-18 [ci skip]
[ruby-80x24.org.git] / test / psych / test_object_references.rb
blob269d72242e05d711f3ddea4bbdfb70f9ac999799
1 # frozen_string_literal: true
2 require_relative 'helper'
4 module Psych
5   class TestObjectReferences < TestCase
6     def test_range_has_references
7       assert_reference_trip 1..2
8     end
10     def test_module_has_references
11       assert_reference_trip Psych
12     end
14     def test_class_has_references
15       assert_reference_trip TestObjectReferences
16     end
18     def test_rational_has_references
19       assert_reference_trip Rational('1.2')
20     end
22     def test_complex_has_references
23       assert_reference_trip Complex(1, 2)
24     end
26     def test_datetime_has_references
27       assert_reference_trip DateTime.now
28     end
30     def test_struct_has_references
31       assert_reference_trip Struct.new(:foo).new(1)
32     end
34     def assert_reference_trip obj
35       yml = Psych.dump([obj, obj])
36       assert_match(/\*-?\d+/, yml)
37       begin
38         data = Psych.load yml
39       rescue Psych::DisallowedClass
40         data = Psych.unsafe_load yml
41       end
42       assert_equal data.first.object_id, data.last.object_id
43     end
45     def test_float_references
46       data = Psych.unsafe_load <<-eoyml
47 ---\s
48 - &name 1.2
49 - *name
50       eoyml
51       assert_equal data.first, data.last
52       assert_equal data.first.object_id, data.last.object_id
53     end
55     def test_binary_references
56       data = Psych.unsafe_load <<-eoyml
57 ---
58 - &name !binary |-
59   aGVsbG8gd29ybGQh
60 - *name
61       eoyml
62       assert_equal data.first, data.last
63       assert_equal data.first.object_id, data.last.object_id
64     end
66     def test_regexp_references
67       data = Psych.unsafe_load <<-eoyml
68 ---\s
69 - &name !ruby/regexp /pattern/i
70 - *name
71       eoyml
72       assert_equal data.first, data.last
73       assert_equal data.first.object_id, data.last.object_id
74     end
75   end
76 end