Mojo-DOM58

 view release on metacpan or  search on metacpan

t/dom.t  view on Meta::CPAN

  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 )