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;
+ die "more than 1 argument: got @args" if @args > 1;
}
sub endpoint :PathPart('end') :Chained('/action/chained/foo') :Args(1) { }
sub chain_dt_b :Chained('chain_dt_a') :PathPart('end') :Args(1) { }
#
+# Error in the middle of a chain
+#
+sub chain_error_a :Chained :PathPart('chained/chain_error') :CaptureArgs(1) {
+ $_[1]->error( 'break in the middle of a chain' );
+}
+
+sub chain_error_b :Chained('chain_error_a') :PathPart('end') :Args(1) {}
+
+#
+# Die in the middle of a chain
+#
+sub chain_die_a :Chained :PathPart('chained/chain_die') :CaptureArgs(1) {
+ die( "die in the middle of a chain\n" );
+}
+
+sub chain_die_b :Chained('chain_die_a') :PathPart('end') :Args(1) {}
+
+#
# Target for former forward and chain tests.
#
sub fw_dt_target :Private { }
sub mult_nopp2_view : Chained('mult_nopp2_load') PathPart('') Args(0) { }
#
-# Test Choice between branches and early return logic
+# 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_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_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() { }
+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
$c->stash->{no_end} = 1;
}
+sub match_captures : Chained('/') PathPart('chained/match_captures') CaptureArgs(1) ActionClass('+TestApp::Action::TestMatchCaptures') {
+ my ($self, $c) = @_;
+ $c->res->header( 'X-TestAppActionTestMatchCapturesHasRan', 'yes');
+}
+
+sub match_captures_end : Chained('match_captures') PathPart('bar') Args(0) { }
+
sub end :Private {
my ($self, $c) = @_;
return if $c->stash->{no_end};