mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39944 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			49 lines
		
	
	
	
		
			973 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
	
		
			973 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
require_relative 'helper'
 | 
						|
 | 
						|
class PsychStructWithIvar < Struct.new(:foo)
 | 
						|
  attr_reader :bar
 | 
						|
  def initialize *args
 | 
						|
    super
 | 
						|
    @bar = 'hello'
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
module Psych
 | 
						|
  class TestStruct < TestCase
 | 
						|
    class StructSubclass < Struct.new(:foo)
 | 
						|
      def initialize foo, bar
 | 
						|
        super(foo)
 | 
						|
        @bar = bar
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    def test_self_referential_struct
 | 
						|
      ss = StructSubclass.new(nil, 'foo')
 | 
						|
      ss.foo = ss
 | 
						|
 | 
						|
      loaded = Psych.load(Psych.dump(ss))
 | 
						|
      assert_instance_of(StructSubclass, loaded.foo)
 | 
						|
 | 
						|
      assert_equal(ss, loaded)
 | 
						|
    end
 | 
						|
 | 
						|
    def test_roundtrip
 | 
						|
      thing = PsychStructWithIvar.new('bar')
 | 
						|
      struct = Psych.load(Psych.dump(thing))
 | 
						|
 | 
						|
      assert_equal 'hello', struct.bar
 | 
						|
      assert_equal 'bar', struct.foo
 | 
						|
    end
 | 
						|
 | 
						|
    def test_load
 | 
						|
      obj = Psych.load(<<-eoyml)
 | 
						|
--- !ruby/struct:PsychStructWithIvar
 | 
						|
:foo: bar
 | 
						|
:@bar: hello
 | 
						|
      eoyml
 | 
						|
 | 
						|
      assert_equal 'hello', obj.bar
 | 
						|
      assert_equal 'bar', obj.foo
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |