Commit | Line | Data |
ae515736 |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use Test::More; |
5 | use lib qw(t/lib); |
6 | use DBICTest; |
7 | use Class::Inspector; |
8 | |
9 | BEGIN { |
10 | package TestPackage::A; |
11 | sub some_method {} |
12 | } |
13 | |
14 | my $schema = DBICTest->init_schema(); |
15 | |
175e2616 |
16 | plan tests => 19; |
efe6365b |
17 | |
18 | # Test ensure_class_found |
19 | ok( $schema->ensure_class_found('DBIx::Class::Schema'), |
20 | 'loaded package DBIx::Class::Schema was found' ); |
21 | ok( !Class::Inspector->loaded('DBICTest::FakeComponent'), |
22 | 'DBICTest::FakeComponent not loaded yet' ); |
23 | ok( $schema->ensure_class_found('DBICTest::FakeComponent'), |
24 | 'package DBICTest::FakeComponent was found' ); |
25 | ok( !Class::Inspector->loaded('DBICTest::FakeComponent'), |
26 | 'DBICTest::FakeComponent not loaded by ensure_class_found()' ); |
27 | ok( $schema->ensure_class_found('TestPackage::A'), |
28 | 'anonymous package TestPackage::A found' ); |
29 | ok( !$schema->ensure_class_found('FAKE::WONT::BE::FOUND'), |
30 | 'fake package not found' ); |
31 | |
32 | # Test load_optional_class |
33 | my $retval = eval { $schema->load_optional_class('ANOTHER::FAKE::PACKAGE') }; |
34 | ok( !$@, 'load_optional_class on a nonexistent class did not throw' ); |
35 | ok( !$retval, 'nonexistent package not loaded' ); |
36 | $retval = eval { $schema->load_optional_class('DBICTest::OptionalComponent') }; |
37 | ok( !$@, 'load_optional_class on an existing class did not throw' ); |
38 | ok( $retval, 'DBICTest::OptionalComponent loaded' ); |
39 | eval { $schema->load_optional_class('DBICTest::ErrorComponent') }; |
175e2616 |
40 | like( $@, qr/did not return a true value/, |
41 | 'DBICTest::ErrorComponent threw ok' ); |
efe6365b |
42 | |
43 | # Test ensure_class_loaded |
44 | ok( Class::Inspector->loaded('TestPackage::A'), 'anonymous package exists' ); |
45 | eval { $schema->ensure_class_loaded('TestPackage::A'); }; |
46 | ok( !$@, 'ensure_class_loaded detected an anon. class' ); |
47 | eval { $schema->ensure_class_loaded('FakePackage::B'); }; |
48 | like( $@, qr/Can't locate/, |
49 | 'ensure_class_loaded threw exception for nonexistent class' ); |
50 | ok( !Class::Inspector->loaded('DBICTest::FakeComponent'), |
51 | 'DBICTest::FakeComponent not loaded yet' ); |
52 | eval { $schema->ensure_class_loaded('DBICTest::FakeComponent'); }; |
53 | ok( !$@, 'ensure_class_loaded detected an existing but non-loaded class' ); |
54 | ok( Class::Inspector->loaded('DBICTest::FakeComponent'), |
55 | 'DBICTest::FakeComponent now loaded' ); |
ae515736 |
56 | |
175e2616 |
57 | { |
58 | # Squash warnings about syntax errors in SytaxErrorComponent.pm |
59 | local $SIG{__WARN__} = sub { |
60 | my $warning = shift; |
61 | warn $warning unless ( |
62 | $warning =~ /String found where operator expected/ or |
63 | $warning =~ /Missing operator before/ |
64 | ); |
65 | }; |
9d3d92ab |
66 | |
67 | eval { $schema->ensure_class_loaded('DBICTest::SyntaxErrorComponent1') }; |
68 | like( $@, qr/syntax error/, |
69 | 'ensure_class_loaded(DBICTest::SyntaxErrorComponent1) threw ok' ); |
70 | eval { $schema->load_optional_class('DBICTest::SyntaxErrorComponent2') }; |
71 | like( $@, qr/syntax error/, |
72 | 'load_optional_class(DBICTest::SyntaxErrorComponent2) threw ok' ); |
175e2616 |
73 | } |
74 | |
ae515736 |
75 | 1; |