This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
covers 'facets/ostruct'
|
||||
|
||||
test_case OpenStruct do
|
||||
|
||||
method :merge! do
|
||||
test do
|
||||
o = OpenStruct.new(:a => 1)
|
||||
h = { :b => 2 }
|
||||
o.merge!(h)
|
||||
o.b.assert == 2
|
||||
end
|
||||
|
||||
test do
|
||||
o = OpenStruct.new( { :a => 1 } )
|
||||
h = { :b => 2 }
|
||||
o.merge!(h)
|
||||
o.b.assert == 2
|
||||
end
|
||||
end
|
||||
|
||||
method :__merge__ do
|
||||
test do
|
||||
o = OpenStruct.new( { :a => 1 } )
|
||||
h = { :b => 2 }
|
||||
q = o.__merge__( h )
|
||||
q.a.assert == 1
|
||||
q.b.assert == 2
|
||||
end
|
||||
|
||||
test do
|
||||
o1 = OpenStruct.new( { :a => 1 } )
|
||||
o2 = OpenStruct.new( { :b => 2 } )
|
||||
q = o1.__merge__( o2 )
|
||||
q.a.assert == 1
|
||||
q.b.assert == 2
|
||||
end
|
||||
|
||||
test "with_hash" do
|
||||
o = OpenStruct.new( { :a => 1 } )
|
||||
h = { :b => 2 }
|
||||
q = o.__merge__(h)
|
||||
q.a.assert == 1
|
||||
q.b.assert == 2
|
||||
end
|
||||
|
||||
test "two open structs" do
|
||||
o1 = OpenStruct.new( { :a => 1 } )
|
||||
o2 = OpenStruct.new( { :b => 2 } )
|
||||
q = o1.__merge__(o2)
|
||||
q.a.assert == 1
|
||||
q.b.assert == 2
|
||||
end
|
||||
end
|
||||
|
||||
# @deprecated
|
||||
#method :instance_delegate do
|
||||
# test "store" do
|
||||
# o = OpenStruct.new(:a => 1)
|
||||
# o.instance_delegate.store(:a,1)
|
||||
# o.a.assert == 1
|
||||
# end
|
||||
#
|
||||
# test "update" do
|
||||
# o = OpenStruct.new
|
||||
# o.instance_delegate.update(:a=>1)
|
||||
# o.a.assert == 1
|
||||
# end
|
||||
#end
|
||||
|
||||
method :[] do
|
||||
test do
|
||||
o = OpenStruct.new( { :a => 1 } )
|
||||
o[:a].assert == 1
|
||||
end
|
||||
end
|
||||
|
||||
method :[]= do
|
||||
test do
|
||||
o = OpenStruct.new( { :a => 1 } )
|
||||
o[:b] = 2
|
||||
o.b.assert == 2
|
||||
end
|
||||
end
|
||||
|
||||
class_method :new do
|
||||
test "old functionality" do
|
||||
o = OpenStruct.new
|
||||
o.foo.assert.nil?
|
||||
o.foo = :bar
|
||||
o.foo.assert ==:bar
|
||||
o.delete_field(:foo)
|
||||
o.foo.assert.nil?
|
||||
|
||||
o1 = OpenStruct.new(:x => 1, :z => 2)
|
||||
o1.x.assert == 1
|
||||
o1.z.assert == 2
|
||||
|
||||
o2 = OpenStruct.new(:x => 1, :z => 2)
|
||||
o1.assert == o2
|
||||
end
|
||||
|
||||
test "via block" do
|
||||
person = OpenStruct.new do |p|
|
||||
p.name = 'John Smith'
|
||||
p.gender = :M
|
||||
p.age = 71
|
||||
end
|
||||
person.name.assert == 'John Smith'
|
||||
person.gender.assert ==:M
|
||||
person.age.assert == 71
|
||||
person.address.assert ==nil
|
||||
end
|
||||
|
||||
test "via hash and block" do
|
||||
person = OpenStruct.new(:gender => :M, :age => 71) do |p|
|
||||
p.name = 'John Smith'
|
||||
end
|
||||
person.name.assert == 'John Smith'
|
||||
person.gender.assert == :M
|
||||
person.age.assert == 71
|
||||
person.address.assert == nil
|
||||
end
|
||||
|
||||
test "subclass via block" do
|
||||
person_class = Class.new(OpenStruct)
|
||||
person = person_class.new do |p|
|
||||
p.name = 'John Smith'
|
||||
p.gender = :M
|
||||
p.age = 71
|
||||
end
|
||||
person.name.assert == 'John Smith'
|
||||
person.gender.assert == :M
|
||||
person.age.assert == 71
|
||||
person.address.assert == nil
|
||||
end
|
||||
|
||||
test "subclass via hash and block" do
|
||||
person_class = Class.new(OpenStruct)
|
||||
person = person_class.new(:gender => :M, :age => 71) do |p|
|
||||
p.name = 'John Smith'
|
||||
end
|
||||
person.name.assert == 'John Smith'
|
||||
person.gender.assert == :M
|
||||
person.age.assert == 71
|
||||
person.address.assert ==nil
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
test_case Hash do
|
||||
|
||||
method :to_ostruct do
|
||||
|
||||
test do
|
||||
a = { :a => 1, :b => 2, :c => 3 }
|
||||
ao = a.to_ostruct
|
||||
ao.a.assert == a[:a]
|
||||
ao.b.assert == a[:b]
|
||||
ao.c.assert == a[:c]
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
method :to_ostruct_recurse do
|
||||
|
||||
test do
|
||||
a = { :a => 1, :b => 2, :c => { :x => 4 } }
|
||||
ao = a.to_ostruct_recurse
|
||||
ao.a.assert == a[:a]
|
||||
ao.b.assert == a[:b]
|
||||
ao.c.x.assert == a[:c][:x]
|
||||
end
|
||||
|
||||
test "with recursion" do
|
||||
a = {}
|
||||
a[:a] = a
|
||||
ao = a.to_ostruct_recurse
|
||||
ao.a.assert == ao
|
||||
end
|
||||
|
||||
test "advanced usage" do
|
||||
h = { 'a' => { 'b' => 1 } }
|
||||
o = h.to_ostruct_recurse( { h['a'] => h['a'] } )
|
||||
o.a['b'].assert == 1
|
||||
Hash.assert === o.a
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user