08c0286fb99de8cea9b08e523ebb529db6de58b5
[catagits/Catalyst-Runtime.git] / t / aggregate / unit_core_component_setup_component.t
1 use strict;
2 use warnings;
3 use Test::More;
4 use Moose::Meta::Class;
5 use Data::Dumper;
6
7 my %config = (
8     foo => 42,
9     bar => 'myconf',
10 );
11
12 Moose::Meta::Class->create( TestAppComponent => (
13     superclasses => ['Catalyst'],
14 ));
15
16 TestAppComponent->config(
17     'Model::With::Config' => { %config },
18 );
19
20 TestAppComponent->setup_config;
21
22 my @comps;
23 push @comps, "TestAppComponent::$_" for qw/
24     Without::Component::Sub
25     Model::With::Config
26     Dieing
27     NotBlessed
28     Regular
29 /;
30 my ($no_sub, $config, $dieing, $not_blessed, $regular) = @comps;
31
32 Moose::Meta::Class->create( $no_sub => (
33     superclasses => ['Catalyst::Component'],
34 ));
35
36 Moose::Meta::Class->create( $config => (
37     superclasses => ['Catalyst::Component'],
38     methods      => {
39         COMPONENT => sub { bless $_[2] }
40     },
41 ));
42
43 Moose::Meta::Class->create( $dieing => (
44     superclasses => ['Catalyst::Component'],
45     methods      => {
46         COMPONENT => sub { die "Could not create component" }
47     },
48 ));
49
50 Moose::Meta::Class->create( $not_blessed => (
51     superclasses => ['Catalyst::Component'],
52     methods      => {
53         COMPONENT => sub { {} }
54     },
55 ));
56
57 Moose::Meta::Class->create( $regular => (
58     superclasses => ['Catalyst::Component'],
59     methods      => {
60         COMPONENT => sub { shift->new }
61     },
62 ));
63
64 {
65     no warnings 'redefine', 'once';
66     my $message;
67     my $component;
68
69     local *Catalyst::Exception::throw = sub { shift; my %h = @_; $message = $h{message} };
70
71     $component = eval { TestAppComponent->setup_component($no_sub) };
72     ok( !$@, "setup_component doesnt die with $no_sub" );
73     is( $message, undef, "no exception thrown" );
74     isa_ok( $component, $no_sub, "the returned value isa the component" );
75
76     undef $message;
77     $component = eval { TestAppComponent->setup_component($config) };
78     ok( !$@, "setup_component doesnt die with $config" );
79     is( $message, undef, "no exception thrown" );
80     is_deeply( $component, bless(\%config, $config), "the returned config is correct" );
81
82     undef $message;
83     $component = eval { TestAppComponent->setup_component($dieing) };
84     ok( !$@, "setup_component doesnt die with $dieing" );
85     like( $message, qr/Could not create component/, "the exception is thrown correctly" );
86
87     undef $message;
88     $component = eval { TestAppComponent->setup_component($not_blessed) };
89     ok( !$@, "setup_component doesnt die with $not_blessed" );
90     isnt( $message, undef, "it throws an exception" );
91
92     undef $message;
93     $component = eval { TestAppComponent->setup_component($regular) };
94     ok( !$@, "setup_component doesnt die with $regular" );
95     is( $message, undef, "no exception thrown" );
96     isa_ok( $component, $regular, "the returned value is correct" );
97 }
98
99 done_testing();