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 $type   = pack_type($ns, 'localName'); # X::C::Util
set_default_namespace($ns);
my $type   = 'localName';

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_prefix 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)

    Create an example template for TYPE, as Perl data structure (like Data::Dumper) The OPTIONS are passed to XML::Compile::Schema subroutine template.

    example: templ_perl

    my $out = templ_perl($schema, $type, show => 'ALL');
    is($out, $expected);

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.04, built on October 01, 2008. Website: http://perl.overmeer.net/xml-compile/

All modules in this suite: XML::Compile, XML::Compile::SOAP, XML::Compile::SOAP::Daemon, XML::Compile::Tester, XML::Compile::Cache, XML::Rewrite, XML::Compile::Dumper.

Please post questions or ideas to the mailinglist at http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/xml-compile For life contact with other developers, visit the #xml-compile channel on irc.perl.org.

LICENSE

Copyrights 2008 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