summaryrefslogtreecommitdiff
path: root/t/03_simple.t
diff options
context:
space:
mode:
Diffstat (limited to 't/03_simple.t')
-rw-r--r--t/03_simple.t85
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',
+ );
+}