The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package AutoTest;

use strict;
use warnings;

use Test::More tests => 13;

use lib qw( t/lib );

use Class::DBI::Mock;

unless (exists $Class::DBI::ViewLoader::handlers{'Mock'}) {
    # Module::Pluggable doesn't look in non-blib dirs under -Mblib
    require Class::DBI::ViewLoader::Mock;
    $Class::DBI::ViewLoader::handlers{'Mock'} = 'Class::DBI::ViewLoader::Mock';
}

BEGIN { use_ok('Class::DBI::ViewLoader::Auto') }

my $dsn = 'dbi:Mock:';
my @views;

@AutoTest::ISA = qw( Class::DBI::Mock );

@AutoTest::Vanilla::ISA = qw( AutoTest );
AutoTest::Vanilla->connection($dsn);
@views = AutoTest::Vanilla->load_views();

is(@views, 2, 'load_views');
is($views[0], 'AutoTest::Vanilla::TestView');
is($views[1], 'AutoTest::Vanilla::ViewTwo');

@AutoTest::Pattern::ISA = qw( AutoTest );
AutoTest::Pattern->connection($dsn);
@views = AutoTest::Pattern->load_views(qr/^test_/);
is(@views, 1);
is($views[0], 'AutoTest::Pattern::TestView');

@AutoTest::Ref::ISA = qw( AutoTest );
AutoTest::Ref->connection($dsn);
@views = AutoTest::Ref->load_views({namespace => 'AutoTest::Ref::View'});
is(@views, 2);
is($views[0], 'AutoTest::Ref::View::TestView');
is($views[1], 'AutoTest::Ref::View::ViewTwo');

@AutoTest::Hash::ISA = qw( AutoTest );
AutoTest::Hash->connection($dsn);
@views = AutoTest::Hash->load_views({namespace => 'AutoTest::Hash::View'});
is(@views, 2);
is($views[0], 'AutoTest::Hash::View::TestView');
is($views[1], 'AutoTest::Hash::View::ViewTwo');

@AutoTest::Connect::ISA = qw( AutoTest );
eval { @views = AutoTest::Connect->load_views() };
like($@, qr(^AutoTest::Connect has no connection));

{
    # complete test coverage.
    $SIG{__WARN__} = sub {};
    eval { Class::DBI::ViewLoader::Auto::load_views };
}

__END__


vim: ft=perl