Exporter.t (and question)
Nicholas Clark [Sun, 16 Dec 2001 17:24:55 +0000 (17:24 +0000)]
Message-ID: <20011216172455.P21702@plum.flirble.org>

p4raw-id: //depot/perl@13728

lib/Exporter.t

index f2771db..d2a9289 100644 (file)
@@ -21,7 +21,7 @@ sub ok ($;$) {
 }
 
 
-print "1..19\n";
+print "1..24\n";
 require Exporter;
 ok( 1, 'Exporter compiled' );
 
@@ -50,7 +50,7 @@ foreach my $meth (@::Exporter_Methods) {
                 That => [qw(Above the @wailing)],
                 tray => [qw(Fasten $seatbelt)],
                );
-@EXPORT    = qw(lifejacket);
+@EXPORT    = qw(lifejacket is);
 @EXPORT_OK = qw(under &your $seat);
 $VERSION = '1.05';
 
@@ -72,6 +72,8 @@ $seat     = 'seat';
 @wailing = qw(AHHHHHH);
 %left = ( left => "right" );
 
+BEGIN {*is = \&Is};
+sub Is { 'Is' };
 
 Exporter::export_ok_tags;
 
@@ -89,6 +91,24 @@ Testing->import;
 
 ::ok( defined &lifejacket,      'simple import' );
 
+my $got = eval {&lifejacket};
+::ok ( $@ eq "", 'check we can call the imported subroutine')
+  or print STDERR "# \$\@ is $@\n";
+::ok ( $got eq 'lifejacket', 'and that it gave the correct result')
+  or print STDERR "# expected 'lifejacket', got " .
+  (defined $got ? "'$got'" : "undef") . "\n";
+
+# The string eval is important. It stops $Foo::{is} existing when
+# Testing->import is called.
+::ok( eval "defined &is",
+      "Import a subroutine where exporter must create the typeglob" );
+my $got = eval "&is";
+::ok ( $@ eq "", 'check we can call the imported autoloaded subroutine')
+  or chomp ($@), print STDERR "# \$\@ is $@\n";
+::ok ( $got eq 'Is', 'and that it gave the correct result')
+  or print STDERR "# expected 'Is', got " .
+  (defined $got ? "'$got'" : "undef") . "\n";
+
 
 package Bar;
 my @imports = qw($seatbelt &Above stuff @wailing %left);