Commit | Line | Data |
03e89d2c |
1 | use strict; |
2 | use warnings; |
5e3121a8 |
3 | use Test::More; |
03e89d2c |
4 | use Moose::Meta::Class; |
03e89d2c |
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" ); |
ba70cf57 |
79 | is_deeply( $component, \%config, "the returned config is correct" ); |
03e89d2c |
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 | } |
5e3121a8 |
97 | |
98 | done_testing; |