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

use Test::More 0.88;
use File::chdir;
use List::AllUtils qw{ any none };

subtest none_matched             => sub { _fail('none')        };
subtest 'only lib/'              => sub { _fail('justlib')     };
subtest 'only dist.ini'          => sub { _fail('justdistini') };
subtest 'matches on Makefile.PL' => sub { _pass('makefile')    };
subtest 'matches on Build.PL'    => sub { _pass('build')       };
subtest 'matches on dist.ini'    => sub { _pass('dist')        };

done_testing;

sub _pass {
    my ($dir) = @_;

    ok do { none { $_ eq 'lib' } @INC }, 'sanity check: lib not in @INC';
    local $CWD = "t/$dir";
    local @INC = (@INC, '../../lib');

    delete $INC{'test.pl'};
    require 'test.pl';

    ok do { any { $_ eq 'lib' } @INC }, 'lib is in @INC';
}

sub _fail {
    my ($dir) = @_;

    ok do { none { $_ eq 'lib' } @INC }, 'sanity check: lib not in @INC';
    local $CWD = "t/$dir";
    local @INC = (@INC, '../../lib');

    delete $INC{'test.pl'};
    require 'test.pl';

    ok do { none { $_ eq 'lib' } @INC }, 'lib is in @INC';
}