Update to Encode 2.32
[p5sagit/p5-mst-13.2.git] / ext / DynaLoader / t / XSLoader.t
CommitLineData
73bf7552 1#!perl -T
9e8c31cc 2
3BEGIN {
11fd7d05 4 if( $ENV{PERL_CORE} ) {
5 chdir 't';
6 @INC = '../lib';
dbb032c1 7 }
9e8c31cc 8}
9
11fd7d05 10use strict;
11use Config;
150e77ce 12
494364e0 13my $db_file;
11fd7d05 14BEGIN {
150e77ce 15 eval "use Test::More";
16 if ($@) {
17 print "1..0 # Skip: Test::More not available\n";
18 die "Test::More not available\n";
19 }
494364e0 20
21 use Config;
22 foreach (qw/SDBM_File GDBM_File ODBM_File NDBM_File DB_File/) {
23 if ($Config{extensions} =~ /\b$_\b/) {
24 $db_file = $_;
25 last;
26 }
27 }
11fd7d05 28}
29
30
150e77ce 31my %modules = (
32 # ModuleName => q|code to check that it was loaded|,
33 'Cwd' => q| ::can_ok( 'Cwd' => 'fastcwd' ) |, # 5.7 ?
34 'File::Glob' => q| ::can_ok( 'File::Glob' => 'doglob' ) |, # 5.6
494364e0 35 $db_file => q| ::can_ok( $db_file => 'TIEHASH' ) |, # 5.0
150e77ce 36 'Socket' => q| ::can_ok( 'Socket' => 'inet_aton' ) |, # 5.0
37 'Time::HiRes'=> q| ::can_ok( 'Time::HiRes' => 'usleep' ) |, # 5.7.3
38);
39
73bf7552 40plan tests => keys(%modules) * 4 + 5;
150e77ce 41
42# Try to load the module
43use_ok( 'XSLoader' );
11fd7d05 44
45# Check functions
46can_ok( 'XSLoader' => 'load' );
150e77ce 47can_ok( 'XSLoader' => 'bootstrap_inherit' );
11fd7d05 48
49# Check error messages
50eval { XSLoader::load() };
51like( $@, '/^XSLoader::load\(\'Your::Module\', \$Your::Module::VERSION\)/',
52 "calling XSLoader::load() with no argument" );
9e8c31cc 53
150e77ce 54eval q{ package Thwack; XSLoader::load('Thwack'); };
99df65aa 55if ($Config{usedl}) {
80a65c70 56 like( $@, q{/^Can't locate loadable object for module Thwack in @INC/},
57 "calling XSLoader::load() under a package with no XS part" );
99df65aa 58}
59else {
80a65c70 60 like( $@, q{/^Can't load module Thwack, dynamic loading not available in this perl./},
61 "calling XSLoader::load() under a package with no XS part" );
99df65aa 62}
150e77ce 63
11fd7d05 64# Now try to load well known XS modules
65my $extensions = $Config{'extensions'};
66$extensions =~ s|/|::|g;
9e8c31cc 67
11fd7d05 68for my $module (sort keys %modules) {
73bf7552 69 my $warnings = "";
70 local $SIG{__WARN__} = sub { $warnings = $_[0] };
71
11fd7d05 72 SKIP: {
73bf7552 73 skip "$module not available", 4 if $extensions !~ /\b$module\b/;
150e77ce 74
75 eval qq{ package $module; XSLoader::load('$module', "qunckkk"); };
8cb289bd 76 like( $@, "/^$module object version \\S+ does not match bootstrap parameter (?:qunckkk|0)/",
150e77ce 77 "calling XSLoader::load() with a XS module and an incorrect version" );
73bf7552 78 like( $warnings, "/^\$|^Version string 'qunckkk' contains invalid data; ignoring: 'qunckkk'/",
79 "in Perl 5.10, DynaLoader warns about the incorrect version string" );
150e77ce 80
81 eval qq{ package $module; XSLoader::load('$module'); };
11fd7d05 82 is( $@, '', "XSLoader::load($module)");
150e77ce 83
84 eval qq{ package $module; $modules{$module}; };
11fd7d05 85 }
86}
9e8c31cc 87