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