MAD do not ignore errors from 'use'
[p5sagit/p5-mst-13.2.git] / ext / DynaLoader / t / XSLoader.t
CommitLineData
150e77ce 1#!/usr/bin/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
11fd7d05 13BEGIN {
150e77ce 14 eval "use Test::More";
15 if ($@) {
16 print "1..0 # Skip: Test::More not available\n";
17 die "Test::More not available\n";
18 }
11fd7d05 19}
20
21
150e77ce 22my %modules = (
23 # ModuleName => q|code to check that it was loaded|,
24 'Cwd' => q| ::can_ok( 'Cwd' => 'fastcwd' ) |, # 5.7 ?
25 'File::Glob' => q| ::can_ok( 'File::Glob' => 'doglob' ) |, # 5.6
26 'SDBM_File' => q| ::can_ok( 'SDBM_File' => 'TIEHASH' ) |, # 5.0
27 'Socket' => q| ::can_ok( 'Socket' => 'inet_aton' ) |, # 5.0
28 'Time::HiRes'=> q| ::can_ok( 'Time::HiRes' => 'usleep' ) |, # 5.7.3
29);
30
31plan tests => keys(%modules) * 3 + 5;
32
33# Try to load the module
34use_ok( 'XSLoader' );
11fd7d05 35
36# Check functions
37can_ok( 'XSLoader' => 'load' );
150e77ce 38can_ok( 'XSLoader' => 'bootstrap_inherit' );
11fd7d05 39
40# Check error messages
41eval { XSLoader::load() };
42like( $@, '/^XSLoader::load\(\'Your::Module\', \$Your::Module::VERSION\)/',
43 "calling XSLoader::load() with no argument" );
9e8c31cc 44
150e77ce 45eval q{ package Thwack; XSLoader::load('Thwack'); };
46like( $@, q{/^Can't locate loadable object for module Thwack in @INC/},
47 "calling XSLoader::load() under a package with no XS part" );
48
11fd7d05 49# Now try to load well known XS modules
50my $extensions = $Config{'extensions'};
51$extensions =~ s|/|::|g;
9e8c31cc 52
11fd7d05 53for my $module (sort keys %modules) {
54 SKIP: {
150e77ce 55 skip "$module not available", 3 if $extensions !~ /\b$module\b/;
56
57 eval qq{ package $module; XSLoader::load('$module', "qunckkk"); };
58 like( $@, "/^$module object version \\S+ does not match bootstrap parameter (?:qunckkk|0\\.000)/",
59 "calling XSLoader::load() with a XS module and an incorrect version" );
60
61 eval qq{ package $module; XSLoader::load('$module'); };
11fd7d05 62 is( $@, '', "XSLoader::load($module)");
150e77ce 63
64 eval qq{ package $module; $modules{$module}; };
11fd7d05 65 }
66}
9e8c31cc 67