1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
use strict;
use warnings;
use Test::More;
use Class::MOP;
BEGIN {
my %hidden = map { (my $m = "$_.pm") =~ s{::}{/}g; $m => 1 } qw(
Foo
Bar
);
unshift @INC, sub {
return unless exists $hidden{$_[1]};
die "Can't locate $_[1] in \@INC (hidden)\n";
};
}
BEGIN {
package TestRole;
$INC{'TestRole'} = __FILE__;
use Moose::Role;
sub a { 'a' }
sub b { 'b' }
package Catalyst::TraitFor::Request::Foo;
$INC{'Catalyst/TraitFor/Request/Foo.pm'} = __FILE__;
use Moose::Role;
sub c { 'c' }
package TestApp::TraitFor::Request::Bar;
$INC{'TestApp/TraitFor/Request/Bar.pm'} = __FILE__;
use Moose::Role;
sub d { 'd' }
package Catalyst::TraitFor::Response::Foo;
$INC{'Catalyst/TraitFor/Response/Foo.pm'} = __FILE__;
use Moose::Role;
sub c { 'c' }
package TestApp::TraitFor::Response::Bar;
$INC{'TestApp/TraitFor/Response/Bar.pm'} = __FILE__;
use Moose::Role;
sub d { 'd' }
}
BEGIN {
package TestApp::Controller::Root;
$INC{'TestApp/Controller/Root.pm'} = __FILE__;
use Moose;
BEGIN { extends 'Catalyst::Controller' };
sub root :Path('/') {}
}
{
package TestApp;
$INC{'TestApp.pm'} = __FILE__;
use Catalyst;
__PACKAGE__->request_class_traits([qw/TestRole Foo Bar/]);
__PACKAGE__->response_class_traits([qw/TestRole Foo Bar/]);
__PACKAGE__->stats_class_traits([qw/TestRole/]);
__PACKAGE__->setup;
}
foreach my $class_prefix (qw/request response stats/) {
my $method = 'composed_' .$class_prefix. '_class';
ok(
Class::MOP::class_of(TestApp->$method)->does_role('TestRole'),
"$method does TestRole",
);
}
use Catalyst::Test 'TestApp';
my ($res, $c) = ctx_request '/';
is $c->req->a, 'a';
is $c->req->b, 'b';
is $c->req->c, 'c';
is $c->req->d, 'd';
is $c->res->a, 'a';
is $c->res->b, 'b';
is $c->res->c, 'c';
is $c->res->d, 'd';
done_testing;
|