arg0 bug
[catagits/Catalyst-Runtime.git] / t / args0_bug.t
1 use warnings;
2 use strict;
3 use Test::More;
4
5 {
6   package MyApp::Controller::Root;
7   $INC{'MyApp/Controller/Root.pm'} = __FILE__;
8
9   use Moose;
10   use MooseX::MethodAttributes;
11
12   extends 'Catalyst::Controller';
13
14   sub chain_base :Chained(/) CaptureArgs(1) { }
15
16     sub chained_zero_args_0 : Chained(chain_base) PathPart('') Args(0) { $_[1]->res->body('chained_zero_args_0') }
17     sub chained_zero_args_1 : Chained(chain_base) PathPart('') Args(0) { $_[1]->res->body('chained_zero_args_1') }
18
19     sub chained_one_args_0  : Chained(chain_base) PathPart('') Args(1) { $_[1]->res->body('chained_one_args_0') }
20     sub chained_one_args_1  : Chained(chain_base) PathPart('') Args(1) { $_[1]->res->body('chained_one_args_1') }
21
22   MyApp::Controller::Root->config(namespace=>'');
23
24   package MyApp;
25   use Catalyst;
26
27   MyApp->setup;
28 }
29
30 =over
31
32 [debug] Loaded Chained actions:
33 .-----------------------------------------+---------------------------------------------------.
34 | Path Spec                               | Private                                           |
35 +-----------------------------------------+---------------------------------------------------+
36 | /chain_base/*/*                         | /chain_base (1)                                   |
37 |                                         | => /chained_one_args_0 (1)                        |
38 | /chain_base/*/*                         | /chain_base (1)                                   |
39 |                                         | => /chained_one_args_1 (1)                        |
40 | /chain_base/*                           | /chain_base (1)                                   |
41 |                                         | => /chained_zero_args_0 (0)                       |
42 | /chain_base/*                           | /chain_base (1)                                   |
43 |                                         | => /chained_zero_args_1 (0)                       |
44 '-----------------------------------------+---------------------------------------------------'
45
46 =cut
47
48 use Catalyst::Test 'MyApp';
49
50 {
51     # Generally if more than one action can match and the path length is equal, we expect
52     # the dispatcher to just take the first one.  So this works as expected.
53     my $res = request '/chain_base/capturearg/arg';
54     is $res->content, 'chained_one_args_1', "request '/chain_base/capturearg/arg'";
55 }
56
57 {
58     # However this doesn't pass :(  For some reason when Args(0), we take the last one that
59     # matches...
60     my $res = request '/chain_base/capturearg';
61     is $res->content, 'chained_zero_args_1', "request '/chained_one_args_0/capturearg/arg'";
62 }
63
64 done_testing;