This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
sv.c: I missed a dot
[perl5.git] / dist / autouse / t / autouse.t
CommitLineData
82d4508f
MS
1#!./perl
2
3BEGIN {
78cd8b71 4 require Config;
34c716a1 5 if ($Config::Config{'extensions'} !~ m!\bList/Util\b!){
78cd8b71
NC
6 print "1..0 # Skip -- Perl configured without List::Util module\n";
7 exit 0;
8 }
82d4508f
MS
9}
10
8618896a 11use Test::More tests => 12;
82d4508f 12
a6c2ede0 13BEGIN {
82d4508f
MS
14 require autouse;
15 eval {
5a02ccb1
MS
16 "autouse"->import('List::Util' => 'List::Util::first(&@)');
17 };
18 ok( !$@ );
19
20 eval {
21 "autouse"->import('List::Util' => 'Foo::min');
82d4508f
MS
22 };
23 ok( $@, qr/^autouse into different package attempted/ );
24
25 "autouse"->import('List::Util' => qw(max first(&@)));
a6c2ede0
JH
26}
27
82d4508f 28my @a = (1,2,3,4,5.5);
8618896a 29is( max(@a), 5.5);
a6c2ede0 30
a6c2ede0 31
82d4508f 32# first() has a prototype of &@. Make sure that's preserved.
8618896a 33is( (first { $_ > 3 } @a), 4);
82d4508f
MS
34
35
36# Example from the docs.
37use autouse 'Carp' => qw(carp croak);
38
39{
40 my @warning;
41 local $SIG{__WARN__} = sub { push @warning, @_ };
42 carp "this carp was predeclared and autoused\n";
8618896a
NC
43 is( scalar @warning, 1 );
44 like( $warning[0], qr/^this carp was predeclared and autoused\n/ );
82d4508f
MS
45
46 eval { croak "It is but a scratch!" };
8618896a 47 like( $@, qr/^It is but a scratch!/);
82d4508f
MS
48}
49
a6c2ede0 50
43bd726c
JH
51# Test that autouse's lazy module loading works.
52use autouse 'Errno' => qw(EPERM);
a6c2ede0 53
43bd726c 54my $mod_file = 'Errno.pm'; # just fine and portable for %INC
82d4508f 55ok( !exists $INC{$mod_file} );
fd9a0c67 56ok( EPERM ); # test if non-zero
82d4508f 57ok( exists $INC{$mod_file} );
a6c2ede0 58
03699e8e
MS
59use autouse Env => "something";
60eval { something() };
8618896a 61like( $@, qr/^\Qautoused module Env has unique import() method/ );
03699e8e
MS
62
63# Check that UNIVERSAL.pm doesn't interfere with modules that don't use
64# Exporter and have no import() of their own.
65require UNIVERSAL;
00f261ef
SM
66require File::Spec;
67unshift @INC, File::Spec->catdir('t', 'lib'), 'lib';
68autouse->import("MyTestModule" => 'test_function');
69my $ret = test_function();
8618896a 70is( $ret, 'works' );
00f261ef 71