Commit | Line | Data |
73bf7552 |
1 | #!perl -T |
9e8c31cc |
2 | |
11fd7d05 |
3 | use strict; |
4 | use Config; |
150e77ce |
5 | |
494364e0 |
6 | my $db_file; |
11fd7d05 |
7 | BEGIN { |
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 |
24 | my %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 |
33 | plan tests => keys(%modules) * 3 + 5; |
150e77ce |
34 | |
35 | # Try to load the module |
36 | use_ok( 'XSLoader' ); |
11fd7d05 |
37 | |
38 | # Check functions |
39 | can_ok( 'XSLoader' => 'load' ); |
150e77ce |
40 | can_ok( 'XSLoader' => 'bootstrap_inherit' ); |
11fd7d05 |
41 | |
42 | # Check error messages |
43 | eval { XSLoader::load() }; |
44 | like( $@, '/^XSLoader::load\(\'Your::Module\', \$Your::Module::VERSION\)/', |
45 | "calling XSLoader::load() with no argument" ); |
9e8c31cc |
46 | |
150e77ce |
47 | eval q{ package Thwack; XSLoader::load('Thwack'); }; |
99df65aa |
48 | if ($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 | } |
52 | else { |
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 |
58 | my $extensions = $Config{'extensions'}; |
59 | $extensions =~ s|/|::|g; |
9e8c31cc |
60 | |
11fd7d05 |
61 | for 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 | |