1require 'psych/helper'
2
3module Psych
4  class TestObjectReferences < TestCase
5    def test_range_has_references
6      assert_reference_trip 1..2
7    end
8
9    def test_module_has_references
10      assert_reference_trip Psych
11    end
12
13    def test_class_has_references
14      assert_reference_trip TestObjectReferences
15    end
16
17    def test_rational_has_references
18      assert_reference_trip Rational('1.2')
19    end
20
21    def test_complex_has_references
22      assert_reference_trip Complex(1, 2)
23    end
24
25    def test_datetime_has_references
26      assert_reference_trip DateTime.now
27    end
28
29    def assert_reference_trip obj
30      yml = Psych.dump([obj, obj])
31      assert_match(/\*-?\d+/, yml)
32      data = Psych.load yml
33      assert_equal data.first.object_id, data.last.object_id
34    end
35
36    def test_float_references
37      data = Psych.load <<-eoyml
38---\s
39- &name 1.2
40- *name
41      eoyml
42      assert_equal data.first, data.last
43      assert_equal data.first.object_id, data.last.object_id
44    end
45
46    def test_binary_references
47      data = Psych.load <<-eoyml
48---
49- &name !binary |-
50  aGVsbG8gd29ybGQh
51- *name
52      eoyml
53      assert_equal data.first, data.last
54      assert_equal data.first.object_id, data.last.object_id
55    end
56
57    def test_regexp_references
58      data = Psych.load <<-eoyml
59---\s
60- &name !ruby/regexp /pattern/i
61- *name
62      eoyml
63      assert_equal data.first, data.last
64      assert_equal data.first.object_id, data.last.object_id
65    end
66  end
67end
68