xref: /openbsd-src/gnu/usr.bin/perl/dist/IO/t/IO.t (revision 5759b3d249badf144a6240f7eec4dcf9df003e6b)
1b39c5158Smillert#!/usr/bin/perl -w
2b39c5158Smillert
3b39c5158SmillertBEGIN {
4b39c5158Smillert    if ($ENV{PERL_CORE}) {
5b39c5158Smillert	require Config;
6b39c5158Smillert	if ($Config::Config{'extensions'} !~ /\bSocket\b/) {
7b39c5158Smillert		print "1..0 # Skip: Socket not built - IO.pm uses Socket";
8b39c5158Smillert		exit 0;
9b39c5158Smillert	}
10b39c5158Smillert    }
11b39c5158Smillert}
12b39c5158Smillert
13b39c5158Smillertuse strict;
14b39c5158Smillertuse File::Path;
15b39c5158Smillertuse File::Spec;
16b39c5158Smillertrequire($ENV{PERL_CORE} ? "../../t/test.pl" : "./t/test.pl");
17b39c5158Smillertplan(tests => 18);
18b39c5158Smillert
19b39c5158Smillert{
20b39c5158Smillert	require XSLoader;
21b39c5158Smillert
22b39c5158Smillert	my @load;
23b39c5158Smillert	local $^W;
24898184e3Ssthen	my $xsl = \&XSLoader::load;
25b39c5158Smillert	local *XSLoader::load = sub {
26b39c5158Smillert		push @load, \@_;
27898184e3Ssthen		&$xsl(@_);
28b39c5158Smillert	};
29b39c5158Smillert
30b39c5158Smillert	# use_ok() calls import, which we do not want to do
31b39c5158Smillert	require_ok( 'IO' );
32b39c5158Smillert	ok( @load, 'IO should call XSLoader::load()' );
33b39c5158Smillert	is( $load[0][0], 'IO', '... loading the IO library' );
34b39c5158Smillert	is( $load[0][1], $IO::VERSION, '... with the current .pm version' );
35b39c5158Smillert}
36b39c5158Smillert
37b39c5158Smillertmy @default = map { "IO/$_.pm" } qw( Handle Seekable File Pipe Socket Dir );
38b39c5158Smillertdelete @INC{ @default };
39b39c5158Smillert
40b39c5158Smillertmy $warn = '' ;
41b39c5158Smillertlocal $SIG{__WARN__} = sub { $warn = "@_" } ;
42b39c5158Smillert
43b39c5158Smillert{
44b39c5158Smillert    no warnings ;
45b39c5158Smillert    IO->import();
46b39c5158Smillert    is( $warn, '', "... import default, should not warn");
47b39c5158Smillert    $warn = '' ;
48b39c5158Smillert}
49b39c5158Smillert
50b39c5158Smillert{
51b39c5158Smillert    local $^W = 0;
5291f110e0Safresh1    no if $^V >= 5.17.4, warnings => "deprecated";
53b39c5158Smillert    IO->import();
54b39c5158Smillert    is( $warn, '', "... import default, should not warn");
55b39c5158Smillert    $warn = '' ;
56b39c5158Smillert}
57b39c5158Smillert
58b39c5158Smillert{
59b39c5158Smillert    local $^W = 1;
60b39c5158Smillert    IO->import();
61b39c5158Smillert    like( $warn, qr/^Parameterless "use IO" deprecated at/,
62b39c5158Smillert              "... import default, should warn");
63b39c5158Smillert    $warn = '' ;
64b39c5158Smillert}
65b39c5158Smillert
66b39c5158Smillert{
67b39c5158Smillert    use warnings 'deprecated' ;
68b39c5158Smillert    IO->import();
69b39c5158Smillert    like( $warn, qr/^Parameterless "use IO" deprecated at/,
70b39c5158Smillert              "... import default, should warn");
71b39c5158Smillert    $warn = '' ;
72b39c5158Smillert}
73b39c5158Smillert
74b39c5158Smillert{
75b39c5158Smillert    use warnings ;
76b39c5158Smillert    IO->import();
77b39c5158Smillert    like( $warn, qr/^Parameterless "use IO" deprecated at/,
78b39c5158Smillert              "... import default, should warn");
79b39c5158Smillert    $warn = '' ;
80b39c5158Smillert}
81b39c5158Smillert
82b39c5158Smillertforeach my $default (@default)
83b39c5158Smillert{
84b39c5158Smillert	ok( exists $INC{ $default }, "... import should default load $default" );
85b39c5158Smillert}
86b39c5158Smillert
87b39c5158Smillerteval { IO->import( 'nothere' ) };
88b39c5158Smillertlike( $@, qr/Can.t locate IO.nothere\.pm/, '... croaking on any error' );
89b39c5158Smillert
90b39c5158Smillertmy $fakedir = File::Spec->catdir( 'lib', 'IO' );
91b39c5158Smillertmy $fakemod = File::Spec->catfile( $fakedir, 'fakemod.pm' );
92b39c5158Smillert
93b39c5158Smillertmy $flag;
94b39c5158Smillertif ( -d $fakedir or mkpath( $fakedir ))
95b39c5158Smillert{
96*5759b3d2Safresh1	if (open( OUT, '>', $fakemod ))
97b39c5158Smillert	{
98b39c5158Smillert		(my $package = <<'		END_HERE') =~ tr/\t//d;
99b39c5158Smillert		package IO::fakemod;
100b39c5158Smillert
101b39c5158Smillert		sub import { die "Do not import!\n" }
102b39c5158Smillert
103b39c5158Smillert		sub exists { 1 }
104b39c5158Smillert
105b39c5158Smillert		1;
106b39c5158Smillert		END_HERE
107b39c5158Smillert
108b39c5158Smillert		print OUT $package;
109b39c5158Smillert	}
110b39c5158Smillert
111b39c5158Smillert	if (close OUT)
112b39c5158Smillert	{
113b39c5158Smillert		$flag = 1;
114b39c5158Smillert		push @INC, 'lib';
115b39c5158Smillert	}
116b39c5158Smillert}
117b39c5158Smillert
118b39c5158SmillertSKIP:
119b39c5158Smillert{
120b39c5158Smillert	skip("Could not write to disk", 2 ) unless $flag;
121b39c5158Smillert	eval { IO->import( 'fakemod' ) };
122b39c5158Smillert	ok( IO::fakemod::exists(), 'import() should import IO:: modules by name' );
123b39c5158Smillert	is( $@, '', '... and should not call import() on imported modules' );
124b39c5158Smillert}
125b39c5158Smillert
126b39c5158SmillertEND
127b39c5158Smillert{
128b39c5158Smillert	1 while unlink $fakemod;
129b39c5158Smillert	rmdir $fakedir;
130b39c5158Smillert}
131