diff options
Diffstat (limited to 't/03_simple.t')
-rw-r--r-- | t/03_simple.t | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/t/03_simple.t b/t/03_simple.t new file mode 100644 index 0000000..efea5ea --- /dev/null +++ b/t/03_simple.t @@ -0,0 +1,85 @@ +use strict; +use warnings; +use Test::More tests => 10; +use File::Spec (); +use File::Which qw{which where}; + +use constant IS_VMS => ($^O eq 'VMS'); +use constant IS_MAC => ($^O eq 'MacOS'); +use constant IS_DOS => ($^O eq 'MSWin32' or $^O eq 'dos' or $^O eq 'os2'); +use constant IS_CYGWIN => ($^O eq 'cygwin'); + +# Check that it returns undef if no file is passed +is( + scalar(which('')), undef, + 'Null-length false result', +); +is( + scalar(which('non_existent_very_unlinkely_thingy_executable')), undef, + 'Positive length false result', +); + +# Where is the test application +my $test_bin = File::Spec->catdir( 't', 'test-bin' ); +ok( -d $test_bin, 'Found test-bin' ); + +# Set up for running the test application +local $ENV{PATH} = $test_bin; +unless ( + File::Which::IS_VMS + or + File::Which::IS_MAC + or + File::Which::IS_DOS +) { + my $test3 = File::Spec->catfile( $test_bin, 'test3' ); + chmod 0755, $test3; +} + +SKIP: { + skip("Not on DOS-like filesystem", 3) unless IS_DOS; + is( lc scalar which('test1'), 't\test-bin\test1.exe', 'Looking for test1.exe' ); + is( lc scalar which('test2'), 't\test-bin\test2.bat', 'Looking for test2.bat' ); + is( scalar which('test3'), undef, 'test3 returns undef' ); +} + +SKIP: { + skip("Not on a UNIX filesystem", 1) if IS_DOS; + skip("Not on a UNIX filesystem", 1) if IS_MAC; + skip("Not on a UNIX filesystem", 1) if IS_VMS; + is( + scalar(which('test3')), + File::Spec->catfile( $test_bin, 'test3'), + 'Check test3 for Unix', + ); +} + +SKIP: { + skip("Not on a cygwin filesystem", 2) unless IS_CYGWIN; + + # Cygwin: should make test1.exe transparent + is( + scalar(which('test1')), + File::Spec->catfile( $test_bin, 'test1' ), + 'Looking for test1 on Cygwin: transparent to test1.exe', + ); + is( + scalar(which('test4')), + undef, + 'Make sure that which() doesn\'t return a directory', + ); +} + +# Make sure that .\ stuff works on DOSish, VMS, MacOS (. is in PATH implicitly). +SKIP: { + unless ( IS_DOS or IS_VMS ) { + skip("Not on a DOS or VMS filesystem", 1); + } + + chdir( $test_bin ); + is( + lc scalar which('test1'), + File::Spec->catfile(File::Spec->curdir(), 'test1.exe'), + 'Looking for test1.exe in curdir', + ); +} |