1 BEGIN { chdir 't' if -d 't' };
6 use Test::More 'no_plan';
9 use File::Basename qw[basename];
12 use_ok('File::Fetch');
14 ### optionally set debugging ###
15 $File::Fetch::DEBUG = $File::Fetch::DEBUG = 1 if $ARGV[0];
16 $IPC::Cmd::DEBUG = $IPC::Cmd::DEBUG = 1 if $ARGV[0];
18 unless( $ENV{PERL_CORE} ) {
21 ####################### NOTE ##############################
23 Some of these tests assume you are connected to the
24 internet. If you are not, or if certain protocols or hosts
25 are blocked and/or firewalled, these tests will fail due
26 to no fault of the module itself.
28 ###########################################################
32 sleep 3 unless $File::Fetch::DEBUG;
35 ### show us the tools IPC::Cmd will use to run binary programs
36 if( $File::Fetch::DEBUG ) {
37 ### stupid 'used only once' warnings ;(
38 diag( "IPC::Run enabled: " .
39 $IPC::Cmd::USE_IPC_RUN || $IPC::Cmd::USE_IPC_RUN );
40 diag( "IPC::Run available: " . IPC::Cmd->can_use_ipc_run );
41 diag( "IPC::Run vesion: $IPC::Run::VERSION" );
42 diag( "IPC::Open3 enabled: " .
43 $IPC::Cmd::USE_IPC_OPEN3 || $IPC::Cmd::USE_IPC_OPEN3 );
44 diag( "IPC::Open3 available: " . IPC::Cmd->can_use_ipc_open3 );
45 diag( "IPC::Open3 vesion: $IPC::Open3::VERSION" );
49 ### these go on all platforms
51 { uri => 'ftp://cpan.org/pub/mirror/index.txt',
54 path => '/pub/mirror/',
57 { uri => 'rsync://cpan.pair.com/CPAN/MIRRORING.FROM',
59 host => 'cpan.pair.com',
61 file => 'MIRRORING.FROM',
63 { uri => 'http://localhost/tmp/index.txt',
65 host => 'localhost', # host is empty only on 'file://'
70 ### only test host part, the rest is OS dependant
71 { uri => 'file://localhost/tmp/index.txt',
72 host => '', # host should be empty on 'file://'
76 ### these only if we're not on win32/vms
78 { uri => 'file:///usr/local/tmp/foo.txt',
81 path => '/usr/local/tmp/',
84 { uri => 'file://hostname/tmp/foo.txt',
90 ) if not &File::Fetch::ON_WIN and not &File::Fetch::ON_VMS;
92 ### these only on win32
94 { uri => 'file:////hostname/share/tmp/foo.txt',
101 { uri => 'file:///D:/tmp/foo.txt',
108 { uri => 'file:///D|/tmp/foo.txt',
115 ) if &File::Fetch::ON_WIN;
118 ### parse uri tests ###
119 for my $entry (@map ) {
120 my $uri = $entry->{'uri'};
122 my $href = File::Fetch->_parse_uri( $uri );
123 ok( $href, "Able to parse uri '$uri'" );
125 for my $key ( sort keys %$entry ) {
126 is( $href->{$key}, $entry->{$key},
127 " '$key' ok ($entry->{$key}) for $uri");
131 ### File::Fetch->new tests ###
132 for my $entry (@map) {
133 my $ff = File::Fetch->new( uri => $entry->{uri} );
135 ok( $ff, "Object for uri '$entry->{uri}'" );
136 isa_ok( $ff, "File::Fetch", " Object" );
138 for my $acc ( keys %$entry ) {
139 is( $ff->$acc(), $entry->{$acc},
140 " Accessor '$acc' ok ($entry->{$acc})" );
144 ### fetch() tests ###
146 ### file:// tests ###
148 my $prefix = &File::Fetch::ON_UNIX ? 'file://' : 'file:///';
149 my $uri = $prefix . cwd() .'/'. basename($0);
152 _fetch_uri( file => $uri, $_ );
157 { my $uri = 'ftp://ftp.funet.fi/pub/CPAN/index.html';
158 for (qw[lwp netftp wget curl ncftp]) {
160 ### STUPID STUPID warnings ###
161 next if $_ eq 'ncftp' and $File::Fetch::FTP_PASSIVE
162 and $File::Fetch::FTP_PASSIVE;
164 _fetch_uri( ftp => $uri, $_ );
168 ### http:// tests ###
169 { for my $uri ( 'http://www.cpan.org/index.html',
170 'http://www.cpan.org/index.html?q=1&y=2'
172 for (qw[lwp wget curl lynx]) {
173 _fetch_uri( http => $uri, $_ );
178 ### rsync:// tests ###
179 { my $uri = 'rsync://cpan.pair.com/CPAN/MIRRORING.FROM';
182 _fetch_uri( rsync => $uri, $_ );
189 my $method = shift or return;
192 skip "'$method' fetching tests disabled under perl core", 4
195 ### stupid warnings ###
196 $File::Fetch::METHODS =
197 $File::Fetch::METHODS = { $type => [$method] };
199 my $ff = File::Fetch->new( uri => $uri );
201 ok( $ff, "FF object for $uri (fetch with $method)" );
203 my $file = $ff->fetch( to => 'tmp' );
206 skip "You do not have '$method' installed/available", 3
207 if $File::Fetch::METHOD_FAIL->{$method} &&
208 $File::Fetch::METHOD_FAIL->{$method};
209 ok( $file, " File ($file) fetched with $method ($uri)" );
210 ok( $file && -s $file,
212 is( $file && basename($file), $ff->output_file,
213 " File has expected name" );