# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl 1.t' # Note added by Frank Gibbons. # Tests should, as far as possible, avoid the use of literals. # If you register a service with authURI => mysite.com, # and you want to test a retrieved description of the service, # don't test that the service returns authURI eq "mysite.com", # test so that it returns the same value as you used to register it in the first place. ######################### # change 'tests => 1' to 'tests => last_test_to_print'; #use SOAP::Lite +trace; use Test::More 'no_plan'; # perldoc Test::More for details use strict; use English; use Data::Dumper; use MOBY::Client::CollectionArticle; #Is the client-code even installed? BEGIN { use_ok('MOBY::Client::CollectionArticle') }; END { # Clean up after yourself, in case tests fail, or the interpreter is interrupted partway though... }; my @autoload = qw/articleName Simples isSimple isCollection isSecondary XML XML_DOM/; my @API = (@autoload, qw/new createFromXML createFromDOM addSimple/); my $coll = MOBY::Client::CollectionArticle->new(); foreach (@autoload) {eval{$coll->$_};} # Call all AUTOLOAD methods, to create them. can_ok("MOBY::Client::CollectionArticle", @API) or diag("CollectionArticle doesn't implement full API"); is($coll->isSimple, 0) or diag("CollectionArticle cannot be Simple"); is($coll->isSecondary, 0) or diag("CollectionArticle cannot be Secondary"); is($coll->isCollection, 1) or diag("CollectionArticle must return isCollection=1"); my $aName = 'my Article'; # Check XML-generation code. # In reality, (XML, createFromXML) and (XML_DOM, createFromDOM) should behave the same. # Let's not assume that though. my ($artName, $ns, $id, $obj, $lsid) = ('my Simple Article', 'SGD', 'S0005111', 'Object', 'urn:foo:bar:my_lsid'); my ($collArtName) = "my Collection"; my $xml_coll = < XML $coll = MOBY::Client::CollectionArticle->new( XML => $xml_coll); is($coll->articleName(), $collArtName) or diag("CollectionArticle not correctly built from XML (articleName wrong)"); is(scalar @{$coll->Simples()}, 2) or diag("CollectionArticle didn't return correct number of Simples"); TODO: { local $TODO = "We should ideally check the contents of the Simples that are returned...."; } sub XML_maker { # Turn XML text into DOM. my $XML = shift; my $parser = XML::LibXML->new(); my $doc; eval { $doc = $parser->parse_string( $XML ); }; return '' if ( $EVAL_ERROR ); #("Couldn't parse '$XML' because:\n\t$EVAL_ERROR") return $doc->getDocumentElement(); } $coll = MOBY::Client::CollectionArticle->new( XML_DOM => XML_maker($xml_coll)); is($coll->articleName(), $collArtName) or diag("CollectionArticle not correctly built from XML_DOM (articleName wrong)"); TODO: { local $TODO = <new()->XML(\$xml), I expect that the XML will be *parsed*, to modify the object, not that the attribute 'XML' will be set, and the rest left unchanged." TODO $coll = MOBY::Client::CollectionArticle->new(); $coll->XML($xml_coll); is($coll->articleName, $collArtName) or diag("Couldn't create CollectionArticle from autoloaded method XML(): articleName wrong"); }