aboutsummaryrefslogtreecommitdiff
path: root/t/Test/Execute.pm
diff options
context:
space:
mode:
Diffstat (limited to 't/Test/Execute.pm')
-rwxr-xr-xt/Test/Execute.pm118
1 files changed, 0 insertions, 118 deletions
diff --git a/t/Test/Execute.pm b/t/Test/Execute.pm
deleted file mode 100755
index e319c2e..0000000
--- a/t/Test/Execute.pm
+++ /dev/null
@@ -1,118 +0,0 @@
-package Test::Execute;
-
-use 5.16.0;
-use strict;
-use warnings FATAL => 'all';
-
-use Test::More;
-use Capture::Tiny qw/ capture_merged /;
-use Exporter 'import';
-use Carp 'croak';
-use Scalar::Util 'reftype';
-
-our $VERSION = '0.001';
-
-our @EXPORT = qw(
- run
- script
- $path
-);
-
-our $path = "";
-
-sub run {
- my %args = (
- exit => 0,
- cmd => [],
- input => undef,
- test => 1,
- expected => undef,
- name => undef,
- @_
- );
-
- my @cmd = @{ $args{cmd} };
- return undef unless @cmd; # no command to run
-
- my ($exit, $input, $test, $expected, $name, $note) =
- @args{qw/ exit input test expected name note /};
-
- my ($output, $return) = capture_merged {
- my $ret;
- if (defined $input) {
- my $pid = open (my $fh, '|-', @cmd);
- last unless $pid;
- print { $fh } $input or last;
- close $fh;
- $ret = $? >> 8;
- } else {
- $ret = system(@cmd) && $? >> 8;
- }
- };
-
- if ($note) {
- note sprintf "Exit value: %s", $return // '<undef>';
- note "Output: $output";
- }
-
- if (not $test) {
- if (defined $expected and ref $expected eq 'Regexp') {
- return $output =~ $expected;
- } elsif (defined $expected and ref $expected eq 'CODE') {
- local $_ = $output;
- return $expected->($output);
- }
- return $return;
- }
-
- $name //= "Testing run of @cmd";
- local $Test::Builder::Level = $Test::Builder::Level + 2;
- subtest $name => sub {
- plan tests => 2;
-
- # 1: Test output
- if (not defined $expected) {
- SKIP: { skip "Expected output undefined", 1 }
- } elsif (ref $expected eq 'Regexp') {
- like ($output, $expected, "$name - output");
- } elsif (ref $expected eq 'CODE') {
- local $_ = $output;
- ok ($expected->($output), "$name - output") or note "Output: $output";
- } else {
- is ($output, $expected, "$name - output");
- }
-
- # 2: Test exit value
- if (not defined $exit) {
- SKIP: { skip "Expected exit value undefined", 1 }
- } else {
- is ($return, $exit, "$name - exit value");
- }
- };
-
-}
-
-sub script {
- my @cmd;
- while (@_ and not defined reftype($_[0])) {
- my $arg = shift @_;
- push @cmd, $arg;
- }
-
- my %args;
- if (@_ and reftype($_[0]) eq 'HASH') { %args = %{ $_[0] }; }
- elsif (@_) { croak "Unknown argument passed: $_[0]"; }
- if (exists $args{cmd} and @cmd) { croak "More than one command passed"; }
- if (exists $args{cmd}) { @cmd = @{ $args{cmd} }; }
-
- my $cmd = shift @cmd;
- if (not defined $cmd) { croak "No command passed"; }
- $args{name} //= "Testing script run of $cmd @cmd";
- my @lib = map { "-I$_" } @INC;
- @cmd = ($^X, @lib, "$path$cmd", @cmd);
-
- $args{cmd} = \@cmd;
- return run(%args);
-}
-
-1;