sub begin :Private { }
#
+# TODO
+# :ChildOf('') defaulting to controller namespace
+# :ChildOf('..') defaulting to action in controller above
+# :ChildOf == ChildOf('/')
+#
+
+#
# Simple parent/child action test
#
sub foo :PathPart('childof/foo') :Captures(1) :ChildOf('/') { }
# Relative specification of parent action
#
sub bar :PathPart('childof/bar') :ChildOf('/') :Captures(0) { }
-sub finale :ChildOf('bar') :Args { }
+sub finale :PathPart('') :ChildOf('bar') :Args { }
#
# three chain with concurrent endpoints
# Controller -> subcontroller -> controller
#
sub pcp1 :PathPart('childof/pcp1') :ChildOf('/') :Captures(1) { }
-sub pcp3 :PathPart :ChildOf('/action/childof/foo/pcp2') :Args(1) { }
+sub pcp3 :ChildOf('/action/childof/foo/pcp2') :Args(1) { }
#
# Dispatch on capture number
#
sub opt_args :PathPart('childof/opt_args') :ChildOf('/') { }
+#
+# Optional PathPart test -> /childof/optpp/*/opt_pathpart/*
+#
+sub opt_pp_start :ChildOf('/') :PathPart('childof/optpp') :Captures(1) { }
+sub opt_pathpart :ChildOf('opt_pp_start') :Args(1) { }
+
+#
+# Optional Args *and* PathPart -> /childof/optall/*/oa/...
+#
+sub opt_all_start :ChildOf('/') :PathPart('childof/optall') :Captures(1) { }
+sub oa :ChildOf('opt_all_start') { }
+
sub end :Private {
my ($self, $c) = @_;
my $out = join('; ', map { join(', ', @$_) }