1*5759b3d2Safresh1#!/usr/bin/perl -w 2*5759b3d2Safresh1 3*5759b3d2Safresh1use strict; 4*5759b3d2Safresh1use warnings; 5*5759b3d2Safresh1 6*5759b3d2Safresh1use lib 't/lib'; 7*5759b3d2Safresh1use Test::More; 8*5759b3d2Safresh1 9*5759b3d2Safresh1note "Basic use_ok"; { 10*5759b3d2Safresh1 package Foo::one; 11*5759b3d2Safresh1 ::use_ok("Symbol"); 12*5759b3d2Safresh1 ::ok( defined &gensym, 'use_ok() no args exports defaults' ); 13*5759b3d2Safresh1} 14*5759b3d2Safresh1 15*5759b3d2Safresh1 16*5759b3d2Safresh1note "With one arg"; { 17*5759b3d2Safresh1 package Foo::two; 18*5759b3d2Safresh1 ::use_ok("Symbol", qw(qualify)); 19*5759b3d2Safresh1 ::ok( !defined &gensym, ' one arg, defaults overridden' ); 20*5759b3d2Safresh1 ::ok( defined &qualify, ' right function exported' ); 21*5759b3d2Safresh1} 22*5759b3d2Safresh1 23*5759b3d2Safresh1 24*5759b3d2Safresh1note "Multiple args"; { 25*5759b3d2Safresh1 package Foo::three; 26*5759b3d2Safresh1 ::use_ok("Symbol", qw(gensym ungensym)); 27*5759b3d2Safresh1 ::ok( defined &gensym && defined &ungensym, ' multiple args' ); 28*5759b3d2Safresh1} 29*5759b3d2Safresh1 30*5759b3d2Safresh1 31*5759b3d2Safresh1note "Defining constants"; { 32*5759b3d2Safresh1 package Foo::four; 33*5759b3d2Safresh1 my $warn; local $SIG{__WARN__} = sub { $warn .= shift; }; 34*5759b3d2Safresh1 ::use_ok("constant", qw(foo bar)); 35*5759b3d2Safresh1 ::ok( defined &foo, 'constant' ); 36*5759b3d2Safresh1 ::is( $warn, undef, 'no warning'); 37*5759b3d2Safresh1} 38*5759b3d2Safresh1 39*5759b3d2Safresh1 40*5759b3d2Safresh1note "use Module VERSION"; { 41*5759b3d2Safresh1 package Foo::five; 42*5759b3d2Safresh1 ::use_ok("Symbol", 1.02); 43*5759b3d2Safresh1} 44*5759b3d2Safresh1 45*5759b3d2Safresh1 46*5759b3d2Safresh1note "use Module VERSION does not call import"; { 47*5759b3d2Safresh1 package Foo::six; 48*5759b3d2Safresh1 ::use_ok("NoExporter", 1.02); 49*5759b3d2Safresh1} 50*5759b3d2Safresh1 51*5759b3d2Safresh1 52*5759b3d2Safresh1{ 53*5759b3d2Safresh1 package Foo::seven; 54*5759b3d2Safresh1 local $SIG{__WARN__} = sub { 55*5759b3d2Safresh1 # Old perls will warn on X.YY_ZZ style versions. Not our problem 56*5759b3d2Safresh1 warn @_ unless $_[0] =~ /^Argument "\d+\.\d+_\d+" isn't numeric/; 57*5759b3d2Safresh1 }; 58*5759b3d2Safresh1 ::use_ok("Test::More", 0.47); 59*5759b3d2Safresh1} 60*5759b3d2Safresh1 61*5759b3d2Safresh1 62*5759b3d2Safresh1note "Signals are preserved"; { 63*5759b3d2Safresh1 package Foo::eight; 64*5759b3d2Safresh1 local $SIG{__DIE__}; 65*5759b3d2Safresh1 ::use_ok("SigDie"); 66*5759b3d2Safresh1 ::ok(defined $SIG{__DIE__}, ' SIG{__DIE__} preserved'); 67*5759b3d2Safresh1} 68*5759b3d2Safresh1 69*5759b3d2Safresh1 70*5759b3d2Safresh1note "Line numbers preserved"; { 71*5759b3d2Safresh1 my $package = "that_cares_about_line_numbers"; 72*5759b3d2Safresh1 73*5759b3d2Safresh1 # Store the output of caller. 74*5759b3d2Safresh1 my @caller; 75*5759b3d2Safresh1 { 76*5759b3d2Safresh1 package that_cares_about_line_numbers; 77*5759b3d2Safresh1 78*5759b3d2Safresh1 sub import { 79*5759b3d2Safresh1 @caller = caller; 80*5759b3d2Safresh1 return; 81*5759b3d2Safresh1 } 82*5759b3d2Safresh1 83*5759b3d2Safresh1 $INC{"$package.pm"} = 1; # fool use into thinking it's already loaded 84*5759b3d2Safresh1 } 85*5759b3d2Safresh1 86*5759b3d2Safresh1 ::use_ok($package); 87*5759b3d2Safresh1 my $line = __LINE__-1; 88*5759b3d2Safresh1 ::is( $caller[0], __PACKAGE__, "caller package preserved" ); 89*5759b3d2Safresh1 ::is( $caller[1], __FILE__, " file" ); 90*5759b3d2Safresh1 ::is( $caller[2], $line, " line" ); 91*5759b3d2Safresh1} 92*5759b3d2Safresh1 93*5759b3d2Safresh1 94*5759b3d2Safresh1note "not confused by functions vs class names"; { 95*5759b3d2Safresh1 $INC{"ok.pm"} = 1; 96*5759b3d2Safresh1 use_ok("ok"); # ok is a function inside Test::More 97*5759b3d2Safresh1 98*5759b3d2Safresh1 $INC{"Foo/bar.pm"} = 1; 99*5759b3d2Safresh1 sub Foo::bar { 42 } 100*5759b3d2Safresh1 use_ok("Foo::bar"); # Confusing a class name with a function name 101*5759b3d2Safresh1} 102*5759b3d2Safresh1 103*5759b3d2Safresh1done_testing; 104