@@ -64,6 +64,31 @@ def test_load
6464 assert_equal "hello" , obj . bar
6565 assert_equal "bar" , obj . foo
6666 end
67+
68+ def test_members_must_be_identical
69+ TestData . const_set :D , Data . define ( :a , :b )
70+ d = Psych . dump ( TestData ::D . new ( 1 , 2 ) )
71+
72+ # more members
73+ TestData . send :remove_const , :D
74+ TestData . const_set :D , Data . define ( :a , :b , :c )
75+ e = assert_raise ( ArgumentError ) { Psych . unsafe_load d }
76+ assert_equal 'missing keyword: :c' , e . message
77+
78+ # less members
79+ TestData . send :remove_const , :D
80+ TestData . const_set :D , Data . define ( :a )
81+ e = assert_raise ( ArgumentError ) { Psych . unsafe_load d }
82+ assert_equal 'unknown keyword: :b' , e . message
83+
84+ # completely different members
85+ TestData . send :remove_const , :D
86+ TestData . const_set :D , Data . define ( :foo , :bar )
87+ e = assert_raise ( ArgumentError ) { Psych . unsafe_load d }
88+ assert_equal 'unknown keywords: :a, :b' , e . message
89+ ensure
90+ TestData . send :remove_const , :D
91+ end
6792 end
6893end
6994
0 commit comments