require 'test/unit' require 'ostruct' class TC_OpenStruct < Test::Unit::TestCase def test_equality o1 = OpenStruct.new o2 = OpenStruct.new assert_equal(o1, o2) o1.a = 'a' assert_not_equal(o1, o2) o2.a = 'a' assert_equal(o1, o2) o1.a = 'b' assert_not_equal(o1, o2) o2 = Object.new o2.instance_eval{@table = {:a => 'b'}} assert_not_equal(o1, o2) end def test_inspect foo = OpenStruct.new assert_equal("#", foo.inspect) foo.bar = 1 foo.baz = 2 assert_equal("#", foo.inspect) foo = OpenStruct.new foo.bar = OpenStruct.new assert_equal('#>', foo.inspect) foo.bar.foo = foo assert_equal('#>>', foo.inspect) end def test_frozen o = OpenStruct.new o.a = 'a' o.freeze assert_raise(TypeError) {o.b = 'b'} assert_not_respond_to(o, :b) assert_raise(TypeError) {o.a = 'z'} assert_equal('a', o.a) o = OpenStruct.new :a => 42 def o.frozen?; nil end o.freeze assert_raise(TypeError, '[ruby-core:22559]') {o.a = 1764} end end