Commit | Line | Data |
03e89d2c |
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(); |