From: Justin Guenther Date: Tue, 6 Jun 2006 22:48:05 +0000 (+0000) Subject: Added code ... X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=df88a29cfe1085d225c3954b10358c1da8dba7ec;p=dbsrgits%2FDBIx-Class-Historic.git Added code & tests for warning about incorrect component order in load_components. e.g., load_components(qw/Core UTF8Columns/) --- diff --git a/lib/DBIx/Class/Componentised.pm b/lib/DBIx/Class/Componentised.pm index e23a0b4..412958f 100644 --- a/lib/DBIx/Class/Componentised.pm +++ b/lib/DBIx/Class/Componentised.pm @@ -12,8 +12,19 @@ sub inject_base { { no strict 'refs'; foreach my $to (reverse @to_inject) { - unshift( @{"${target}::ISA"}, $to ) - unless ($target eq $to || $target->isa($to)); + my @comps = qw(DigestColumns ResultSetManager Ordered UTF8Columns); + # Add components here that need to be loaded before Core + foreach my $first_comp (@comps) { + if ($to eq 'DBIx::Class::Core' && + $target->isa("DBIx::Class::${first_comp}")) { + warn "Possible incorrect order of components in ". + "${target}::load_components($first_comp) call: Core loaded ". + "before $first_comp. See the documentation for ". + "DBIx::Class::$first_comp for more information"; + } + } + unshift( @{"${target}::ISA"}, $to ) + unless ($target eq $to || $target->isa($to)); } } @@ -54,8 +65,8 @@ sub ensure_class_loaded { eval "require $f_class"; my $err = $@; Class::Inspector->loaded($f_class) - or die $err || "require $f_class was successful but the package". - "is not defined"; + or die $err || "require $f_class was successful but the package". + "is not defined"; } 1; diff --git a/t/05components.t b/t/05components.t index 4b063bf..567bc1b 100644 --- a/t/05components.t +++ b/t/05components.t @@ -7,7 +7,7 @@ use Test::More; use lib qw(t/lib); use DBICTest::ForeignComponent; -plan tests => 2; +plan tests => 5; # Tests if foreign component was loaded by calling foreign's method ok( DBICTest::ForeignComponent->foreign_test_method, 'foreign component' ); @@ -34,3 +34,31 @@ is_deeply( \@DBICTest::_InjectBaseTest::ISA, /], 'inject_base filters duplicates' ); + +# Test for a warning with incorrect order in load_components +my @warnings = (); +{ + package A::Test; + our @ISA = 'DBIx::Class'; + { + local $SIG{__WARN__} = sub { push @warnings, shift}; + __PACKAGE__->load_components(qw(Core UTF8Columns)); + } +} +like( $warnings[0], qr/Core loaded before UTF8Columns/, + 'warning issued for incorrect order in load_components()' ); +is( scalar @warnings, 1, + 'only one warning issued for incorrect load_components call' ); + +# Test that no warning is issued for the correct order in load_components +{ + @warnings = (); + package B::Test; + our @ISA = 'DBIx::Class'; + { + local $SIG{__WARN__} = sub { push @warnings, shift }; + __PACKAGE__->load_components(qw(UTF8Columns Core)); + } +} +is( scalar @warnings, 0, + 'warning not issued for correct order in load_components()' );