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