NAME¶
XML::Compile::Tester - support XML::Compile related regression testing
INHERITANCE¶
XML::Compile::Tester
is a Exporter
SYNOPSIS¶
use XML::Compile::Tester;
# default additional compile flags, avoids repetition
set_compile_defaults(validation => 0, @other_opts);
set_compile_defaults(); # reset
# set default namespace, such that $type only needs to use local
my $ns = 'some-schemas-targetNamespace';
my $type = pack_type($ns, 'localName'); # X::C::Util
set_default_namespace($ns);
my $type = 'localName'; # now implicit in $ns
my $reader = reader_create($schema, "my reader", $type, @opts);
my $data = $reader->($xml); # $xml is string, filename, node
my $writer = writer_create($schema, "my writer", $type, @opts);
my $xml = $writer->($doc, $data);
my $xml = writer_test($writer, $data);
my $rerror = reader_error($schema, $type, $xml);
my $werror = writer_error($schema, $type, $data);
my $output = templ_xml($schema, $type, @options);
my $output = templ_perl($schema, $type, @options);
DESCRIPTION¶
The XML::Compile module suite has extensive regression testing. Probably, you
want to do regression testing as well. This module provide functions which
simplify writing tests for XML::Compile related distributions.
FUNCTIONS¶
Reader checks¶
- reader_create(SCHEMA, COMMENT, TYPE, OPTIONS)
- Create a reader for TYPE. One test is created, reporting success or
failure of the creation.
Of course, XML::Compile::Schema subroutine compile is being called, with
some options. By default, "check_values" is true, and
"include_namespaces" is false. These values can be overruled
using set_compile_defaults(), and with the OPTIONS parameter list.
example: reader_create
my $type = pack_type('namespace', 'localName');
my $reader = reader_create($schema, 'my test', $type
, check_occurs => 0, @other_options);
my $data = $reader->($xml);
is_deeply($data, $expected, 'my test'); # Test::More
cmp_deeply($data, $expected, 'my test'); # Test::Deep
# alternative for $type:
set_default_namespace('namespace');
my $reader = reader_create($schema, 'my test', 'localName'
, check_occurs => 0, @other_options);
- reader_error(SCHEMA, TYPE, XML)
- Parsing the XML to interpret the TYPE should return an error. The error
text is returned.
example: reader_error
my $error = reader_error($schema, $type, <<_XML);
<test1>...</test1>
_XML
is($error, 'error text', 'my test');
like($error, qr/error pattern/, 'my test');
Writer checks¶
- writer_create(SCHEMA, COMMENT, TYPE, OPTIONS)
- Create a writer for TYPE. One test (in the Test::More sense) is created,
reporting success or failure of the creation.
Of course, XML::Compile::Schema subroutine compile is being called, with
some options. By default, "check_values" and
"use_default_namespace" are true, and
"include_namespaces" is false. These values can be overruled
using set_compile_defaults(), and with the OPTIONS parameter list.
example: writer_create
set_default_namespace('namespace');
my $writer = writer_create($schema, 'my test', 'test1');
my $doc = XML::LibXML::Document->new('1.0', 'UTF-8');
my $xml = $writer->($doc, $data);
compare_xml($xml, <<_EXPECTED, 'my test');
<test1>...</test1>
_EXPECTED
# implicit creation of $doc
my $xml = writer_test($writer, $data);
- writer_error(SCHEMA, TYPE, DATA)
- Translating the Perl DATA into the XML type should return a validation
error, which is returned.
example: writer_error
my $error = writer_error($schema, $type, $data);
is($error, 'error text', 'my test');
like($error, qr/error pattern/, 'my test');
- writer_test(WRITER, DATA, [DOC])
- Run the test with a compiled WRITER, which was created with
writer_create(). When no DOC (XML::LibXML::Document object) was
specified, then one will be created for you.
Check templates¶
- templ_perl(SCHEMA, TYPE, OPTIONS)
- templ_xml(SCHEMA, TYPE, OPTIONS)
- Create an example template for TYPE, as XML message. The OPTIONS are
passed to XML::Compile::Schema subroutine template.
example: templ_xml
my $out = templ_xml($schema, $type, show => 'ALL');
is($out, $expected);
Helpers¶
- compare_xml(XML, EXPECTED, [COMMENT])
- Compare the XML (either a string or an XML::LibXML::Element) with the
EXPECTED string. Both sources are stripped from layout before comparing.
In a future release, this algorithm will get improved to compare the parsed
XML node trees, not the strings.
example: compare_xml
compare_xml($xml, <<_XML, 'my test');
<test1>...</test1>
_XML
- set_compile_defaults(OPTIONS)
- Each call to create a reader or writer (also indirectly) with
XML::Compile::Schema subroutine compile will get these OPTIONS passed, on
top (and overruling) the usual settings.
example:
# defaults for XML::Compile::Schema::compile()
set_compile_defaults(include_namespaces => 1, validate => 0
, sloppy_intergers => 1, sloppy_floats => 1);
set_compile_defaults(); # reset
- set_default_namespace(TESTNS)
- Defined which namespace to use when a relative (only localName) type is
provided. By default, this is "undef" (an error when used)
SEE ALSO¶
This module is part of XML-Compile-Tester distribution version 0.90, built on
August 16, 2012. Website:
http://perl.overmeer.net/xml-compile/
Other distributions in this suite: XML::Compile, XML::Compile::SOAP,
XML::Compile::SOAP12, XML::Compile::SOAP::Daemon, XML::Compile::SOAP::WSA,
XML::Compile::C14N, XML::Compile::WSS, XML::Compile::Tester,
XML::Compile::Cache, XML::Compile::Dumper, XML::Compile::RPC, XML::Rewrite,
XML::eXistDB, and XML::LibXML::Simple.
Please post questions or ideas to the mailinglist at
http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/xml-compile For live
contact with other developers, visit the "#xml-compile" channel on
"irc.perl.org".
LICENSE¶
Copyrights 2008-2012 by [Mark Overmeer]. For other contributors see ChangeLog.
This program is free software; you can redistribute it and/or modify it under
the same terms as Perl itself. See
http://www.perl.com/perl/misc/Artistic.html