#!perl use Test::More tests => 31; use Test::Command; use FindBin; ## write the output files to be used in all later tests open my $short_data_fh, '>', "$FindBin::Bin/short.txt" or BAIL_OUT("$FindBin::Bin/short.txt: $!"); print $short_data_fh "foo\n"; close $short_data_fh or die BAIL_OUT($!); open my $stdout_data_fh, '>', "$FindBin::Bin/stdout.txt" or BAIL_OUT("$FindBin::Bin/stdout.txt: $!"); print $stdout_data_fh "foo\nbar\n"; close $stdout_data_fh or die BAIL_OUT($!); open my $stderr_data_fh, '>', "$FindBin::Bin/stderr.txt" or BAIL_OUT("$FindBin::Bin/stderr.txt: $!"); print $stderr_data_fh "bar\nfoo\n"; close $stderr_data_fh or die BAIL_OUT($!); ## _slurp() tests my $text = Test::Command::_slurp("$FindBin::Bin/stdout.txt"); is($text, "foo\nbar\n", '_slurp'); ## make 10 attempts to find a non-existent file my $rand_file; for ( 1 .. 10 ) { $rand_file = rand; last if ! -e $rand_file; } SKIP: { skip 'could not find a non-existent file name', 1 if -e $rand_file; eval { $text = Test::Command::_slurp($rand_file) }; ok($@, '_slurp - no such file'); } eval { Test::Command::_slurp() }; like($@, qr/\$file_name is undefined/, '_slurp - no args'); ## _build_name() tests ## use anon sub to avoid uninitialized sub name warning my $name = sub { Test::Command::_build_name(undef, qw/ potato monkey /) }->(); is($name, "__ANON__: potato, monkey", '_build_name - string'); $name = sub { Test::Command::_build_name('rutabaga', qw/ potato monkey /) }->(); is($name, 'rutabaga', '_build_name - defined - string'); $name = sub { Test::Command::_build_name(undef, [qw/ potato -f monkey /], 'rutabaga') }->(); is($name, '__ANON__: potato -f monkey, rutabaga', '_build_name - array'); $name = sub { Test::Command::_build_name('chicken', [qw/ potato -f monkey /], 'rutabaga') }->(); is($name, 'chicken', '_build_name - defined - array'); eval { Test::Command::_build_name() }; like($@, qr/\$cmd is undefined/, '_build_name - no args'); eval { Test::Command::_get_result() }; like($@, qr/\$cmd is undefined/, '_get_result - no args'); eval { Test::Command::_run_cmd() }; like($@, qr/\$cmd is undefined/, '_run_cmd - no args'); ## _compare_files tests eval { Test::Command::_compare_files() }; like($@, qr/\$got_file is undefined/, '_compare_files - no args'); eval { Test::Command::_compare_files(1) }; like($@, qr/\$exp_file is undefined/, '_compare_files - no exp file'); eval { Test::Command::_compare_files(undef, 1) }; like($@, qr/\$got_file is undefined/, '_compare_files - no got file'); my ($files_ok, $diff_line) = Test::Command::_compare_files("$FindBin::Bin/stdout.txt", "$FindBin::Bin/stderr.txt"); ok(!$files_ok, '_compare_files - not ok'); cmp_ok($diff_line, '==', 1, "_compare_files - diff start"); ($files_ok, $diff_line) = Test::Command::_compare_files("$FindBin::Bin/stdout.txt", "$FindBin::Bin/stdout.txt"); ok($files_ok, '_compare_files - ok'); cmp_ok($diff_line, '==', 2, "_compare_files - no diff start"); ($files_ok, $diff_line) = Test::Command::_compare_files("$FindBin::Bin/short.txt", "$FindBin::Bin/stdout.txt"); ok(!$files_ok, '_compare_files - not ok'); cmp_ok($diff_line, '==', 2, "_compare_files - diff start"); ($files_ok, $diff_line) = Test::Command::_compare_files("$FindBin::Bin/stdout.txt", "$FindBin::Bin/short.txt"); ok(!$files_ok, '_compare_files - not ok'); cmp_ok($diff_line, '==', 2, "_compare_files - diff start"); SKIP: { skip 'could not find a non-existent file name', 2 if -e $rand_file; eval { Test::Command::_compare_files($rand_file, "$FindBin::Bin/stdout.txt") }; ok($@, '_compare_files - no such file - got'); eval { Test::Command::_compare_files("$FindBin::Bin/stdout.txt", $rand_file) }; ok($@, '_compare_files - no such file - exp'); } my $diff_column = Test::Command::_diff_column(); ok(! defined $diff_column, '_diff_column - no args'); $diff_column = Test::Command::_diff_column("potato"); cmp_ok($diff_column, '==', 1, '_diff_column - first arg'); $diff_column = Test::Command::_diff_column(undef, "potato"); cmp_ok($diff_column, '==', 1, '_diff_column - second arg'); $diff_column = Test::Command::_diff_column("potato", "potato"); ok(! defined $diff_column, '_diff_column - eq args'); $diff_column = Test::Command::_diff_column("potato", "patato"); cmp_ok($diff_column, '==', 2, '_diff_column - col 2(1)'); $diff_column = Test::Command::_diff_column("potato\n", "potato"); cmp_ok($diff_column, '==', 7, '_diff_column - col 7(1)'); $diff_column = Test::Command::_diff_column("potato", "potato\n"); cmp_ok($diff_column, '==', 7, '_diff_column - col 7(2)'); $diff_column = Test::Command::_diff_column("br\n", "bar\n"); cmp_ok($diff_column, '==', 2, '_diff_column - col 2(2)');