#!perl -w

use strict;
use FindBin;
use lib (($FindBin::Bin."/lib")=~/^(.*)$/);
use Test::More tests => 10;

{
    my $foo;
    ok($foo = MyTest->new());

    my @plugins;
    my @expected = qw(MyTest::Plugin::Foo);
    ok(@plugins = sort $foo->plugins);
    is_deeply(\@plugins, \@expected);

    @plugins = ();

    ok(@plugins = sort MyTest->plugins);
    is_deeply(\@plugins, \@expected);
}

{
    my $foo;
    ok($foo = MyTestSub->new());

    my @plugins;
    my @expected = qw(MyTest::Plugin::Foo);
    ok(@plugins = sort $foo->plugins);
    is_deeply(\@plugins, \@expected);

    @plugins = ();

    ok(@plugins = sort MyTestSub->plugins);
    is_deeply(\@plugins, \@expected);
}

package MyTest;

use strict;
use Module::Pluggable only => [ "MyTest::Plugin::Foo" ];


sub new {
    my $class = shift;
    return bless {}, $class;

}

package MyTestSub;

use strict;
use Module::Pluggable search_path => "MyTest::Plugin";


sub new {
    my $class = shift;
    my $self = bless {}, $class;

    $self->only(["MyTest::Plugin::Foo"]);

    return $self;
}
1;

