Make Moose components collaberate with non-Moose Catalyst
[catagits/Catalyst-Runtime.git] / t / unit_utils_load_class.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 16;
7
8 use lib "t/lib";
9
10 BEGIN { use_ok("Catalyst::Utils") };
11
12 {
13     package This::Module::Is::Not::In::Inc::But::Does::Exist;
14     sub moose {};
15 }
16
17 my $warnings = 0;
18 $SIG{__WARN__} = sub { $warnings++ };
19
20 ok( !Class::Inspector->loaded("TestApp::View::Dump"), "component not yet loaded" );
21
22 Catalyst::Utils::ensure_class_loaded("TestApp::View::Dump");
23
24 ok( Class::Inspector->loaded("TestApp::View::Dump"), "loaded ok" );
25 is( $warnings, 0, "no warnings emitted" );
26
27 $warnings = 0;
28
29 Catalyst::Utils::ensure_class_loaded("TestApp::View::Dump");
30 is( $warnings, 0, "calling again doesn't reaload" );
31
32 ok( !Class::Inspector->loaded("TestApp::View::Dump::Request"), "component not yet loaded" );
33
34 Catalyst::Utils::ensure_class_loaded("TestApp::View::Dump::Request");
35 ok( Class::Inspector->loaded("TestApp::View::Dump::Request"), "loaded ok" );
36
37 is( $warnings, 0, "calling again doesn't reaload" );
38
39 undef $@;
40 eval { Catalyst::Utils::ensure_class_loaded("This::Module::Is::Probably::Not::There") };
41 ok( $@, "doesn't defatalize" );
42 like( $@, qr/There\.pm.*\@INC/, "error looks right" );
43
44 undef $@;
45 eval { Catalyst::Utils::ensure_class_loaded("__PACKAGE__") };
46 ok( $@, "doesn't defatalize" );
47 like( $@, qr/__PACKAGE__\.pm.*\@INC/, "errors sanely on __PACKAGE__.pm" );
48
49 $@ = "foo";
50 Catalyst::Utils::ensure_class_loaded("TestApp::View::Dump::Response");
51 is( $@, "foo", '$@ is untouched' );
52
53 undef $@;
54 eval { Catalyst::Utils::ensure_class_loaded("This::Module::Is::Not::In::Inc::But::Does::Exist") };
55 ok( !$@, "no error when loading non existent .pm that *does* have a symbol table entry" ); 
56
57 undef $@;
58 eval { Catalyst::Utils::ensure_class_loaded('Silly::File::.#Name') };
59 like($@, qr/Malformed class Name/, 'errored when attempting to load a file beginning with a .');
60
61 undef $@;
62 eval { Catalyst::Utils::ensure_class_loaded('Silly::File::Name.pm') };
63 like($@, qr/Malformed class Name/, 'errored sanely when given a classname ending in .pm');
64