1use strict; 2use warnings; 3use Test::More; 4use Path::Dispatcher; 5 6my @calls; 7 8do { 9 package MyApp::Dispatcher::Rule::Language; 10 use Moo; 11 extends 'Path::Dispatcher::Rule::Enum'; 12 13 has '+enum' => ( 14 default => sub { [qw/ruby perl php python/] }, 15 ); 16}; 17 18my $dispatcher = Path::Dispatcher->new( 19 rules => [ 20 Path::Dispatcher::Rule::Sequence->new( 21 rules => [ 22 Path::Dispatcher::Rule::Eq->new(string => 'use'), 23 MyApp::Dispatcher::Rule::Language->new, 24 ], 25 block => sub { push @calls, shift->positional_captures }, 26 ), 27 ], 28); 29 30$dispatcher->run("use perl"); 31is_deeply([splice @calls], [["use", "perl"]]); 32 33$dispatcher->run("use python"); 34is_deeply([splice @calls], [["use", "python"]]); 35 36$dispatcher->run("use php"); 37is_deeply([splice @calls], [["use", "php"]]); 38 39$dispatcher->run("use ruby"); 40is_deeply([splice @calls], [["use", "ruby"]]); 41 42$dispatcher->run("use c++"); 43is_deeply([splice @calls], []); 44 45is_deeply([$dispatcher->complete("u")], ["use"]); 46is_deeply([$dispatcher->complete("use")], ["use ruby", "use perl", "use php", "use python"]); 47is_deeply([$dispatcher->complete("use ")], ["use ruby", "use perl", "use php", "use python"]); 48is_deeply([$dispatcher->complete("use r")], ["use ruby"]); 49is_deeply([$dispatcher->complete("use p")], ["use perl", "use php", "use python"]); 50is_deeply([$dispatcher->complete("use pe")], ["use perl"]); 51is_deeply([$dispatcher->complete("use ph")], ["use php"]); 52is_deeply([$dispatcher->complete("use py")], ["use python"]); 53is_deeply([$dispatcher->complete("use px")], []); 54is_deeply([$dispatcher->complete("use x")], []); 55 56 57$dispatcher = Path::Dispatcher->new( 58 rules => [ 59 Path::Dispatcher::Rule::Sequence->new( 60 rules => [ 61 Path::Dispatcher::Rule::Eq->new(string => 'use'), 62 MyApp::Dispatcher::Rule::Language->new, 63 Path::Dispatcher::Rule::Eq->new(string => 'please'), 64 ], 65 block => sub { push @calls, shift->positional_captures }, 66 ), 67 ], 68); 69 70$dispatcher->run("use perl"); 71is_deeply([splice @calls], []); 72 73$dispatcher->run("use perl please"); 74is_deeply([splice @calls], [["use", "perl", "please"]]); 75 76$dispatcher->run("use python"); 77is_deeply([splice @calls], []); 78 79$dispatcher->run("use python please"); 80is_deeply([splice @calls], [["use", "python", "please"]]); 81 82$dispatcher->run("use php"); 83is_deeply([splice @calls], []); 84 85$dispatcher->run("use php please"); 86is_deeply([splice @calls], [["use", "php", "please"]]); 87 88$dispatcher->run("use ruby"); 89is_deeply([splice @calls], []); 90 91$dispatcher->run("use ruby please"); 92is_deeply([splice @calls], [["use", "ruby", "please"]]); 93 94$dispatcher->run("use c++"); 95is_deeply([splice @calls], []); 96 97$dispatcher->run("use c++ please"); 98is_deeply([splice @calls], []); 99 100is_deeply([$dispatcher->complete("u")], ["use"]); 101is_deeply([$dispatcher->complete("use")], ["use ruby", "use perl", "use php", "use python"]); 102is_deeply([$dispatcher->complete("use ")], ["use ruby", "use perl", "use php", "use python"]); 103is_deeply([$dispatcher->complete("use r")], ["use ruby"]); 104is_deeply([$dispatcher->complete("use p")], ["use perl", "use php", "use python"]); 105is_deeply([$dispatcher->complete("use pe")], ["use perl"]); 106is_deeply([$dispatcher->complete("use ph")], ["use php"]); 107is_deeply([$dispatcher->complete("use py")], ["use python"]); 108is_deeply([$dispatcher->complete("use px")], []); 109is_deeply([$dispatcher->complete("use x")], []); 110 111is_deeply([$dispatcher->complete("use ruby")], ["use ruby please"]); 112is_deeply([$dispatcher->complete("use ruby ")], ["use ruby please"]); 113is_deeply([$dispatcher->complete("use ruby pl")], ["use ruby please"]); 114is_deeply([$dispatcher->complete("use ruby pleas")], ["use ruby please"]); 115is_deeply([$dispatcher->complete("use ruby please")], []); 116is_deeply([$dispatcher->complete("use ruby plx")], []); 117 118is_deeply([$dispatcher->complete("use perl")], ["use perl please"]); 119is_deeply([$dispatcher->complete("use perl ")], ["use perl please"]); 120is_deeply([$dispatcher->complete("use perl pl")], ["use perl please"]); 121is_deeply([$dispatcher->complete("use perl pleas")], ["use perl please"]); 122is_deeply([$dispatcher->complete("use perl please")], []); 123is_deeply([$dispatcher->complete("use perl plx")], []); 124 125done_testing; 126