# $Id$ use strict; use FindBin; use Test::More tests => 16; use XML::Atom::Feed; my $foo = XML::Atom::Ext::Foo->new; isa_ok $foo, 'XML::Atom::Ext::Foo'; $foo->bar(1); is $foo->bar, 1; like $foo->as_xml, qr//; like $foo->as_xml, qr/1<\/bar>/; my $feed = XML::Atom::Feed->new; $feed->foo($foo); my $foo2 = $feed->foo; isa_ok $foo2, 'XML::Atom::Ext::Foo'; is $foo2->bar, 1; ## Make sure the alternate name works. $feed->foo2($foo); $foo2 = $feed->foo2; isa_ok $foo2, 'XML::Atom::Ext::Foo'; is $foo2->bar, 1; like $feed->as_xml, qr//; { my $elem = XML::Atom::Ext::WithNS->new; isa_ok $elem, 'XML::Atom::Ext::WithNS'; $elem->baz(1); is $elem->baz, 1; like $elem->as_xml, qr{add_with_ns( $elem ); like $feed->as_xml, qr{new( \' ' ); my( @elems ) = $feed->with_ns; is scalar @elems, 1; isa_ok $elems[ 0 ], 'XML::Atom::Ext::WithNS'; is $elems[ 0 ]->baz, 1 ; } package XML::Atom::Ext::Foo; use strict; use base qw( XML::Atom::Base ); BEGIN { __PACKAGE__->mk_elem_accessors('bar'); XML::Atom::Feed->mk_object_accessor( foo => __PACKAGE__ ); XML::Atom::Feed->mk_object_accessor( foo2 => __PACKAGE__ ); } sub element_name { 'foo' } sub element_ns { 'http://www.example.com/ns/' } package XML::Atom::Ext::WithNS; use strict; use warnings; use base qw( XML::Atom::Base ); BEGIN { __PACKAGE__->mk_attr_accessors( 'baz' ); XML::Atom::Feed->mk_object_list_accessor( with_ns => __PACKAGE__ ); } sub element_name { return 'with_ns' } sub element_ns { return XML::Atom::Namespace->new( "withns" => q{http://example.com/withns/} ); }