#!/usr/bin/env ruby require "test/unit" require "xamplr-generator" require "example" include XamplGenerator include Xampl include XamplExample class TestXampl < Test::Unit::TestCase def test_simple_xampl emph1 = Emph.new assert_not_nil(emph1.is_changed) emph2 = Emph.new assert_not_nil(emph2.is_changed) emph3 = Emph.new assert_not_nil(emph3.is_changed) emph1.content = "emph 1" assert_not_nil(emph1.is_changed) emph2.content = "emph 2" assert_not_nil(emph2.is_changed) assert_equal("emph 1", emph1.content) assert_equal("emph 2", emph2.content) assert_equal("emph 1", emph1.to_xml) assert_equal("emph 2", emph2.to_xml) assert_equal("", emph3.to_xml) fakeRules = XMLPrinter.new("fake...") emph1.to_xml_internal(fakeRules) r = fakeRules.done assert_equal("fake... xmlns:ns0='http://xampl.com/example'emph 1", r) assert_not_nil(emph1.is_changed) assert_not_nil(emph2.is_changed) assert_not_nil(emph3.is_changed) check_parents(emph1) check_parents(emph2) check_parents(emph3) end def test_empty_xampl stuff1 = Stuff.new assert_not_nil(stuff1.is_changed) stuff1.kind = 'test' assert_not_nil(stuff1.is_changed) stuff2 = Stuff.new assert_not_nil(stuff2.is_changed) stuff3 = Stuff.new assert_not_nil(stuff3.is_changed) stuff3.kind = 'test' assert_not_nil(stuff3.is_changed) stuff3.special = 'test' assert_not_nil(stuff3.is_changed) assert_equal("", stuff1.to_xml) assert_equal("", stuff2.to_xml) assert_equal("", stuff3.to_xml) fakeRules = XMLPrinter.new("fake...") stuff1.to_xml_internal(fakeRules) r = fakeRules.done assert_equal("fake... xmlns:ns1='http://xampl.com/example' xmlns:ns0='http://xampl.com/example/special'", r) check_parents(stuff1) check_parents(stuff2) check_parents(stuff3) end def test_mixed_xampl desc1 = Description.new assert_not_nil(desc1.is_changed) desc1.kind = "desc1" assert_not_nil(desc1.is_changed) assert_equal("", desc1.to_xml) desc1.add_content("hello ") emph_content_1 = "there" desc1.new_emph.content = emph_content_1 desc1.add_content("! How ") emph_content_2 = "are" desc1.new_emph.content = emph_content_2 desc1.add_content(" you?") assert_not_nil(desc1.is_changed) assert_equal("hello there! How are you?", desc1.to_xml) assert_equal(desc1.emph_child.length, 2) assert_equal(emph_content_1, desc1.emph_child[0].content, emph_content_1) assert_equal(emph_content_2, desc1.emph_child[1].content, emph_content_2) check_parents(desc1) end def test_data_xampl emph_content_1 = "there" emph_content_2 = "are" big_thing = Xampl.make(Thing){ | big_thing | big_thing.new_thing("thing"){ | thing | thing.new_stuff.kind = "stuff1" thing.new_description{ | desc | desc.kind = "desc1" desc.add_content("hello ") desc.new_emph.content = emph_content_1 desc.add_content("! How ") desc.new_emph.content = emph_content_2 desc.add_content(" you?") } } } ### desc1 = Description.new ### desc1.kind = "desc1" ### ### desc1.add_content("hello ") ### emph_content_1 = "there" ### desc1.new_emph.content = emph_content_1 ### desc1.add_content("! How ") ### emph_content_2 = "are" ### desc1.new_emph.content = emph_content_2 ### desc1.add_content(" you?") ### ### thing = Thing.new ### thing.pid = "thing" ### assert(thing.is_changed) ### thing.new_stuff.kind = "stuff1" ### assert_not_nil(thing.is_changed) ### thing.is_changed = nil ### thing.add_description(desc1) ### assert_not_nil(thing.is_changed) ### ### big_thing = Thing.new ### big_thing.add_thing(thing) assert_equal("hello there! How are you?", big_thing.to_xml) assert_equal(1, big_thing.children.length) assert_equal(2, big_thing.thing_child[0].children.length) assert_equal(big_thing.thing_child[0].description_child[0].emph_child.length, 2) assert_equal(emph_content_1, big_thing.thing_child[0].description_child[0].emph_child[0].content, emph_content_1) assert_equal(emph_content_2, big_thing.thing_child[0].description_child[0].emph_child[1].content, emph_content_2) check_parents(big_thing) end def test_data_xampl_using_append emph_content_1 = "there" emph1 = Emph.new emph1 << emph_content_1 emph_content_2 = "are" emph2 = Emph.new emph2.content = emph_content_2 desc1 = Description.new desc1.kind = "desc1" desc1.is_changed = nil desc1 << "hello " << emph1 << "! How " << emph2 << " you?" assert_not_nil(desc1.is_changed) thing = Thing.new thing.pid = "thing" thing.new_stuff.kind = "stuff1" thing << desc1 big_thing = Thing.new big_thing << thing assert_equal("hello there! How are you?", big_thing.to_xml) assert_equal(2, big_thing.thing_child[0].description_child[0].emph_child.length) assert_equal(emph_content_1, big_thing.thing_child[0].description_child[0].emph_child[0].content) assert_equal(emph_content_2, big_thing.thing_child[0].description_child[0].emph_child[1].content) check_parents(big_thing) end def test_from_xml emph_content_1 = "there" emph1 = Emph.new emph1 << emph_content_1 emph_content_2 = "are" emph2 = Emph.new emph2.content = emph_content_2 desc1 = Description.new desc1.kind = "desc1" desc1.is_changed = nil desc1 << "hello " << emph1 << "! How " << emph2 << " you?" thing = Thing.new thing.pid = "thing" thing.new_stuff.kind = "stuff1" thing << desc1 big_thing = Thing.new big_thing << "leading content" << thing << "trailing content" #puts big_thing.to_xml #pp = FromXML.new #pp.setup_parse_string(big_thing.to_xml) #while not pp.endDocument? #event = pp.next_interesting_event #puts event #if (event == Xampl_PP::TEXT) then #puts "TEXT [[[" << pp.text << "]]]" #end #end pp = FromXML.new pp.setup_parse_string(big_thing.to_xml) assert_equal(pp.next_interesting_event, Xampl_PP::START_ELEMENT) assert_equal(pp.next_interesting_event, Xampl_PP::TEXT) assert_equal(pp.next_interesting_event, Xampl_PP::START_ELEMENT) assert_equal(pp.next_interesting_event, Xampl_PP::START_ELEMENT) assert_equal(pp.next_interesting_event, Xampl_PP::END_ELEMENT) assert_equal(pp.next_interesting_event, Xampl_PP::START_ELEMENT) assert_equal(pp.next_interesting_event, Xampl_PP::TEXT) assert_equal(pp.next_interesting_event, Xampl_PP::START_ELEMENT) assert_equal(pp.next_interesting_event, Xampl_PP::TEXT) assert_equal(pp.next_interesting_event, Xampl_PP::END_ELEMENT) assert_equal(pp.next_interesting_event, Xampl_PP::TEXT) assert_equal(pp.next_interesting_event, Xampl_PP::START_ELEMENT) assert_equal(pp.next_interesting_event, Xampl_PP::TEXT) assert_equal(pp.next_interesting_event, Xampl_PP::END_ELEMENT) assert_equal(pp.next_interesting_event, Xampl_PP::TEXT) assert_equal(pp.next_interesting_event, Xampl_PP::END_ELEMENT) assert_equal(pp.next_interesting_event, Xampl_PP::END_ELEMENT) assert_equal(pp.next_interesting_event, Xampl_PP::END_ELEMENT) assert_equal(pp.next_interesting_event, Xampl_PP::END_DOCUMENT) assert(pp.endDocument?) pp = FromXML.new another_big_thing = pp.parse_string(big_thing.to_xml) assert_equal(big_thing.to_xml, another_big_thing.to_xml) end def test_index thing = Thing.new thing.new_key_value("one").value = "1" thing.new_key_value("two").value = "2" assert_equal(thing.key_value_child[0], thing.key_value_map["one"]) assert_equal(thing.key_value_child[1], thing.key_value_map["two"]) check_parents(thing) end def test_parents thing = Thing.new (kv1 = thing.new_key_value("one")).value = "1" (kv2 = thing.new_key_value("two")).value = "2" assert_equal(thing, thing.key_value_child[0].parents[0]) assert_equal(thing, thing.key_value_child[1].parents[0]) another_thing = Thing.new another_thing << kv1 << kv2 assert_equal(2, kv1.parents.size) assert_equal(2, kv2.parents.size) check_parents(thing) check_parents(another_thing) end def test_non_string_attributes stuff1 = Stuff.new stuff1.kind = 123.456 assert_equal("", stuff1.to_xml) stuff1.kind = nil assert_equal("", stuff1.to_xml) stuff1.kind = [1, 2, 3] assert_equal("", stuff1.to_xml) stuff2 = Stuff.new stuff2.kind = 123 stuff1.kind = stuff2 assert_equal("", stuff1.to_xml) thing = Thing.new thing.pid = "thing" thing << stuff2 stuff1.kind = thing # TODO -- check what happens with a PIDed thing assert_equal("", stuff1.to_xml) # TODO -- check round tripping of this stuff check_parents(stuff1) end def test_registry assert_equal([ Emph ], FromXML::registered(Emph::ns_tag)) assert_equal([ Emph ], FromXML::registered(Emph::tag)) assert_equal([ Stuff ], FromXML::registered(Stuff::ns_tag)) assert_equal([ Stuff ], FromXML::registered(Stuff::tag)) FromXML::register(Emph::tag, Emph::ns_tag, Emph) assert_equal([ Emph ], FromXML::registered(Emph::ns_tag)) assert_equal([ Emph ], FromXML::registered(Emph::tag)) FromXML::register(Emph::tag, Thing::ns_tag, Thing) assert_equal([ Emph ], FromXML::registered(Emph::ns_tag)) assert_equal([ Emph, Thing ], FromXML::registered(Emph::tag)) end def test_in_memory_persistence_basics stuff = Stuff.new thing = Thing.new thing << stuff assert(!stuff.persist_required) assert(thing.persist_required) assert(nil == thing.persister) persister = InMemoryPersister.new assert(!persister.write(thing)) thing.pid = "thing" assert(persister.write(thing)) saved_thing = persister.read(Thing, "thing") assert(saved_thing) assert_equal(thing.to_xml, saved_thing.to_xml) Xampl.in_memory_persister("first") stuff = Stuff.new thing = Thing.new thing.pid = "thing" thing << stuff assert_nil(Xampl.lookup(Thing, "thing")) assert(nil == thing.persister) assert(thing.is_changed) assert(0 == Xampl.count_changed) Xampl.introduce_to_persister(thing) assert(thing.persister) assert_equal(1, Xampl.count_changed) assert_equal(thing, Xampl.lookup(Thing, "thing"), "cannot lookup new stuff") #Xampl.print_stats assert_equal(1, Xampl.count_changed) writes = Xampl.sync assert_equal(1, writes) assert_equal(0, Xampl.count_changed) assert(Xampl.lookup(Thing, "thing")) assert_equal(thing, Xampl.lookup(Thing, "thing"), "cannot lookup cached stuff") Xampl.clear_cache found = Xampl.lookup(Thing, "thing") assert_not_equal(thing, found) #Xampl.print_stats end def test_escaping description = Description.new description.kind = "<>&'\"" description << "<>&'\"" expect = "<>&'\"" assert_equal(expect, description.to_xml) end def test_generator options = Xampl.make(Options) { | options | options.new_index_attribute("name") options.new_index_attribute("id") options.new_index_attribute("pid").persisted = true options.new_resolve{ | resolver | resolver.pkg = "XamplExample" resolver.namespace="http://xampl.com/example" } options.new_resolve{ | resolver | resolver.pkg = "XamplExamplePlay" resolver.namespace="http://xampl.com/example/play" } } generator = Generator.new(options) generator.comprehend_from_strings([ %Q{ blah blah blah } ]) ns = "http://xampl.com/example" emap = generator.elements_map assert_equal(1, emap.size) elements = emap[ns] assert_not_nil(elements) assert_equal(6, elements.element_child.size) ename = "emph" element = elements.element_map[ename] assert_not_nil(element) assert_equal(ns, element.namespace) assert_equal("{#{ns}}#{ename}", element.nstag) assert(!element.empty) assert(element.has_content) ename = "description" element = elements.element_map[ename] assert_not_nil(element) assert_equal(ns, element.namespace) assert_equal("{#{ns}}#{ename}", element.nstag) assert(!element.empty) assert(element.has_content) assert_equal(1, element.attribute_child.size) assert_not_nil(element.attribute_map["kind"]) assert_nil(element.attribute_map["kind"].namespace) assert_equal(1, element.child_element_child.size) cname = "{#{ns}}emph" assert_not_nil(element.child_element_map[cname]) assert_equal(ns, element.child_element_map[cname].namespace) assert_equal("emph", element.child_element_map[cname].element_name) ename = "stuff" element = elements.element_map[ename] assert_not_nil(element) assert_equal(ns, element.namespace) assert_equal("{#{ns}}#{ename}", element.nstag) assert(element.empty) assert(!element.has_content) assert_equal(2, element.attribute_child.size) assert_not_nil(element.attribute_map["kind"]) assert_nil(element.attribute_map["kind"].namespace) assert_not_nil(element.attribute_map["special"]) assert_equal('http://xampl.com/example/special', element.attribute_map["special"].namespace) assert_equal(0, element.child_element_child.size) ename = "keyValue" element = elements.element_map[ename] assert_not_nil(element) assert_equal(ns, element.namespace) assert_equal("{#{ns}}#{ename}", element.nstag) assert(element.empty) assert(!element.has_content) assert_equal(2, element.attribute_child.size) assert_not_nil(element.attribute_map["id"]) assert_nil(element.attribute_map["id"].namespace) assert_not_nil(element.attribute_map["value"]) assert_nil(element.attribute_map["value"].namespace) assert_equal(0, element.child_element_child.size) ename = "thing" element = elements.element_map[ename] assert_not_nil(element) assert_equal(ns, element.namespace) assert_equal("{#{ns}}#{ename}", element.nstag) assert(element.empty) assert(!element.has_content) assert_equal(1, element.attribute_child.size) assert_equal(1, element.attribute_map.size) assert_not_nil(element.attribute_map["pid"]) assert_nil(element.attribute_map["pid"].namespace) assert_equal(5, element.child_element_child.size) cname = "{#{ns}}description" assert_not_nil(element.child_element_map[cname]) assert_equal(ns, element.child_element_map[cname].namespace) assert_equal("description", element.child_element_map[cname].element_name) cname = "{#{ns}}keyValue" assert_not_nil(element.child_element_map[cname]) assert_equal(ns, element.child_element_map[cname].namespace) assert_equal("keyValue", element.child_element_map[cname].element_name) cname = "{#{ns}}stuff" assert_not_nil(element.child_element_map[cname]) assert_equal(ns, element.child_element_map[cname].namespace) assert_equal("stuff", element.child_element_map[cname].element_name) cname = "{#{ns}}thing" assert_not_nil(element.child_element_map[cname]) assert_equal(ns, element.child_element_map[cname].namespace) assert_equal("thing", element.child_element_map[cname].element_name) cname = "{#{ns}}things" assert_not_nil(element.child_element_map[cname]) assert_equal(ns, element.child_element_map[cname].namespace) assert_equal("things", element.child_element_map[cname].element_name) ename = "things" element = elements.element_map[ename] assert_not_nil(element) assert_equal(ns, element.namespace) assert_equal("{#{ns}}#{ename}", element.nstag) assert(element.empty) assert(!element.has_content) assert_equal(0, element.attribute_child.size) assert_equal(1, element.child_element_child.size) cname = "{#{ns}}thing" assert_not_nil(element.child_element_map[cname]) assert_equal(ns, element.child_element_map[cname].namespace) assert_equal("thing", element.child_element_map[cname].element_name) #generator.print_stats #generator.analyse ename = "emph" element = elements.element_map[ename] assert_equal("simple", element.kind, "emph is wrong kind") assert_nil(element.indexed_by) assert_nil(element.persisted) assert_equal("XamplExample", element.package) assert_equal("Emph", element.class_name) assert_equal("emph", element.attribute_name) ename = "description" element = elements.element_map[ename] assert_equal("mixed", element.kind, "description is wrong kind") assert_nil(element.indexed_by) assert_nil(element.persisted) assert_equal("XamplExample", element.package) assert_equal("Description", element.class_name) assert_equal("description", element.attribute_name) ename = "stuff" element = elements.element_map[ename] assert_equal("empty", element.kind, "stuff is wrong kind") assert_nil(element.indexed_by) assert_nil(element.persisted) assert_equal("XamplExample", element.package) assert_equal("Stuff", element.class_name) assert_equal("stuff", element.attribute_name) ename = "keyValue" element = elements.element_map[ename] assert_equal("empty", element.kind, "keyValue is wrong kind") assert_equal("id", element.indexed_by) assert_nil(element.persisted) assert_equal("XamplExample", element.package) assert_equal("KeyValue", element.class_name) assert_equal("key_value", element.attribute_name) ename = "thing" element = elements.element_map[ename] assert_equal("data", element.kind, "thing is wrong kind") assert_equal("pid", element.indexed_by) assert_not_nil(element.persisted) assert_equal("XamplExample", element.package) assert_equal("Thing", element.class_name) assert_equal("thing", element.attribute_name) generator.generate_to_directory(nil) end def test_generator_with_no_namespace generator = Generator.new generator.comprehend_from_strings([ %Q{ blah blah blah } ]) ns = "" #ns = nil emap = generator.elements_map assert_equal(1, emap.size) elements = emap[ns] assert_not_nil(elements) assert_equal(6, elements.element_child.size) ename = "emph" element = elements.element_map[ename] assert_not_nil(element) assert_equal(ns, element.namespace) assert_equal("{#{ns}}#{ename}", element.nstag) assert(!element.empty) assert(element.has_content) ename = "description" element = elements.element_map[ename] assert_not_nil(element) assert_equal(ns, element.namespace) assert_equal("{#{ns}}#{ename}", element.nstag) assert(!element.empty) assert(element.has_content) assert_equal(1, element.attribute_child.size) assert_not_nil(element.attribute_map["kind"]) assert_nil(element.attribute_map["kind"].namespace) assert_equal(1, element.child_element_child.size) cname = "{#{ns}}emph" assert_not_nil(element.child_element_map[cname]) assert_equal(ns, element.child_element_map[cname].namespace) assert_equal("emph", element.child_element_map[cname].element_name) ename = "stuff" element = elements.element_map[ename] assert_not_nil(element) assert_equal(ns, element.namespace) assert_equal("{#{ns}}#{ename}", element.nstag) assert(element.empty) assert(!element.has_content) assert_equal(2, element.attribute_child.size) assert_not_nil(element.attribute_map["kind"]) assert_nil(element.attribute_map["kind"].namespace) assert_not_nil(element.attribute_map["special"]) assert_equal('http://xampl.com/example/special', element.attribute_map["special"].namespace) assert_equal(0, element.child_element_child.size) ename = "keyValue" element = elements.element_map[ename] assert_not_nil(element) assert_equal(ns, element.namespace) assert_equal("{#{ns}}#{ename}", element.nstag) assert(element.empty) assert(!element.has_content) assert_equal(2, element.attribute_child.size) assert_not_nil(element.attribute_map["id"]) assert_nil(element.attribute_map["id"].namespace) assert_not_nil(element.attribute_map["value"]) assert_nil(element.attribute_map["value"].namespace) assert_equal(0, element.child_element_child.size) ename = "thing" element = elements.element_map[ename] assert_not_nil(element) assert_equal(ns, element.namespace) assert_equal("{#{ns}}#{ename}", element.nstag) assert(element.empty) assert(!element.has_content) assert_equal(1, element.attribute_child.size) assert_equal(1, element.attribute_map.size) assert_not_nil(element.attribute_map["pid"]) assert_nil(element.attribute_map["pid"].namespace) assert_equal(5, element.child_element_child.size) cname = "{#{ns}}description" assert_not_nil(element.child_element_map[cname]) assert_equal(ns, element.child_element_map[cname].namespace) assert_equal("description", element.child_element_map[cname].element_name) cname = "{#{ns}}keyValue" assert_not_nil(element.child_element_map[cname]) assert_equal(ns, element.child_element_map[cname].namespace) assert_equal("keyValue", element.child_element_map[cname].element_name) cname = "{#{ns}}stuff" assert_not_nil(element.child_element_map[cname]) assert_equal(ns, element.child_element_map[cname].namespace) assert_equal("stuff", element.child_element_map[cname].element_name) cname = "{#{ns}}thing" assert_not_nil(element.child_element_map[cname]) assert_equal(ns, element.child_element_map[cname].namespace) assert_equal("thing", element.child_element_map[cname].element_name) cname = "{#{ns}}things" assert_not_nil(element.child_element_map[cname]) assert_equal(ns, element.child_element_map[cname].namespace) assert_equal("things", element.child_element_map[cname].element_name) ename = "things" element = elements.element_map[ename] assert_not_nil(element) assert_equal(ns, element.namespace) assert_equal("{#{ns}}#{ename}", element.nstag) assert(element.empty) assert(!element.has_content) assert_equal(0, element.attribute_child.size) assert_equal(1, element.child_element_child.size) cname = "{#{ns}}thing" assert_not_nil(element.child_element_map[cname]) assert_equal(ns, element.child_element_map[cname].namespace) assert_equal("thing", element.child_element_map[cname].element_name) #generator.print_stats #generator.analyse ename = "emph" element = elements.element_map[ename] assert_equal("simple", element.kind, "emph is wrong kind") assert_nil(element.indexed_by) assert_nil(element.persisted) assert_equal("XamplAdHoc", element.package) assert_equal("Emph", element.class_name) assert_equal("emph", element.attribute_name) ename = "description" element = elements.element_map[ename] assert_equal("mixed", element.kind, "description is wrong kind") assert_nil(element.indexed_by) assert_nil(element.persisted) assert_equal("XamplAdHoc", element.package) assert_equal("Description", element.class_name) assert_equal("description", element.attribute_name) ename = "stuff" element = elements.element_map[ename] assert_equal("empty", element.kind, "stuff is wrong kind") assert_nil(element.indexed_by) assert_nil(element.persisted) assert_equal("XamplAdHoc", element.package) assert_equal("Stuff", element.class_name) assert_equal("stuff", element.attribute_name) ename = "keyValue" element = elements.element_map[ename] assert_equal("empty", element.kind, "keyValue is wrong kind") assert_equal("id", element.indexed_by) assert_nil(element.persisted) assert_equal("XamplAdHoc", element.package) assert_equal("KeyValue", element.class_name) assert_equal("key_value", element.attribute_name) ename = "thing" element = elements.element_map[ename] assert_equal("data", element.kind, "thing is wrong kind") assert_equal("pid", element.indexed_by) assert_not_nil(element.persisted) assert_equal("XamplAdHoc", element.package) assert_equal("Thing", element.class_name) assert_equal("thing", element.attribute_name) generator.generate_to_directory(nil) end def choose_name_test_helper(name, expected_class_name, expected_attribute_name) original_name = name.dup class_name, attribute_name = Generator.choose_names(name) assert_equal(original_name, name, "changed the original name") assert_equal(expected_class_name, class_name, "CLASS name wrong") assert_equal(expected_attribute_name, attribute_name, "ATTRIBUTE name wrong") end def test_choose_names choose_name_test_helper("abcd", "Abcd", "abcd") choose_name_test_helper("Abcd", "Abcd", "abcd") choose_name_test_helper("abCd", "AbCd", "ab_cd") choose_name_test_helper("AbCd", "AbCd", "ab_cd") choose_name_test_helper("ABcd", "ABcd", "abcd") choose_name_test_helper("ABcdefABCdef", "ABcdefABCdef", "abcdef_abcdef") choose_name_test_helper("ab-cd", "AbCd", "ab_cd") choose_name_test_helper("Ab-Cd", "AbCd", "ab_cd") choose_name_test_helper("ab--cd", "AbCd", "ab_cd") choose_name_test_helper("Ab--Cd", "AbCd", "ab_cd") choose_name_test_helper("ab_-cd", "AbCd", "ab_cd") choose_name_test_helper("Ab_-Cd", "AbCd", "ab_cd") choose_name_test_helper("ab__cd", "AbCd", "ab_cd") choose_name_test_helper("Ab__Cd", "AbCd", "ab_cd") choose_name_test_helper("ab:cd", "AbCd", "ab_cd") choose_name_test_helper("Ab:Cd", "AbCd", "ab_cd") end # TODO -- test no namespace def test_bug_indexed_child_same_pid_added_twice element = Element.new attr0 = element.new_attribute("repeated") assert_equal(1, element.attribute_map.size) assert_equal(1, element.attribute_child.size) assert_equal(1, element.children.size) assert_equal(attr0, element.children[0]) ce1 = element.new_child_element("something") assert_equal(1, element.attribute_map.size) assert_equal(1, element.attribute_child.size) assert_equal(2, element.children.size) assert_equal(attr0, element.children[0]) assert_equal(ce1, element.children[1]) attr2 = element.new_attribute("repeated") assert_equal(1, element.attribute_map.size) assert_equal(1, element.attribute_child.size) assert_equal(2, element.children.size) assert_equal(ce1, element.children[0]) assert_equal(attr2, element.children[1]) end def check_parents(xampl, parent=nil) if (nil != parent) then found = false xampl.parents.each{ | p | found = true if (parent == p) } assert(found) else if (xampl.kind_of? XamplObject) assert((nil == xampl.parents) || (0 == xampl.parents.size)) end end xampl.children.each{ | child | check_parents(child, xampl) if (child.kind_of? XamplObject) } end end