Commit | Line | Data |
73bf7552 |
1 | #!perl -T |
9e8c31cc |
2 | |
3 | BEGIN { |
11fd7d05 |
4 | if( $ENV{PERL_CORE} ) { |
5 | chdir 't'; |
6 | @INC = '../lib'; |
dbb032c1 |
7 | } |
9e8c31cc |
8 | } |
9 | |
11fd7d05 |
10 | use strict; |
11 | use Config; |
150e77ce |
12 | |
494364e0 |
13 | my $db_file; |
11fd7d05 |
14 | BEGIN { |
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 |
31 | my %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 |
40 | plan tests => keys(%modules) * 4 + 5; |
150e77ce |
41 | |
42 | # Try to load the module |
43 | use_ok( 'XSLoader' ); |
11fd7d05 |
44 | |
45 | # Check functions |
46 | can_ok( 'XSLoader' => 'load' ); |
150e77ce |
47 | can_ok( 'XSLoader' => 'bootstrap_inherit' ); |
11fd7d05 |
48 | |
49 | # Check error messages |
50 | eval { XSLoader::load() }; |
51 | like( $@, '/^XSLoader::load\(\'Your::Module\', \$Your::Module::VERSION\)/', |
52 | "calling XSLoader::load() with no argument" ); |
9e8c31cc |
53 | |
150e77ce |
54 | eval q{ package Thwack; XSLoader::load('Thwack'); }; |
99df65aa |
55 | if ($Config{usedl}) { |
56 | like( $@, q{/^Can't locate loadable object for module Thwack in @INC/}, |
57 | "calling XSLoader::load() under a package with no XS part" ); |
58 | } |
59 | else { |
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" ); |
62 | } |
150e77ce |
63 | |
11fd7d05 |
64 | # Now try to load well known XS modules |
65 | my $extensions = $Config{'extensions'}; |
66 | $extensions =~ s|/|::|g; |
9e8c31cc |
67 | |
11fd7d05 |
68 | for 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 | |