| use Mojo::Base -strict; | 
 | use Mojolicious::Lite; | 
 | use Test::More; | 
 | use Test::Mojo; | 
 | use utf8; | 
 |  | 
 | my $t = Test::Mojo->new; | 
 | my $app = $t->app; | 
 |  | 
 | # Add additional plugin path | 
 | push(@{$app->plugins->namespaces}, 'Kalamar::Plugin'); | 
 |  | 
 | # Establish test route | 
 | $app->routes->get('/doc/:scope/:page')->to(cb => sub {}, scope => undef)->name('doc'); | 
 | $app->routes->get('/settings/:scope/:page')->to(cb => sub {}, scope => undef)->name('settings'); | 
 |  | 
 |  | 
 | # Load plugin to test | 
 | $app->plugin('KalamarPages'); | 
 |  | 
 | my $languages = [qw/en de/]; | 
 | $app->plugin('Localize' => { | 
 |   dict => { | 
 |     Nav => { | 
 |       _ => sub { $languages }, | 
 |       -en => { | 
 |         faq => 'FAQ', | 
 |         '#default-foundries' => 'Default Foundries', | 
 |       }, | 
 |       de => { | 
 |         faq => 'FAQ', | 
 |         '#default-foundries' => 'Standard Foundries' | 
 |       } | 
 |     } | 
 |   } | 
 | }); | 
 |  | 
 | my $navi = [ | 
 |   { | 
 |     id => 'development', | 
 |     title => 'KorAP' | 
 |   } | 
 | ]; | 
 |  | 
 | my $render = $app->navigation('doc', $navi); | 
 | like($render, qr!/doc/development!, 'Path matches doc/development'); | 
 | like($render, qr!KorAP!, 'Title matches'); | 
 |  | 
 | $navi = [ | 
 |   { | 
 |     id => 'development', | 
 |     title => 'KorAP' | 
 |   }, | 
 |   { | 
 |     id => 'krill', | 
 |     title => 'Krill' | 
 |   } | 
 | ]; | 
 |  | 
 | $render = $app->navigation('doc', $navi); | 
 | like($render, qr!/doc/development!, 'Path matches doc/development'); | 
 | like($render, qr!KorAP!, 'Title matches'); | 
 | like($render, qr!/doc/krill!, 'Path matches doc/krill'); | 
 | like($render, qr!Krill!, 'Title matches'); | 
 |  | 
 | $navi = [ | 
 |   { | 
 |     id => 'development', | 
 |     title => 'KorAP', | 
 |     items => [ | 
 |       { | 
 |         id => 'krill', | 
 |         title => 'Krill', | 
 |       } | 
 |     ] | 
 |   }, | 
 |   { | 
 |     id => 'faq', | 
 |     title => 'FAQ' | 
 |   } | 
 | ]; | 
 |  | 
 | $render = $app->navigation('doc', $navi); | 
 | like($render, qr!/doc/development!, 'Path matches doc/development'); | 
 | like($render, qr!/doc/development/krill!, 'Path matches development/krill'); | 
 | like($render, qr!/doc/faq!, 'Path matches doc/faq'); | 
 |  | 
 | $navi = [ | 
 |   { | 
 |     id => 'development', | 
 |     title => 'KorAP', | 
 |     items => [ | 
 |       { | 
 |         id => 'krill', | 
 |         title => 'Krill', | 
 |       }, | 
 |       { | 
 |         id => 'koral', | 
 |         title => 'Koral' | 
 |       } | 
 |     ] | 
 |   }, | 
 |   { | 
 |     title => 'Query Languages', | 
 |     id => 'ql', | 
 |     items => [ | 
 |       { | 
 |         title => 'Cosmas II', | 
 |         id => 'cosmas2' | 
 |       }, | 
 |       { | 
 |         'title' => 'Poliqarp+', | 
 |         'id' => 'poliqarp-plus', | 
 |         items => [ | 
 |           { | 
 |             "title" => "Simple Segments", | 
 |             "id" => "#segments" | 
 |           }, | 
 |           { | 
 |             "title" => "Complex Segments", | 
 |             "id" => "#complex" | 
 |           } | 
 |         ] | 
 |       } | 
 |     ] | 
 |   }, | 
 |   { | 
 |     id => 'faq', | 
 |     title => 'FAQ' | 
 |   } | 
 | ]; | 
 |  | 
 | $render = $app->navigation('doc', $navi); | 
 | like($render, qr!/doc/development!, 'Path matches doc/development'); | 
 | like($render, qr!/doc/development/krill!, 'Path matches development/krill'); | 
 | like($render, qr!/doc/development/koral!, 'Path matches development/koral'); | 
 | like($render, qr!/doc/ql!, 'Path matches doc/ql'); | 
 | like($render, qr!/doc/ql/cosmas2!, 'Path matches doc/ql/cosmas2'); | 
 | like($render, qr!/doc/ql/poliqarp-plus!, 'Path matches doc/ql/poliqarp-plus'); | 
 | like($render, qr!/doc/ql/poliqarp-plus#segments!, | 
 |      'Path matches doc/ql/poliqarp-plus#segments'); | 
 | like($render, qr!/doc/ql/poliqarp-plus#complex!, | 
 |      'Path matches doc/ql/poliqarp-plus#complex'); | 
 | like($render, qr!/doc/faq!, 'Path matches doc/faq'); | 
 |  | 
 | ok($app->navi->exists('doc')); | 
 | ok(!$app->navi->exists('xy')); | 
 | is($app->navigation('xy'), '');; | 
 |  | 
 |  | 
 | my $c = $app->build_controller; | 
 | $c->stash(page => 'development'); | 
 | $render = $c->navigation('doc', $navi); | 
 | like($render, qr!/doc/development!, 'Path matches doc/development'); | 
 | like($render, qr!/doc/development/krill!, 'Path matches development/krill'); | 
 | like($render, qr!/doc/ql!, 'Path matches doc/ql'); | 
 | like($render, qr!/doc/ql/poliqarp-plus#segments!, | 
 |      'Path matches doc/ql/poliqarp-plus#segments'); | 
 | like($render, qr!/doc/ql/poliqarp-plus#complex!, | 
 |      'Path matches doc/ql/poliqarp-plus#complex'); | 
 | like($render, qr!class="active".*?KorAP!, 'Active value for KorAP'); | 
 |  | 
 | $c->stash(page => 'poliqarp-plus'); | 
 | $render = $c->navigation('doc', $navi); | 
 | like($render, qr!/doc/development!, 'Path matches doc/development'); | 
 | like($render, qr!/doc/development/krill!, 'Path matches development/krill'); | 
 | like($render, qr!/doc/ql!, 'Path matches doc/ql'); | 
 | like($render, qr!/doc/ql/poliqarp-plus#segments!, | 
 |      'Path matches doc/ql/poliqarp-plus#segments'); | 
 | like($render, qr!/doc/ql/poliqarp-plus#complex!, | 
 |      'Path matches doc/ql/poliqarp-plus#complex'); | 
 | like($render, qr!class="active".*?Poliqarp\+!, 'Active value for Poliqarp+'); | 
 |  | 
 |  | 
 | $navi = [ | 
 |   { | 
 |     id => 'development', | 
 |     title => 'KorAP', | 
 |     items => [ | 
 |       { | 
 |         id => 'krill', | 
 |         title => 'Krill', | 
 |       }, | 
 |       { | 
 |         id => 'koral', | 
 |         title => 'Koral' | 
 |       } | 
 |     ] | 
 |   }, | 
 |   { | 
 |     title => 'Query Languages', | 
 |     id => 'ql', | 
 |     class => 'folded', | 
 |     items => [ | 
 |       { | 
 |         title => 'Cosmas II', | 
 |         id => 'cosmas2' | 
 |       }, | 
 |       { | 
 |         'title' => 'Poliqarp+', | 
 |         'id' => 'poliqarp-plus', | 
 |         'class' => 'folded', | 
 |         items => [ | 
 |           { | 
 |             "title" => "Simple Segments", | 
 |             "id" => "#segments" | 
 |           }, | 
 |           { | 
 |             "title" => "Complex Segments", | 
 |             "id" => "#complex" | 
 |           } | 
 |         ] | 
 |       } | 
 |     ] | 
 |   }, | 
 |   { | 
 |     id => 'faq', | 
 |     title => 'FAQ' | 
 |   } | 
 | ]; | 
 | $render = $c->navigation('doc', $navi); | 
 |  | 
 | like($render, qr!/doc/development!, 'Path matches doc/development'); | 
 | like($render, qr!/doc/development/krill!, 'Path matches development/krill'); | 
 | like($render, qr!/doc/ql!, 'Path matches doc/ql'); | 
 | like($render, qr!/doc/ql/poliqarp-plus#segments!, | 
 |      'Path matches doc/ql/poliqarp-plus#segments'); | 
 | like($render, qr!/doc/ql/poliqarp-plus#complex!, | 
 |      'Path matches doc/ql/poliqarp-plus#complex'); | 
 | like($render, qr!class="folded active".*?Poliqarp\+!, 'Active and folded value for Poliqarp+'); | 
 |  | 
 |  | 
 | $c->stash(page => 'cosmas2'); | 
 | $render = $c->navigation('doc', $navi); | 
 |  | 
 | like($render, qr!\<li class=\"folded\">\s*<a href="/doc/ql\#page-top">Query Languages</a>\s*<ul class="nav nav-doc active">\s*<li class="active"><a href="/doc/ql/cosmas2\#page-top">Cosmas II</a></li>!); | 
 |  | 
 | delete $c->stash->{cosmas2}; | 
 |  | 
 |  | 
 | # Test for translations | 
 | $navi = [ | 
 |   { | 
 |     id => 'development', | 
 |     title => 'KorAP', | 
 |     items => [ | 
 |       { | 
 |         id => 'krill', | 
 |         title => 'Krill', | 
 |       } | 
 |     ] | 
 |   }, | 
 |   { | 
 |     id => 'faq', | 
 |     title => 'FAQ' | 
 |   } | 
 | ]; | 
 |  | 
 | $render = $app->navigation('doc', $navi); | 
 | like($render, qr!/doc/development!, 'Path matches doc/development'); | 
 | like($render, qr!/doc/development/krill!, 'Path matches development/krill'); | 
 | like($render, qr!<a href="/doc/development/krill(?:#[^"]+)?">Krill</a>!, | 
 |      'Path matches development/krill'); | 
 | like($render, qr!<a href="/doc/faq(?:#[^"]+)?">FAQ</a>!, | 
 |      'Path matches FAQ'); | 
 |  | 
 | # Change preferred language | 
 | $languages = [qw/de en/]; | 
 |  | 
 | $render = $app->navigation('doc', $navi); | 
 | like($render, qr!/doc/development!, 'Path matches doc/development'); | 
 | like($render, qr!/doc/development/krill!, 'Path matches development/krill'); | 
 | like($render, qr!<a href="/doc/development/krill(?:#[^"]+)?">Krill</a>!, | 
 |      'Path matches development/krill'); | 
 | like($render, qr!<a href="/doc/faq(?:#[^"]+)?">FAQ</a>!, | 
 |      'Path matches FAQ'); | 
 |  | 
 | # Create settings realm | 
 | $app->navi->add(settings => ( | 
 |   'OAuth', 'oauth' | 
 | )); | 
 |  | 
 | # Create settings realm | 
 | $app->navi->add(settings => ( | 
 |   'Marketplace', 'marketplace' | 
 | )); | 
 |  | 
 | $render = $app->navigation('settings'); | 
 |  | 
 | like($render, qr!/settings/oauth#page-top!); | 
 | like($render, qr!/settings/marketplace#page-top!); | 
 |  | 
 | my @list = $app->navi->list('settings'); | 
 |  | 
 | is($list[0]->{url}, '/settings/oauth#page-top'); | 
 | is($list[0]->{title}, 'OAuth'); | 
 | is($list[1]->{url}, '/settings/marketplace#page-top'); | 
 | is($list[1]->{title}, 'Marketplace'); | 
 |  | 
 | done_testing; | 
 |  | 
 | __END__ | 
 |  |