The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Test::More tests => 6;
use Test::Builder::Tester;
use Test::XML::Easy;
use XML::Easy::Text qw(xml10_write_document);

########################################################################
# doesn't show anything extra when we suceeed

test_out("ok 1 - xml test");
is_xml("<foo/>","<foo/>",{ show_xml => 1});
test_test("nothing when doesn't fail is_xml");

test_out("ok 1 - not xml test");
isnt_xml("<foo/>","<bar/>",{ show_xml => 1});
test_test("nothing when doesn't fail isnt_xml");

########################################################################
# shows the got xml when we fail

test_out("not ok 1 - xml test");
test_fail(+6);
test_diag("Element '/foo[1]' does not match '/bar[1]'");
test_diag("The XML that we expected was:");
test_diag("<bar/>");
test_diag("The XML that we received was:");
test_diag("<foo></foo>");
is_xml("<foo></foo>","<bar/>",{ show_xml => 1});
test_test("is_xml diagnostics");

test_out("not ok 1 - not xml test");
test_fail(+4);
test_diag("Unexpectedly matched the XML we didn't expect");
test_diag("The XML that we received was:");
test_diag("<wibble   />");
isnt_xml("<wibble   />","<wibble />",{ show_xml => 1});
test_test("isnt_xml diagnostics");

########################################################################
# show the got xml when we fail even if we handed in objects

my $foo = XML::Easy::Element->new("foo", {}, ['']);
my $bar = XML::Easy::Element->new("bar", {}, ['']);

my @foo_str = split /\n/, xml10_write_document($foo);
my @bar_str = split /\n/, xml10_write_document($bar);

test_out("not ok 1 - xml test");
test_fail(+6);
test_diag("Element '/foo[1]' does not match '/bar[1]'");
test_diag("The XML that we expected was:");
test_diag($_) foreach @bar_str;
test_diag("The XML that we received was:");
test_diag($_) foreach @foo_str;
is_xml($foo,$bar,{ show_xml => 1});
test_test("is_xml diagnostics with objects");

test_out("not ok 1 - not xml test");
test_fail(+4);
test_diag("Unexpectedly matched the XML we didn't expect");
test_diag("The XML that we received was:");
test_diag($_) foreach @foo_str;
isnt_xml($foo,"<foo    />",{ show_xml => 1});
test_test("isnt_xml diagnostics with objects");