use strict; use warnings; use Test::More tests => 64; ## use the Element constructor to create an element ## for each type of element, and make sure that they're ## available in the record afterwards use_ok( 'DublinCore::Record' ); use_ok( 'DublinCore::Element' ); my $record = DublinCore::Record->new(); foreach my $element ( @DublinCore::Record::VALID_ELEMENTS ) { my $e = DublinCore::Element->new( { name => $element, qualifier => "$element-qualifier", content => "$element-content", language => "$element-language", scheme => "$element-scheme" } ); $record->add($e); } foreach my $element ( @DublinCore::Record::VALID_ELEMENTS ) { my $e = $record->$element(); foreach my $attrib ( qw( qualifier content language scheme ) ) { is( $e->$attrib(), "$element-$attrib", "$element : $attrib" ); } } # make sure we get the same results with elements() my @expected_elements = map +{ name => $_, qualifier => "$_-qualifier", content => "$_-content", language => "$_-language", scheme => "$_-scheme" }, sort @DublinCore::Record::VALID_ELEMENTS; my @got_elements = map +{ name => $_->name, qualifier => $_->qualifier, content => $_->content, language => $_->language, scheme => $_->scheme }, sort { $a->name cmp $b->name } $record->elements; is_deeply( \@got_elements, \@expected_elements, 'elements()' ); # test removing my $removed = $expected_elements[ 0 ]; @expected_elements = @expected_elements[ 1..$#expected_elements ]; my $name = $removed->{ name }; my $remove = $record->$name; $record->remove( $remove ); @got_elements = map +{ name => $_->name, qualifier => $_->qualifier, content => $_->content, language => $_->language, scheme => $_->scheme }, sort { $a->name cmp $b->name } $record->elements; is_deeply( \@got_elements, \@expected_elements, 'remove()' );