Module-Setup

 view release on metacpan or  search on metacpan

lib/Module/Setup/Test/Flavor.pm  view on Meta::CPAN

package Module::Setup::Test::Flavor;
use Module::Setup::Test::Utils;
use Carp ();
use File::Find::Rule;
use Test::More;

sub import {
    my $class  = shift;
    my $caller = caller;
    my %args   = @_;

    if ($args{for_test}) {
        no strict 'refs';
        no warnings 'redefine';
        *ok   = sub ($;$) { 1 };
        *like = sub ($$;$) { 1 };
        *plan = sub {};
    }

    for my $func (qw/ run_flavor_test name flavor files file dirs options default_dialog dialog /) {
        no strict 'refs';
        *{"$caller\::$func"} = \&{ $func };
    }

    strict->import;
    warnings->import;
}

my $tests = {};
sub name ($) {
    $tests->{module} = shift;
}
sub flavor ($) {
    $tests->{flavor_class} = shift;
}

sub files (@) {
    push @{ $tests->{files} }, @_;
}

sub file (@) {
    my $file = shift;
    push @{ $tests->{files} }, {
        file  => $file,
        likes => [ @_ ],
    };
}

sub dirs (@) {
    push @{ $tests->{dirs} }, @_;
}

sub options ($) {
    $tests->{options} = shift;
}


sub run_flavor_test (&) {
    my $code = shift;
    $tests = {
        module  => 'Default',
        files   => [],
        dirs    => [],
        options => {},
        flavor_class => 'Default',
    };
    $code->();
    my $module  = delete $tests->{module};
    my $options = delete $tests->{options};
    $options->{target} = 1;
    $options->{flavor_class} = delete $tests->{flavor_class};

    # test count
    my $count =  2;
    $count += scalar(@{ $tests->{dirs} });
    for my $test (@{ $tests->{files} }) {
        $count++;
        if (ref($test) eq 'HASH') {
            $count += @{ $test->{likes} };
        }
    }

    plan tests => $count;
    module_setup $options, $module;



( run in 1.027 second using v1.01-cache-2.11-cpan-39bf76dae61 )