summaryrefslogblamecommitdiffstats
path: root/t/runtime.t
blob: 5125e91deda4ac3310194cdf1e251b07ea816165 (plain) (tree)
1
2
3
4
5
6
7
8
9



                   
                        
 


                                     
                                 
                                                            




                                                                                                                                                    
                               



                                                                              

 
            



                                                   
            







                                                         
 




                                                                                





                                                                          
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use lib 't/lib/runtime';

use Module::Runtime 'require_module';

sub warnings_ok {
    my ($class, @conflicts) = @_;
    local $Test::Builder::Level = $Test::Builder::Level + 1;
    @conflicts = sort map { "Conflict detected for $_->[0]:\n  $_->[1] is version $_->[2], but must be greater than version $_->[3]\n" } @conflicts;

    my @warnings;
    {
        local $SIG{__WARN__} = sub { push @warnings, $_[0] };
        require_module($class);
    }
    @warnings = sort @warnings;

    is_deeply(\@warnings, \@conflicts, "correct runtime warnings for $class");
}

warnings_ok(
    'Foo',
    ['Foo::Conflicts', 'Foo::Foo', '0.01', '0.01'],
    ['Foo::Conflicts', 'Foo::Bar', '0.01', '0.01'],
);
warnings_ok(
    'Bar',
    ['Bar::Conflicts', 'Bar::Baz::Bad',  '0.01', '0.01'],
    ['Bar::Conflicts', 'Bar::Foo::Bad',  '0.01', '0.01'],
    ['Bar::Conflicts', 'Bar::Foo',       '0.01', '0.01'],
    ['Bar::Conflicts', 'Bar::Bar::Bad',  '0.01', '0.01'],
    ['Bar::Conflicts', 'Bar::Bar',       '0.01', '0.01'],
    ['Bar::Conflicts', 'Bar::Quux::Bad', '0.01', '0.01'],
);

is(Bar::Foo->contents, "__DATA__ for Bar::Foo\n", "__DATA__ sections intact");
is(Bar::Bar->contents, "__DATA__ for Bar::Bar\n", "__DATA__ sections intact");
is(Bar::Baz->contents, "__DATA__ for Bar::Baz\n", "__DATA__ sections intact");
is(Bar::Quux->contents, "__DATA__ for Bar::Quux\n", "__DATA__ sections intact");

is(scalar(grep { ref($_) eq 'ARRAY' && @$_ > 1 && ref($_->[1]) eq 'HASH' }
               @INC),
   1,
   "only installed one \@INC hook");

done_testing;