X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/54a48e15d8804a7e61d01b70a5c5f2bbbfa6bf71..2130e63f303112fced7ed3ae1977351b762b4e44:/t/map.t diff --git a/t/map.t b/t/map.t index a21ae91bf..5d4713d6f 100755 --- a/t/map.t +++ b/t/map.t @@ -3,9 +3,16 @@ package IkiWiki; use warnings; use strict; -use HTML::TreeBuilder; use Test::More; +BEGIN { + unless (eval { require XML::Twig }) { + eval q{ + use Test::More skip_all => "XML::Twig is not available" + } + } +} + BEGIN { use_ok("IkiWiki"); } BEGIN { use_ok("IkiWiki::Render"); } BEGIN { use_ok("IkiWiki::Plugin::map"); } @@ -56,6 +63,12 @@ foreach my $page (@pages) { writefile("$page.mdwn", "t/tmp", "your ad here"); } +sub comment { + my $str = shift; + $str =~ s/^/# /gm; + print $str; +} + sub node { my $name = shift; my $kids = shift; @@ -72,8 +85,8 @@ sub check_nodes { # expected is a list of hashes # ul is a list of li - foreach my $li ($ul->content_list) { - my @kids = $li->content_list; + foreach my $li ($ul->children) { + my @kids = $li->children; is($li->tag, 'li'); @@ -83,16 +96,15 @@ sub check_nodes { my $a = $kids[0]; if ($expectation->{parent}) { - is($a->attr('class'), 'mapparent'); + is($a->att('class'), 'mapparent'); } else { - is($a->attr('class'), 'mapitem'); + is($a->att('class'), 'mapitem'); } - is_deeply([$a->content_list], [$expectation->{name}]); + is_deeply([$a->text], [$expectation->{name}]); if (@{$expectation->{kids}}) { - is($kids[1]->tag, 'ul'); is(scalar @kids, 2); check_nodes($kids[1], $expectation->{kids}); @@ -106,30 +118,37 @@ sub check_nodes { sub check { my $pagespec = shift; my $expected = shift; + comment("*** $pagespec ***\n"); my $html = IkiWiki::Plugin::map::preprocess(pages => $pagespec, page => 'map', destpage => 'map'); - my $tree = HTML::TreeBuilder->new; - $tree->implicit_tags(0); - $tree->unbroken_text(1); - $tree->strict_end(1); - $tree->strict_names(1); - $tree->strict_comment(1); - $tree->empty_element_tags(1); - $tree->parse_content($html); - my $fragment = $tree->disembowel; - print $fragment->dump; + comment($html); + my $tree = XML::Twig->new(pretty_print => 'indented'); + eval { + $tree->parse($html); + }; + if ($@) { + print "malformed XML: $@\n$html\n"; + ok(0); + } + my $fragment = $tree->root; is($fragment->tag, 'div'); - is($fragment->attr('class'), 'map'); + is($fragment->att('class'), 'map'); - check_nodes(($fragment->content_list)[0], $expected); + if (@$expected) { + check_nodes(($fragment->children)[0], $expected); + } + else { + ok(! $fragment->children); + } - $fragment->delete; - print "\n"; + $tree->dispose; } +check('doesnotexist', []); + check('alpha', [node('alpha', [])]); check('alpha/*', @@ -172,6 +191,52 @@ check('alpha or alpha/1 or beta', node('beta', []), ]); +check('alpha/1 or beta', + [ + node('alpha', [ + node('1', []), + ], parent => 1), + node('beta', []), + ]); + +check('alpha/1/i* or alpha/2/a or beta', + [ + node('alpha', [ + node('1', [ + node('i', []), + node('ii', []), + node('iii', []), + node('iv', []), + ], parent => 1), + node('2', [ + node('a', []), + ], parent => 1), + ], parent => 1), + node('beta', []), + ]); + +check('alpha/1/i* or alpha/2/a', + [ + node('1', [ + node('i', []), + node('ii', []), + node('iii', []), + node('iv', []), + ], parent => 1), + node('2', [ + node('a', []), + ], parent => 1), + ]); + +check('alpha/1/i*', + [ + node('i', []), + node('ii', []), + node('iii', []), + node('iv', []), + ]); + +ok(! system("rm -rf t/tmp")); done_testing; 1;