use strict;
use warnings;
use t::Utils;
use Test::More;
{
package Mock::LoadPlugin;
use strict;
use warnings;
use parent qw/Teng/;
use Test::More;
__PACKAGE__->load_plugin('Count');
eval q{
use Class::Method::Modifiers;
around qw/count/ => sub {
my $code = shift;
my $count = $code->(@_);
return $count + 1;
};
};
plan skip_all => 'This test requires Class::Method::Modifiers' if $@;
sub setup_test_db {
my $self = shift;
$self->do(q{
CREATE TABLE mock_table(
id INTEGER PRIMARY KEY,
name TEXT
)
});
}
package Mock::LoadPlugin::Schema;
use utf8;
use Teng::Schema::Declare;
table {
name 'mock_table';
pk qw( id );
columns qw( id name );
};
package Mock::LoadPlugin2;
use strict;
use warnings;
use parent qw/Teng/;
__PACKAGE__->load_plugin('Count');
package Mock::LoadPlugin2::Schema;
use utf8;
use Teng::Schema::Declare;
table {
name 'mock_table';
pk qw( id );
columns qw( id name );
};
}
use DBI;
use Teng::Schema::Loader;
use MyGuard;
my $db_file = __FILE__;
$db_file =~ s/\.t$/.db/;
unlink $db_file if -f $db_file;
my $guard = MyGuard->new(sub { unlink $db_file });
my $dbh = DBI->connect("dbi:SQLite:$db_file",'','',{});
my $db = Mock::LoadPlugin->new(dbh => $dbh);
my $db2 = Mock::LoadPlugin2->new(dbh => $dbh);
$db->setup_test_db;
is $db2->count('mock_table' => 'id', {}) => 0, 'is empty table';
is $db->count('mock_table' => 'id', {}) => ($db2->count('mock_table' => 'id', {}) + 1), 'Class::Method::Modifiers trigger only apply Mock::LoadPlugin';
done_testing;