Mojo-DOM58
view release on metacpan or search on metacpan
is $dom->at('[class$="ing"]')->tag, 'simple', 'right tag';
is $dom->at('[class="working"]')->tag, 'simple', 'right tag';
is $dom->at('[class$=ing]')->tag, 'simple', 'right tag';
is $dom->at('[class=working][class]')->tag, 'simple', 'right tag';
is $dom->at('foo > simple')->next->tag, 'test', 'right tag';
is $dom->at('foo > simple')->next->next->tag, 'a', 'right tag';
is $dom->at('foo > test')->previous->tag, 'simple', 'right tag';
is $dom->next, undef, 'no siblings';
is $dom->previous, undef, 'no siblings';
is $dom->at('foo > a')->next, undef, 'no next sibling';
is $dom->at('foo > simple')->previous, undef, 'no previous sibling';
is_deeply [$dom->at('simple')->ancestors->map('tag')->each], ['foo'],
'right results';
ok !$dom->at('simple')->ancestors->first->xml, 'XML mode not active';
};
subtest 'Nodes' => sub {
my $dom = Mojo::DOM58->new(
'<!DOCTYPE before><p>test<![CDATA[123]]><!-- 456 --></p><?after?>');
is $dom->at('p')->preceding_nodes->first->content, ' before', 'right content';
is $dom->at('p')->preceding_nodes->size, 1, 'right number of nodes';
is $dom->at('p')->child_nodes->last->preceding_nodes->first->content, 'test',
'right content';
is $dom->at('p')->child_nodes->last->preceding_nodes->last->content, '123',
'right content';
is $dom->at('p')->child_nodes->last->preceding_nodes->size, 2,
'right number of nodes';
is $dom->preceding_nodes->size, 0, 'no preceding nodes';
is $dom->at('p')->following_nodes->first->content, 'after', 'right content';
is $dom->at('p')->following_nodes->size, 1, 'right number of nodes';
is $dom->child_nodes->first->following_nodes->first->tag, 'p', 'right tag';
is $dom->child_nodes->first->following_nodes->last->content, 'after',
'right content';
is $dom->child_nodes->first->following_nodes->size, 2, 'right number of nodes';
is $dom->following_nodes->size, 0, 'no following nodes';
is $dom->at('p')->previous_node->content, ' before', 'right content';
is $dom->at('p')->previous_node->previous_node, undef, 'no more siblings';
is $dom->at('p')->next_node->content, 'after', 'right content';
is $dom->at('p')->next_node->next_node, undef, 'no more siblings';
is $dom->at('p')->child_nodes->last->previous_node->previous_node->content,
'test', 'right content';
is $dom->at('p')->child_nodes->first->next_node->next_node->content, ' 456 ',
'right content';
is $dom->descendant_nodes->[0]->type, 'doctype', 'right type';
is $dom->descendant_nodes->[0]->content, ' before', 'right content';
is $dom->descendant_nodes->[0], '<!DOCTYPE before>', 'right content';
is $dom->descendant_nodes->[1]->tag, 'p', 'right tag';
is $dom->descendant_nodes->[2]->type, 'text', 'right type';
is $dom->descendant_nodes->[2]->content, 'test', 'right content';
is $dom->descendant_nodes->[5]->type, 'pi', 'right type';
is $dom->descendant_nodes->[5]->content, 'after', 'right content';
is $dom->at('p')->descendant_nodes->[0]->type, 'text', 'right type';
is $dom->at('p')->descendant_nodes->[0]->content, 'test', 'right type';
is $dom->at('p')->descendant_nodes->last->type, 'comment', 'right type';
is $dom->at('p')->descendant_nodes->last->content, ' 456 ', 'right type';
is $dom->child_nodes->[1]->child_nodes->first->parent->tag, 'p', 'right tag';
is $dom->child_nodes->[1]->child_nodes->first->content, 'test', 'right content';
is $dom->child_nodes->[1]->child_nodes->first, 'test', 'right content';
is $dom->at('p')->child_nodes->first->type, 'text', 'right type';
is $dom->at('p')->child_nodes->first->remove->tag, 'p', 'right tag';
is $dom->at('p')->child_nodes->first->type, 'cdata', 'right type';
is $dom->at('p')->child_nodes->first->content, '123', 'right content';
is $dom->at('p')->child_nodes->[1]->type, 'comment', 'right type';
is $dom->at('p')->child_nodes->[1]->content, ' 456 ', 'right content';
is $dom->[0]->type, 'doctype', 'right type';
is $dom->[0]->content, ' before', 'right content';
is $dom->child_nodes->[2]->type, 'pi', 'right type';
is $dom->child_nodes->[2]->content, 'after', 'right content';
is $dom->child_nodes->first->content(' again')->content, ' again',
'right content';
is $dom->child_nodes->grep(sub { $_->type eq 'pi' })->map('remove')
->first->type, 'root', 'right type';
is "$dom", '<!DOCTYPE again><p><![CDATA[123]]><!-- 456 --></p>', 'right result';
};
subtest 'Modify nodes' => sub {
my $dom = Mojo::DOM58->new('<script>la<la>la</script>');
is $dom->at('script')->type, 'tag', 'right type';
is $dom->at('script')->[0]->type, 'raw', 'right type';
is $dom->at('script')->[0]->content, 'la<la>la', 'right content';
is "$dom", '<script>la<la>la</script>', 'right result';
is $dom->at('script')->child_nodes->first->replace('a<b>c</b>1<b>d</b>')->tag,
'script', 'right tag';
is "$dom", '<script>a<b>c</b>1<b>d</b></script>', 'right result';
is $dom->at('b')->child_nodes->first->append('e')->content, 'c',
'right content';
is $dom->at('b')->child_nodes->first->prepend('f')->type, 'text', 'right type';
is "$dom", '<script>a<b>fce</b>1<b>d</b></script>', 'right result';
is $dom->at('script')->child_nodes->first->following->first->tag, 'b',
'right tag';
is $dom->at('script')->child_nodes->first->next->content, 'fce',
'right content';
is $dom->at('script')->child_nodes->first->previous, undef, 'no siblings';
is $dom->at('script')->child_nodes->[2]->previous->content, 'fce',
'right content';
is $dom->at('b')->child_nodes->[1]->next, undef, 'no siblings';
is $dom->at('script')->child_nodes->first->wrap('<i>:)</i>')->root,
'<script><i>:)a</i><b>fce</b>1<b>d</b></script>', 'right result';
is $dom->at('i')->child_nodes->first->wrap_content('<b></b>')->root,
'<script><i>:)a</i><b>fce</b>1<b>d</b></script>', 'no changes';
is $dom->at('i')->child_nodes->first->wrap('<b></b>')->root,
'<script><i><b>:)</b>a</i><b>fce</b>1<b>d</b></script>', 'right result';
is $dom->at('b')->child_nodes->first->ancestors->map('tag')->join(','),
'b,i,script', 'right result';
is $dom->at('b')->child_nodes->first->append_content('g')->content, ':)g',
'right content';
is $dom->at('b')->child_nodes->first->prepend_content('h')->content, 'h:)g',
'right content';
is "$dom", '<script><i><b>h:)g</b>a</i><b>fce</b>1<b>d</b></script>',
'right result';
is $dom->at('script > b:last-of-type')->append('<!--y-->')
->following_nodes->first->content, 'y', 'right content';
is $dom->at('i')->prepend('z')->preceding_nodes->first->content, 'z',
'right content';
is $dom->at('i')->following->last->text, 'd', 'right text';
is $dom->at('i')->following->size, 2, 'right number of following elements';
is $dom->at('i')->following('b:last-of-type')->first->text, 'd', 'right text';
is $dom->at('i')->following('b:last-of-type')->size, 1,
'right number of following elements';
is $dom->following->size, 0, 'no following elements';
is $dom->at('script > b:last-of-type')->preceding->first->tag, 'i', 'right tag';
( run in 0.740 second using v1.01-cache-2.11-cpan-13bb782fe5a )