#!perl -T
use strict;
use Carp;
use File::Spec;
use Test::More tests => 15;
%ENV = (); # required for running under -T
my $result;
my $rootdir = findup('Makefile.PL');
my $testapp = "perl -I$rootdir/lib " . File::Spec->catfile($rootdir, 't', 'test-app');
my $fail_str = 'FAILED';
# Test that insufficient mandatory args result in failure
isnt(system( "$testapp >/dev/null" ), 0, 'Running with no params fails');
isnt(system( "$testapp a >/dev/null" ), 0, 'Running with 1 param fails');
isnt(system( "$testapp a b >/dev/null" ), 0, 'Running with 2 params fails');
# Testing params
ok(qx( $testapp a b c ) eq 'a|b|c|-|-|-|-|-|', 'Running with 3 params succeeds');
ok(qx( $testapp a b c d ) eq 'a|b,c|d|-|-|-|-|-|', 'Running with 4 params succeeds');
# Testing options
ok(qx( $testapp a b c -v ) eq 'a|b|c|1|-|-|-|-|', 'Using -v sets verbose to 1');
ok(qx( $testapp a b c -v -v ) eq 'a|b|c|2|-|-|-|-|', 'Using -v -v sets verbose to 2');
ok(qx( $testapp a b c --verbose ) eq 'a|b|c|1|-|-|-|-|', 'Using --verbose sets verbose to 1');
ok(qx( $testapp a b c --verbose --verbose ) eq 'a|b|c|2|-|-|-|-|', 'Using --verbose --verbose sets verbose to 2');
ok(qx( $testapp a b c -n alf ) eq 'a|b|c|-|alf|-|-|-|', 'Using -n alf sets name to alf');
ok(qx( $testapp a b c -n alf -n bob ) eq 'a|b|c|-|alf,bob|-|-|-|', 'Using -n alf -n bob sets name to alf,bob');
ok(qx( $testapp a b c --names alf ) eq 'a|b|c|-|alf|-|-|-|', 'Using --names alf sets name to alf');
ok(qx( $testapp a b c --names alf --names bob ) eq 'a|b|c|-|alf,bob|-|-|-|', 'Using --names alf --names bob sets name to (alf, bob)');
ok(qx( $testapp a b c --foo-bar 3 ) eq 'a|b|c|-|-|3|3|-|', 'Option with hyphen works');
ok(qx( $testapp a b c --ages=f=2 ) eq 'a|b|c|-|-|-|-|f|', 'Option with hyphen works');
sub findup {
my $file_to_find = shift or croak "Usage: findup(\$FILENAME)";
my $dir = File::Spec->curdir();
my $found = 0;
while (!$found) {
return $dir if -e File::Spec->catfile($dir, $file_to_find);
my $tmpdir = File::Spec->updir($dir);
if ($dir eq File::Spec->rootdir() || $dir eq $tmpdir) {
# no further to go
croak "$file_to_find not found in path";
}
$dir = $tmpdir;
}
}