1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
use strict;
use warnings;
use Test::More tests => 134;
BEGIN {
use_ok('CommonMark', ':node', ':event');
}
my $md = <<EOF;
- Item 1
- *__Text__*
- Item 2
EOF
my $doc = CommonMark->parse_document($md);
isa_ok($doc, 'CommonMark::Node', 'parse_document');
my @expected_events = (
[ EVENT_ENTER, NODE_DOCUMENT ],
[ EVENT_ENTER, NODE_LIST ],
[ EVENT_ENTER, NODE_ITEM ],
[ EVENT_ENTER, NODE_PARAGRAPH ],
[ EVENT_ENTER, NODE_TEXT ],
[ EVENT_EXIT, NODE_PARAGRAPH ],
[ EVENT_ENTER, NODE_LIST ],
[ EVENT_ENTER, NODE_ITEM ],
[ EVENT_ENTER, NODE_PARAGRAPH ],
[ EVENT_ENTER, NODE_EMPH ],
[ EVENT_ENTER, NODE_STRONG ],
[ EVENT_ENTER, NODE_TEXT ],
[ EVENT_EXIT, NODE_STRONG ],
[ EVENT_EXIT, NODE_EMPH ],
[ EVENT_EXIT, NODE_PARAGRAPH ],
[ EVENT_EXIT, NODE_ITEM ],
[ EVENT_EXIT, NODE_LIST ],
[ EVENT_EXIT, NODE_ITEM ],
[ EVENT_ENTER, NODE_ITEM ],
[ EVENT_ENTER, NODE_PARAGRAPH ],
[ EVENT_ENTER, NODE_TEXT ],
[ EVENT_EXIT, NODE_PARAGRAPH ],
[ EVENT_EXIT, NODE_ITEM ],
[ EVENT_EXIT, NODE_LIST ],
[ EVENT_EXIT, NODE_DOCUMENT ],
);
{
my $iter = $doc->iterator;
isa_ok($iter, 'CommonMark::Iterator', 'iterator');
for (my $i = 0; $i < @expected_events; ++$i) {
my ($ev_type, $node) = $iter->next;
my $expected = $expected_events[$i];
is($ev_type, $expected->[0], "event $i: next ev_type, list context");
is($iter->get_event_type, $ev_type, "event $i: get_event_type");
is($node->get_type, $expected->[1],
"event $i: next node, list context");
is($iter->get_node, $node, "event $i: get_node");
}
my @list = $iter->next;
is(scalar(@list), 0, 'iterator done, list context');
$iter->reset($doc, EVENT_ENTER);
my ($ev_type, $node) = $iter->next;
is($ev_type, EVENT_ENTER, 'ev_type after iterator reset');
is($node, $doc->first_child, 'node after iterator reset');
}
{
my $iter = $doc->iterator;
for (my $i = 0; $i < @expected_events; ++$i) {
my $ev_type = $iter->next;
my $expected = $expected_events[$i];
is($ev_type, $expected->[0], "event $i: next ev_type, scalar context");
}
my $ev_type = $iter->next;
is($ev_type, EVENT_DONE, 'iterator done, scalar context');
}
{
my $iter = $doc->iterator;
# Make sure iterator survives destruction of document.
$doc = undef;
# Cause some allocations.
CommonMark->parse_document($md)
for 1..5;
my $num = 0;
$iter->next for 1..11;
my $strong = $iter->get_node;
is($strong->get_type, NODE_STRONG, '11th node is strong');
$iter = undef;
# Cause some allocations.
CommonMark->parse_document($md)
for 1..5;
my $literal = $strong->first_child->get_literal;
is($literal, 'Text', 'node survives destruction of iter');
}
|