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 => 19;
use Test::Builder::Tester;
use Test::XML::Easy;

########################################################################
# leading whitespace with required option

test_out("not ok 1 - xml test");
test_fail(+6);
test_diag(q{text inside '/foo[1]' didn't match});
test_diag(q{found:});
test_diag(q{  '  zippy'});
test_diag(q{expected:});
test_diag(q{  'zippy'});
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_leading_whitespace=>0});
<foo>  zippy</foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("failing leading whitespace");

test_out("ok 1 - xml test");
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_leading_whitespace=>1});
<foo>  zippy</foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("passing leading whitespace");


test_out("not ok 1 - xml test");
test_fail(+7);
test_diag(q{text inside '/foo[1]' didn't match});
test_diag(q{found:});
test_diag(q{  '});
test_diag(q{  zippy'});
test_diag(q{expected:});
test_diag(q{  'zippy'});
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_leading_whitespace=>0});
<foo>
  zippy</foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("failing leading whitespace return");

test_out("ok 1 - xml test");
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_leading_whitespace=>1});
<foo>  
zippy</foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("passing leading whitespace return");

test_out("ok 1 - xml test");
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_leading_whitespace=>1});
<foo>  zippy  </foo>
ENDOFXML
<foo>zippy  </foo>
ENDOFXML2
test_test("passing leading whitespace both ends");


########################################################################
# leading whitespace with ignore_whitespace option

test_out("not ok 1 - xml test");
test_fail(+6);
test_diag(q{text inside '/foo[1]' didn't match});
test_diag(q{found:});
test_diag(q{  '  zippy'});
test_diag(q{expected:});
test_diag(q{  'zippy'});
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_whitespace=>0});
<foo>  zippy</foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("failing leading whitespace");

test_out("ok 1 - xml test");
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_whitespace=>1});
<foo>  zippy</foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("passing leading whitespace");


test_out("not ok 1 - xml test");
test_fail(+7);
test_diag(q{text inside '/foo[1]' didn't match});
test_diag(q{found:});
test_diag(q{  '});
test_diag(q{  zippy'});
test_diag(q{expected:});
test_diag(q{  'zippy'});
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_whitespace=>0});
<foo>
  zippy</foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("failing leading whitespace return");

test_out("ok 1 - xml test");
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_whitespace=>1});
<foo>  
zippy</foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("passing leading whitespace return");

test_out("ok 1 - xml test");
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_whitespace=>1});
<foo>  zippy</foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("passing leading whitespace");


########################################################################
# trailing whitespace with required option

test_out("not ok 1 - xml test");
test_fail(+6);
test_diag(q{text inside '/foo[1]' didn't match});
test_diag(q{found:});
test_diag(q{  'zippy  '});
test_diag(q{expected:});
test_diag(q{  'zippy'});
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_trailing_whitespace=>0});
<foo>zippy  </foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("failing trailing whitespace");

test_out("ok 1 - xml test");
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_trailing_whitespace=>1});
<foo>zippy  </foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("passing trailing whitespace");


test_out("not ok 1 - xml test");
test_fail(+7);
test_diag(q{text inside '/foo[1]' didn't match});
test_diag(q{found:});
test_diag(q{  'zippy});
test_diag(q{  '});
test_diag(q{expected:});
test_diag(q{  'zippy'});
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_trailing_whitespace=>0});
<foo>zippy
  </foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("failing trailing whitespace return");

test_out("ok 1 - xml test");
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_trailing_whitespace=>1});
<foo>zippy
  </foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("passing trailing whitespace return");

test_out("ok 1 - xml test");
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_trailing_whitespace=>1});
<foo>  zippy  </foo>
ENDOFXML
<foo>  zippy</foo>
ENDOFXML2
test_test("passing trailing whitespace but not starting");

########################################################################
# trailing whitespace with ignore_whitespace option

test_out("not ok 1 - xml test");
test_fail(+6);
test_diag(q{text inside '/foo[1]' didn't match});
test_diag(q{found:});
test_diag(q{  'zippy  '});
test_diag(q{expected:});
test_diag(q{  'zippy'});
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_whitespace=>0});
<foo>zippy  </foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("failing trailing whitespace");

test_out("ok 1 - xml test");
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_whitespace=>1});
<foo>zippy  </foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("passing trailing whitespace");


test_out("not ok 1 - xml test");
test_fail(+7);
test_diag(q{text inside '/foo[1]' didn't match});
test_diag(q{found:});
test_diag(q{  'zippy});
test_diag(q{  '});
test_diag(q{expected:});
test_diag(q{  'zippy'});
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_whitespace=>0});
<foo>zippy
  </foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("failing trailing whitespace return");

test_out("ok 1 - xml test");
is_xml(<<'ENDOFXML',<<'ENDOFXML2',{ignore_whitespace=>1});
<foo>zippy
  </foo>
ENDOFXML
<foo>zippy</foo>
ENDOFXML2
test_test("passing trailing whitespace return");