The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Test::XML::Loy - Test XML and XML::Loy objects

SYNOPSIS

use Test::XML::Loy;

my $t = Test::XML::Loy->new(<<'XML');
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<env>
  <header>
    <!-- My Greeting -->
    <greetings>
      <title style="color: red">Hello!</title>
    </greetings>
  </header>
  <body date="today">
    <p>That&#39;s all!</p>
  </body>
</env>
XML

$t->attr_is('env title', 'style', 'color: red')
  ->attr_is('env body', 'date', 'today')
  ->text_is('body > p', "That's all!");

DESCRIPTION

Test::XML::Loy allows to test XML documents in the same way as Test::Mojo tests X(HT)ML responses using Mojo::DOM. The code is heavily based on Test::Mojo and implements the same API. The documentation is heavily based on Test::Mojo.

ATTRIBUTES

Test::XML::Loy inherits all attributes from Mojo::Base and implements the following new ones.

loy

print $t->loy->to_pretty_XML;

The XML::Loy object to test against.

success

my $bool = $t->success;
$t       = $t->success($bool);

True if the last test was successful.

METHODS

Test::XML::Loy inherits all methods from Mojo::Base and implements the following new ones.

new

my $xml = Test::XML::Loy->new(<<'EOF');
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<entry>
  <fun>Yeah!</fun>
<entry>
EOF

Constructs a new Test::XML::Loy document. Accepts all parameters supported by XML::Loy.

attr_is

$t = $t->attr_is('img.cat', 'alt', 'Grumpy cat');
$t = $t->attr_is('img.cat', 'alt', 'Grumpy cat', 'right alt text');

Checks text content of attribute with "attr" in Mojo::DOM at the CSS selectors first matching HTML/XML element for exact match with "at" in Mojo::DOM.

attr_isnt

$t = $t->attr_isnt('img.cat', 'alt', 'Calm cat');
$t = $t->attr_isnt('img.cat', 'alt', 'Calm cat', 'different alt text');

Opposite of "attr_is".

attr_like

$t = $t->attr_like('img.cat', 'alt', qr/Grumpy/);
$t = $t->attr_like('img.cat', 'alt', qr/Grumpy/, 'right alt text');

Checks text content of attribute with "attr" in Mojo::DOM at the CSS selectors first matching HTML/XML element for similar match with "at" in Mojo::DOM.

attr_unlike

$t = $t->attr_unlike('img.cat', 'alt', qr/Calm/);
$t = $t->attr_unlike('img.cat', 'alt', qr/Calm/, 'different alt text');

Opposite of "attr_like".

content_is

$t = $t->content_is(<<'XML');
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Test foo="bar">
  <baum>Check!</baum>
</Test>
XML

Check textual serialization for exact match.

content_isnt

$t = $t->content_isnt(<<'XML');
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Test foo="bar">
  <baum>Check!</baum>
</Test>
XML

Opposite of "content_is".

content_like

$t = $t->content_like(qr/Check!/);
$t = $t->content_like(qr/Check!/, 'right content');

Check textual serialization for similar match.

content_unlike

$t = $t->content_unlike(qr/Check!/);
$t = $t->content_unlike(qr/Check!/, 'right content');

Opposite of "content_like".

element_count_is

$t = $t->element_count_is('div.foo[x=y]', 5);
$t = $t->element_count_is('html body div', 30, 'thirty elements');

Checks the number of HTML/XML elements matched by the CSS selector with "find" in Mojo::DOM.

element_exists

$t = $t->element_exists('div.foo[x=y]');
$t = $t->element_exists('html head title', 'has a title');

Checks for existence of the CSS selectors first matching HTML/XML element with "at" in Mojo::DOM.

element_exists_not

$t = $t->element_exists_not('div.foo[x=y]');
$t = $t->element_exists_not('html head title', 'has no title');

Opposite of "element_exists".

text_is

$t = $t->text_is('div.foo[x=y]' => 'Hello!');
$t = $t->text_is('html head title' => 'Hello!', 'right title');

Checks text content of the CSS selectors first matching HTML/XML element for exact match with "at" in Mojo::DOM.

text_isnt

$t = $t->text_isnt('div.foo[x=y]' => 'Hello!');
$t = $t->text_isnt('html head title' => 'Hello!', 'different title');

Opposite of "text_is".

text_like

$t = $t->text_like('div.foo[x=y]' => qr/Hello/);
$t = $t->text_like('html head title' => qr/Hello/, 'right title');

Checks text content of the CSS selectors first matching HTML/XML element for similar match with "at" in Mojo::DOM.

text_unlike

$t = $t->text_unlike('div.foo[x=y]' => qr/Hello/);
$t = $t->text_unlike('html head title' => qr/Hello/, 'different title');

Opposite of "text_like".

AVAILABILITY

https://github.com/Akron/XML-Loy

COPYRIGHT AND LICENSE

Copyright (c) 2008-2020 Sebastian Riedel and others.

Copyright (c) 2020-2021, Nils Diewald.

This program is free software, you can redistribute it and/or modify it under the same terms as Perl.