The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
### make sure we can find our conf.pl file
BEGIN {
    use FindBin;
    require "$FindBin::Bin/inc/conf.pl";
}

use strict;
use Test::More 'no_plan';
use Data::Dumper;
use CPANPLUS::Backend;
use CPANPLUS::Internals::Constants;

my $Conf    = gimme_conf();
my $CB      = CPANPLUS::Backend->new($Conf);
my $ModName = TEST_CONF_MODULE;
my $Mod     = $CB->module_tree( $ModName );


### search for modules ###
for my $type ( CPANPLUS::Module->accessors() ) {

    ### don't muck around with references/objects
    ### or private identifiers
    next if ref $Mod->$type() or $type =~/^_/;

    my @aref = $CB->search(
                    type    => $type,
                    allow   => [$Mod->$type()],
                );

    ok( scalar @aref,       "Module found by '$type'" );
    for( @aref ) {
        ok( IS_MODOBJ->($_),"   Module isa module object" );
    }
}

### search for authors ###
my $auth = $Mod->author;
for my $type ( CPANPLUS::Module::Author->accessors() ) {

    ### don't muck around with references/objects
    ### or private identifiers
    next if ref $auth->$type() or $type =~/^_/;

    my @aref = $CB->search(
                    type    => $type,
                    allow   => [$auth->$type()],
                );

    ok( @aref,                  "Author found by '$type'" );
    for( @aref ) {
        ok( IS_AUTHOBJ->($_),   "   Author isa author object" );
    }
}


{   my $warning = '';
    local $SIG{__WARN__} = sub { $warning .= "@_"; };

    {   ### try search that will yield nothing ###
        ### XXX SOURCEFILES FIX
        my @list = $CB->search( type    => 'module',
                                allow   => [$ModName.$$] );

        is( scalar(@list), 0,   "Valid search yields no results" );
        is( $warning, '',       "   No warnings issued" );
    }

    {   ### try bogus arguments ###
        my @list = $CB->search( type => '', allow => ['foo'] );

        is( scalar(@list), 0,   "Broken search yields no results" );
        like( $warning, qr/^Key 'type'.* is of invalid type for/,
                                "   Got a warning for wrong arguments" );
    }
}

# Local variables:
# c-indentation-style: bsd
# c-basic-offset: 4
# indent-tabs-mode: nil
# End:
# vim: expandtab shiftwidth=4: