Dist-Zilla-Plugin-DynamicPrereqs

 view release on metacpan or  search on metacpan

t/18-subs.t  view on Meta::CPAN

use strict;
use warnings;

use Test::More 0.88;
use if $ENV{AUTHOR_TESTING}, 'Test::Warnings';
use Path::Tiny;
use PadWalker 'closed_over';
use Module::Runtime qw(use_module module_notional_filename);
use ExtUtils::MakeMaker;
use Test::Deep;
use Dist::Zilla::Plugin::DynamicPrereqs;

use Test::File::ShareDir
    -share => { -module => { 'Dist::Zilla::Plugin::DynamicPrereqs' => 'share/DynamicPrereqs' } };

# since we change directories during the build process, this must be absolute
use lib path('t/lib')->absolute->stringify;

my $sub_prereqs = closed_over(\&Dist::Zilla::Plugin::DynamicPrereqs::register_prereqs)->{'%sub_prereqs'};
my %loaded_subs;

sub load_sub {
    foreach my $sub (Dist::Zilla::Plugin::DynamicPrereqs->_all_required_subs_for(@_)) {
        next if exists $loaded_subs{$sub};

        foreach my $prereq (keys %{$sub_prereqs->{$sub}}) {
            note "loading $prereq $sub_prereqs->{$sub}{$prereq}";
            use_module($prereq, $sub_prereqs->{$sub}{$prereq});
        }

        my $filename = path(File::ShareDir::module_dir('Dist::Zilla::Plugin::DynamicPrereqs'), 'include_subs')->child($sub);
        note "loading $filename";
        do $filename;
        die $@ if $@;
        ++$loaded_subs{$sub};
    }
}

{
    load_sub('has_module');

    {
        # pick something we know is available, but not something we have loaded
        my $module = 'Inlined::Module';

        ok(!exists($INC{module_notional_filename($module)}), "$module has not already been loaded");
        my $got_version;
        ok($got_version = has_module($module), "$module is installed; returned something true ($got_version)");
        is(has_module($module, '0'), 1, "$module is installed at least version 0");
        ok(!exists($INC{module_notional_filename($module)}), "$module has not been loaded by has_module()");

        require Inlined::Module;
        is($got_version, MM->parse_version($INC{'Inlined/Module.pm'}), 'has_version returned $Inlined::Module::VERSION');
    }

    {
        my $module = 'Bloop::Blorp';
        ok(!exists($INC{module_notional_filename($module)}), "$module has not already been loaded");
        is(has_module($module), undef, "$module is not installed");
        ok(!exists($INC{module_notional_filename($module)}), "$module has not been loaded by has_module()");
    }

    {
        my $module = 'Dist::Zilla::Plugin::DynamicPrereqs';
        ok(exists($INC{module_notional_filename($module)}), "$module has already been loaded");
        is(has_module($module), $module->VERSION, "$module is installed; returned its version");
        is(has_module($module, '0'), 1, "$module is installed at least version 0");



( run in 2.961 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )