File Coverage: t/more.coverage.t

# File Coverage

File: | t/more.coverage.t
Coverage: | 98.4%

line | stmt | bran | cond | sub | time | code
--- | --- | --- | --- | --- | --- | ---
1 |  |  |  |  |  | #!/usr/bin/env perl
2 |
3 | 1 1 1 |  |  | 1 | 1329 1 13 | use strict;
4 | 1 1 1 |  |  | 1 | 2 0 28 | use warnings FATAL => 'all';
5 | 1 |  |  |  | 413 | require 5.010;
6 | 1 1 1 |  |  | 1 | 1 0 47 | use feature 'say';
7 | 1 1 1 |  |  | 1 | 206 28901 3 | use Test::More;
8 | 1 1 1 |  |  | 1 | 173 847 1 | use Test::Exception;
9 | 1 1 1 |  |  | 1 | 319 4882 20 | use File::Temp 'tempfile';
10 | 1 1 1 |  |  | 1 | 98 1 20061 | use SimpleFlow qw(task say2);
11 |
12 |  |  |  |  |  | # Portability setup consistent with 01.t
13 | 1 |  |  |  | 2 | my $PERL = qq{"$^X"};
14 | 5 5 |  |  | 5 | 7 8 | sub perl_cmd { my $code = shift; return qq{$PERL -e "$code"} }
15 |
16 |  |  |  |  |  | # --- 1. say2: Invalid Filehandle --------------------------------------------
17 |  |  |  |  |  | dies_ok {
18 | 1 |  |  | 1 | 13 | say2('This should die', 'not_a_valid_filehandle');
19 | 1 |  |  |  | 2 | } 'say2 dies when provided an invalid filehandle';
20 |
21 |  |  |  |  |  | # --- 2. task(): Argument Parsing Branches -----------------------------------
22 |  |  |  |  |  | # Test the elsif (@_ % 2 == 0) branch
23 | 1 |  |  |  | 406 | my $t = task(cmd => perl_cmd('exit 0'), 'dry.run' => 1);
24 | 1 |  |  |  | 2 | is($t->{'dry.run'}, 1, 'task() successfully parses a flat key/value list');
25 |
26 |  |  |  |  |  | # Test the else (odd-length list) branch
27 |  |  |  |  |  | dies_ok {
28 | 1 |  |  | 1 | 10 | task('cmd', perl_cmd('exit 0'), 'odd_arg_without_value');
29 | 1 |  |  |  | 93 | } 'task() dies when given an odd-length flat list';
30 |
31 |  |  |  |  |  | # --- 3. task(): Invalid Reference Types for Files ---------------------------
32 |  |  |  |  |  | # input.files else { die ... } branch
33 |  |  |  |  |  | dies_ok {
34 | 1 |  |  | 1 | 8 | task({ cmd => perl_cmd('exit 0'), 'input.files' => { bad => 'hash' } });
35 | 1 |  |  |  | 334 | } 'task() dies when input.files is an unsupported reference type (HASH)';
36 |
37 |  |  |  |  |  | # output.files else { die ... } branch
38 |  |  |  |  |  | dies_ok {
39 | 1 |  |  | 1 | 13 | task({ cmd => perl_cmd('exit 0'), 'output.files' => { bad => 'hash' } });
40 | 1 |  |  |  | 413 | } 'task() dies when output.files is an unsupported reference type (HASH)';
41 |
42 |  |  |  |  |  | # --- 4. task(): Missing Scalar Input File -----------------------------------
43 |  |  |  |  |  | # (01.t covered the ARRAY branch for missing input files, this hits the scalar branch)
44 |  |  |  |  |  | dies_ok {
45 | 1 |  |  | 1 | 10 | task({ cmd => perl_cmd('exit 0'), 'input.files' => 'definitely_does_not_exist.txt' });
46 | 1 |  |  |  | 381 | } 'task() dies when a scalar input.files does not exist';
47 |
48 |  |  |  |  |  | # --- 5. task(): 0-Byte Output File Warning ----------------------------------
49 | 1 |  |  |  | 359 | my (undef, $empty_out) = tempfile(UNLINK => 1, SUFFIX => '.empty');
50 | 1 |  |  |  | 177 | my $warn_caught = 0;
51 |
52 |  |  |  |  |  | # Temporarily trap warnings to verify the exact text is emitted
53 |  |  |  |  |  | local $SIG{__WARN__} = sub {
54 | 1 |  |  | 1 | 1 | my $msg = shift;
55 | 1 | 50 |  |  | 6 | $warn_caught = 1 if $msg =~ /the above output files have 0 size/i;
56 | 1 |  |  |  | 3 | };
57 |
58 | 1 |  |  |  | 1 | $t = task(# Touch a file without writing data to it
59 |  |  |  |  |  | cmd => qq{$PERL -e "open(my \\\$fh, '>', '$empty_out'); close \\\$fh;"},
60 |  |  |  |  |  | 'output.files' => [$empty_out],
61 |  |  |  |  |  | overwrite => 1,
62 |  |  |  |  |  | die => 0
63 |  |  |  |  |  | );
64 |
65 | 1 |  |  |  | 4 | ok($warn_caught, 'task() triggers a warning when an output file is exactly 0 bytes');
66 |
67 | 1 |  |  |  | 173 | done_testing();