X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Flib%2FTestApp%2FController%2FAction%2FChained.pm;h=0efdcca8cd04ef830bf7fb1d64a4cf3b681d3e6d;hb=626053191a3ba8c5f4ac8bd831009e962842c469;hp=9e6a93fa3444bd9fba7edfdfee0a5dfa5dd5bc67;hpb=8b13f357b71297872a61f142ae62c2e60fda304d;p=catagits%2FCatalyst-Runtime.git diff --git a/t/lib/TestApp/Controller/Action/Chained.pm b/t/lib/TestApp/Controller/Action/Chained.pm index 9e6a93f..0efdcca 100644 --- a/t/lib/TestApp/Controller/Action/Chained.pm +++ b/t/lib/TestApp/Controller/Action/Chained.pm @@ -15,7 +15,11 @@ sub begin :Private { } # # Simple parent/child action test # -sub foo :PathPart('chained/foo') :CaptureArgs(1) :Chained('/') { } +sub foo :PathPart('chained/foo') :CaptureArgs(1) :Chained('/') { + my ( $self, $c, @args ) = @_; + die "missing argument" unless @args; + die "more than 1 argument" if @args > 1; +} sub endpoint :PathPart('end') :Chained('/action/chained/foo') :Args(1) { } # @@ -151,8 +155,49 @@ sub empty_chain_d : Chained('empty_chain_c') PathPart('') CaptureAr sub empty_chain_e : Chained('empty_chain_d') PathPart('') CaptureArgs(0) { } sub empty_chain_f : Chained('empty_chain_e') PathPart('') Args(1) { } +sub mult_nopp_base : Chained('/') PathPart('chained/mult_nopp') CaptureArgs(0) { } +sub mult_nopp_all : Chained('mult_nopp_base') PathPart('') Args(0) { } +sub mult_nopp_new : Chained('mult_nopp_base') PathPart('new') Args(0) { } +sub mult_nopp_id : Chained('mult_nopp_base') PathPart('') CaptureArgs(1) { } +sub mult_nopp_idall : Chained('mult_nopp_id') PathPart('') Args(0) { } +sub mult_nopp_idnew : Chained('mult_nopp_id') PathPart('new') Args(0) { } + +# +# Test Choice between branches and early return logic +# Declaration order is important for $children->{$*}, since this is first match best. +# +sub cc_base : Chained('/') PathPart('chained/choose_capture') CaptureArgs(0) { } +sub cc_link : Chained('cc_base') PathPart('') CaptureArgs(0) { } +sub cc_anchor : Chained('cc_link') PathPart('anchor.html') Args(0) { } +sub cc_all : Chained('cc_base') PathPart('') Args() { } + +sub cc_a : Chained('cc_base') PathPart('') CaptureArgs(1) { } +sub cc_a_link : Chained('cc_a') PathPart('a') CaptureArgs(0) { } +sub cc_a_anchor : Chained('cc_a_link') PathPart('') Args() { } + +sub cc_b : Chained('cc_base') PathPart('b') CaptureArgs(0) { } +sub cc_b_link : Chained('cc_b') PathPart('') CaptureArgs(1) { } +sub cc_b_anchor : Chained('cc_b_link') PathPart('anchor.html') Args() { } + +# +# Test static paths vs. captures +# + +sub apan : Chained('/') CaptureArgs(0) PathPrefix { } +sub korv : Chained('apan') CaptureArgs(0) PathPart('') { } +sub wurst : Chained('apan') CaptureArgs(1) PathPart('') { } +sub static_end : Chained('korv') Args(0) { } +sub capture_end : Chained('wurst') Args(0) PathPart('') { } + + +# */search vs doc/* +sub view : Chained('/') PathPart('chained') CaptureArgs(1) {} +sub star_search : Chained('view') PathPart('search') Args(0) { } +sub doc_star : Chained('/') PathPart('chained/doc') Args(1) {} + sub end :Private { my ($self, $c) = @_; + return if $c->stash->{no_end}; my $out = join('; ', map { join(', ', @$_) } ($c->req->captures, $c->req->args)); $c->res->body($out);