require_relative './../test_helper' # Parent | Child # :from | no :from | # -------------------|-------------- # :from | xml_name | xml_name-d # value | value | # -------------------|-------------- # :from | parent's | # value | accessor | un-xml_name-d # | name | class Child include ROXML end class NamedChild include ROXML xml_name :xml_name_of_child end class ParentOfNamedChild include ROXML xml_name :parent xml_accessor :child_accessor_name, :as => NamedChild end class ParentOfNamedChildWithFrom include ROXML xml_name :parent xml_accessor :child_accessor_name, :as => NamedChild, :from => 'child_from_name' end class ParentOfUnnamedChild include ROXML xml_name :parent xml_accessor :child_accessor_name, :as => Child end class ParentOfUnnamedChildWithFrom include ROXML xml_name :parent xml_accessor :child_accessor_name,:as => Child, :from => 'child_from_name' end class TestXMLName < ActiveSupport::TestCase def test_from_always_dominates_attribute_name_xml_name_or_not parent = ParentOfNamedChildWithFrom.new parent.child_accessor_name = Child.new assert_equal "", parent.to_xml.to_s.gsub(/[\n ]/, '') parent = ParentOfUnnamedChildWithFrom.new parent.child_accessor_name = Child.new assert_equal "", parent.to_xml.to_s.gsub(/[\n ]/, '') end def test_attribute_name_comes_from_the_xml_name_value_if_present parent = ParentOfNamedChild.new parent.child_accessor_name = Child.new assert_equal "", parent.to_xml.to_s.gsub(/[\n ]/, '') end def test_attribute_name_comes_from_parent_accessor_by_default parent = ParentOfUnnamedChild.new parent.child_accessor_name = Child.new assert_equal "", parent.to_xml.to_s.gsub(/[\n ]/, '') end def test_it_should_be_inherited class_with_inherited_name = Class.new(ParentOfNamedChild) assert_equal :parent, class_with_inherited_name.tag_name end def test_it_should_be_inherited_over_multiple_levels class_with_inherited_name = Class.new(Class.new(ParentOfNamedChild)) assert_equal :parent, class_with_inherited_name.tag_name end def test_named_books_picked_up named = Library.from_xml(fixture(:library)) assert named.books assert_equal :book, named.books.first.class.tag_name end def test_nameless_books_missing nameless = LibraryWithBooksOfUnderivableName.from_xml(fixture(:library)) assert nameless.novels.empty? end def test_tag_name assert_equal :dictionary, DictionaryOfTexts.tag_name dict = DictionaryOfTexts.from_xml(fixture(:dictionary_of_texts)) assert_equal :dictionary, dict.class.tag_name end def test_roxml_attrs assert_equal 'definition', DictionaryOfTexts.roxml_attrs.first.name assert_equal 'word', DictionaryOfTexts.roxml_attrs.first.hash.key.name assert_equal 'meaning', DictionaryOfTexts.roxml_attrs.first.hash.value.name end def test_xml_name_should_not_be_conventionalized_if_explicitly_set reference = ROXML::XMLTextRef.new(ROXML::Definition.new(:name, :from => 'georss:name'), WrapModule::InstanceStandin.new) assert_equal "georss:name", reference.name end def test_xml_name_not_screwed_up_by_xml_convention reference = ROXML::XMLTextRef.new(ROXML::Definition.new(:name, :in => './'), WrapModule::InstanceStandin.new) assert_equal "name value", reference.value_in(ROXML::XML.parse_string(%( name value )).root) end end module WrapModule class BaseClass include ROXML xml_convention :camelcase end class InstanceStandin < BaseClass xml_reader :name, :in => './' end end