| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
15
|
|
|
15
|
|
129548
|
use warnings; |
|
|
15
|
|
|
|
|
130
|
|
|
|
15
|
|
|
|
|
792
|
|
|
2
|
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
package Git::Hooks::Test; |
|
4
|
|
|
|
|
|
|
# ABSTRACT: Git::Hooks testing utilities |
|
5
|
|
|
|
|
|
|
$Git::Hooks::Test::VERSION = '3.3.1'; |
|
6
|
|
|
|
|
|
|
## no critic (RequireExplicitPackage) |
|
7
|
|
|
|
|
|
|
## no critic (ErrorHandling::RequireCarping) |
|
8
|
15
|
|
|
15
|
|
164
|
use v5.16.0; |
|
|
15
|
|
|
|
|
47
|
|
|
9
|
15
|
|
|
15
|
|
8950
|
use utf8; |
|
|
15
|
|
|
|
|
208
|
|
|
|
15
|
|
|
|
|
73
|
|
|
10
|
15
|
|
|
15
|
|
461
|
use Carp; |
|
|
15
|
|
|
|
|
24
|
|
|
|
15
|
|
|
|
|
1415
|
|
|
11
|
15
|
|
|
15
|
|
99
|
use Config; |
|
|
15
|
|
|
|
|
23
|
|
|
|
15
|
|
|
|
|
505
|
|
|
12
|
15
|
|
|
15
|
|
64
|
use Exporter qw/import/; |
|
|
15
|
|
|
|
|
31
|
|
|
|
15
|
|
|
|
|
529
|
|
|
13
|
15
|
|
|
15
|
|
12011
|
use Path::Tiny; |
|
|
15
|
|
|
|
|
217616
|
|
|
|
15
|
|
|
|
|
930
|
|
|
14
|
15
|
|
|
15
|
|
9896
|
use Git::Repository 'GitHooks'; |
|
|
15
|
|
|
|
|
710574
|
|
|
|
15
|
|
|
|
|
73
|
|
|
15
|
15
|
|
|
15
|
|
14590
|
use Test::More; |
|
|
15
|
|
|
|
|
857569
|
|
|
|
15
|
|
|
|
|
218
|
|
|
16
|
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
our @EXPORT_OK = qw/ |
|
18
|
|
|
|
|
|
|
install_hooks |
|
19
|
|
|
|
|
|
|
new_commit |
|
20
|
|
|
|
|
|
|
newdir |
|
21
|
|
|
|
|
|
|
new_repos |
|
22
|
|
|
|
|
|
|
test_command |
|
23
|
|
|
|
|
|
|
test_nok |
|
24
|
|
|
|
|
|
|
test_nok_match |
|
25
|
|
|
|
|
|
|
test_ok |
|
26
|
|
|
|
|
|
|
test_ok_match |
|
27
|
|
|
|
|
|
|
/; |
|
28
|
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
our %EXPORT_TAGS = ( |
|
30
|
|
|
|
|
|
|
all => \@EXPORT_OK |
|
31
|
|
|
|
|
|
|
); |
|
32
|
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
|
# Make sure the git messages come in English. (LC_ALL) |
|
34
|
|
|
|
|
|
|
# Eliminate the effects of system wide (GIT_CONFIG_NOSYSTEM) |
|
35
|
|
|
|
|
|
|
# and global configuration (XDG_CONFIG_HOME and HOME). |
|
36
|
|
|
|
|
|
|
# https://metacpan.org/dist/Git-Repository/view/lib/Git/Repository/Tutorial.pod#Ignore-the-system-and-global-configuration-files |
|
37
|
|
|
|
|
|
|
my %git_test_env = ( |
|
38
|
|
|
|
|
|
|
LC_ALL => 'C', |
|
39
|
|
|
|
|
|
|
GIT_CONFIG_NOSYSTEM => 1, |
|
40
|
|
|
|
|
|
|
XDG_CONFIG_HOME => undef, |
|
41
|
|
|
|
|
|
|
HOME => undef, |
|
42
|
|
|
|
|
|
|
); |
|
43
|
|
|
|
|
|
|
|
|
44
|
|
|
|
|
|
|
my $cwd = Path::Tiny->cwd; |
|
45
|
|
|
|
|
|
|
|
|
46
|
|
|
|
|
|
|
# It's better to perform all tests in a temporary directory because |
|
47
|
|
|
|
|
|
|
# otherwise the author runs the risk of messing with its local |
|
48
|
|
|
|
|
|
|
# Git::Hooks git repository. |
|
49
|
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
my $T = Path::Tiny->tempdir( |
|
51
|
|
|
|
|
|
|
TEMPLATE => 'githooks.XXXXX', |
|
52
|
|
|
|
|
|
|
TMPDIR => 1, |
|
53
|
|
|
|
|
|
|
CLEANUP => exists $ENV{REPO_CLEANUP} ? $ENV{REPO_CLEANUP} : 1, |
|
54
|
|
|
|
|
|
|
); |
|
55
|
|
|
|
|
|
|
|
|
56
|
|
|
|
|
|
|
chdir $T or croak "Can't chdir $T: $!"; |
|
57
|
14
|
|
|
14
|
|
117678
|
END { chdir '/' } |
|
58
|
|
|
|
|
|
|
|
|
59
|
|
|
|
|
|
|
my $tmpldir = $T->child('templates'); |
|
60
|
|
|
|
|
|
|
mkdir $tmpldir, 0777 or BAIL_OUT("can't mkdir $tmpldir: $!"); |
|
61
|
|
|
|
|
|
|
{ |
|
62
|
|
|
|
|
|
|
my $hooksdir = $tmpldir->child('hooks'); |
|
63
|
|
|
|
|
|
|
mkdir $hooksdir, 0777 or BAIL_OUT("can't mkdir $hooksdir: $!"); |
|
64
|
|
|
|
|
|
|
} |
|
65
|
|
|
|
|
|
|
|
|
66
|
|
|
|
|
|
|
my $git_version = eval { Git::Repository->version } || 'unknown'; |
|
67
|
|
|
|
|
|
|
|
|
68
|
|
|
|
|
|
|
sub newdir { |
|
69
|
0
|
|
|
0
|
0
|
0
|
my $num = 1 + Test::Builder->new()->current_test(); |
|
70
|
0
|
|
|
|
|
0
|
my $dir = $T->child($num); |
|
71
|
0
|
|
|
|
|
0
|
mkdir $dir; |
|
72
|
0
|
|
|
|
|
0
|
return $dir; |
|
73
|
|
|
|
|
|
|
} |
|
74
|
|
|
|
|
|
|
|
|
75
|
|
|
|
|
|
|
sub install_hooks { |
|
76
|
32
|
|
|
32
|
0
|
126767
|
my ($git, $extra_perl, @hooks) = @_; |
|
77
|
32
|
|
|
|
|
479
|
my $hooks_dir = path($git->git_dir())->child('hooks'); |
|
78
|
32
|
|
|
|
|
5668
|
my $hook_pl = $hooks_dir->child('hook.pl'); |
|
79
|
|
|
|
|
|
|
{ |
|
80
|
|
|
|
|
|
|
## no critic (RequireBriefOpen) |
|
81
|
32
|
50
|
|
|
|
1390
|
open my $fh, '>', $hook_pl or BAIL_OUT("Can't create $hook_pl: $!"); |
|
|
32
|
|
|
|
|
838
|
|
|
82
|
32
|
50
|
|
|
|
3716
|
state $debug = $ENV{DBG} ? '-d' : ''; |
|
83
|
32
|
|
|
|
|
193
|
state $bliblib = $cwd->child('blib', 'lib'); |
|
84
|
32
|
|
|
|
|
3888
|
print $fh <<"EOS"; |
|
85
|
|
|
|
|
|
|
#!$Config{perlpath} $debug |
|
86
|
|
|
|
|
|
|
use strict; |
|
87
|
|
|
|
|
|
|
use warnings; |
|
88
|
|
|
|
|
|
|
use lib '$bliblib'; |
|
89
|
|
|
|
|
|
|
EOS |
|
90
|
|
|
|
|
|
|
|
|
91
|
32
|
50
|
|
|
|
718
|
state $pathsep = $^O eq 'MSWin32' ? ';' : ':'; |
|
92
|
32
|
50
|
33
|
|
|
487
|
if (defined $ENV{PERL5LIB} and length $ENV{PERL5LIB}) { |
|
93
|
32
|
|
|
|
|
901
|
foreach my $path (reverse split "$pathsep", $ENV{PERL5LIB}) { |
|
94
|
64
|
50
|
|
|
|
364
|
say $fh "use lib '$path';" if $path; |
|
95
|
|
|
|
|
|
|
} |
|
96
|
|
|
|
|
|
|
} |
|
97
|
|
|
|
|
|
|
|
|
98
|
32
|
|
|
|
|
124
|
print $fh <<'EOS'; |
|
99
|
|
|
|
|
|
|
use Git::Hooks; |
|
100
|
|
|
|
|
|
|
EOS |
|
101
|
|
|
|
|
|
|
|
|
102
|
32
|
100
|
|
|
|
167
|
print $fh $extra_perl if defined $extra_perl; |
|
103
|
|
|
|
|
|
|
|
|
104
|
|
|
|
|
|
|
# Not all hooks defined the GIT_DIR environment variable |
|
105
|
|
|
|
|
|
|
# (e.g., pre-rebase doesn't). |
|
106
|
32
|
|
|
|
|
108
|
print $fh <<'EOS'; |
|
107
|
|
|
|
|
|
|
$ENV{GIT_DIR} = '.git' unless exists $ENV{GIT_DIR}; |
|
108
|
|
|
|
|
|
|
$ENV{GIT_CONFIG} = "$ENV{GIT_DIR}/config"; |
|
109
|
|
|
|
|
|
|
EOS |
|
110
|
|
|
|
|
|
|
|
|
111
|
|
|
|
|
|
|
# Hooks on Windows are invoked indirectly. |
|
112
|
32
|
50
|
|
|
|
213
|
if ($^O eq 'MSWin32') { |
|
113
|
0
|
|
|
|
|
0
|
print $fh <<'EOS'; |
|
114
|
|
|
|
|
|
|
my $hook = shift; |
|
115
|
|
|
|
|
|
|
run_hook($hook, @ARGV); |
|
116
|
|
|
|
|
|
|
EOS |
|
117
|
|
|
|
|
|
|
} else { |
|
118
|
32
|
|
|
|
|
1622
|
print $fh <<'EOS'; |
|
119
|
|
|
|
|
|
|
run_hook($0, @ARGV); |
|
120
|
|
|
|
|
|
|
EOS |
|
121
|
|
|
|
|
|
|
} |
|
122
|
|
|
|
|
|
|
} |
|
123
|
32
|
|
|
|
|
319
|
chmod 0755 => $hook_pl; |
|
124
|
|
|
|
|
|
|
|
|
125
|
32
|
100
|
|
|
|
1017
|
@hooks = qw/ applypatch-msg pre-applypatch post-applypatch |
|
126
|
|
|
|
|
|
|
pre-commit prepare-commit-msg commit-msg |
|
127
|
|
|
|
|
|
|
post-commit pre-rebasen post-checkout post-merge |
|
128
|
|
|
|
|
|
|
pre-push pre-receive update post-receive post-update |
|
129
|
|
|
|
|
|
|
push-to-checkout pre-auto-gc post-rewrite |
|
130
|
|
|
|
|
|
|
/ unless @hooks; |
|
131
|
|
|
|
|
|
|
|
|
132
|
32
|
|
|
|
|
153
|
foreach my $hook (@hooks) { |
|
133
|
77
|
|
|
|
|
2423
|
my $hookfile = $hooks_dir->child($hook); |
|
134
|
77
|
50
|
|
|
|
3765
|
if ($^O eq 'MSWin32') { |
|
135
|
0
|
|
|
|
|
0
|
(my $perl = $^X) =~ tr:\\:/:; |
|
136
|
0
|
|
|
|
|
0
|
$hook_pl =~ tr:\\:/:; |
|
137
|
0
|
0
|
|
|
|
0
|
my $d = $ENV{DBG} ? '-d' : ''; |
|
138
|
0
|
|
|
|
|
0
|
my $script = <<"EOS"; |
|
139
|
|
|
|
|
|
|
#!/bin/sh |
|
140
|
|
|
|
|
|
|
$perl $d $hook_pl $hook \"\$@\" |
|
141
|
|
|
|
|
|
|
EOS |
|
142
|
0
|
0
|
|
|
|
0
|
path($hookfile)->spew($script) |
|
143
|
|
|
|
|
|
|
or BAIL_OUT("can't path('$hookfile')->spew('$script')\n"); |
|
144
|
0
|
|
|
|
|
0
|
chmod 0755 => $hookfile; |
|
145
|
|
|
|
|
|
|
} else { |
|
146
|
77
|
|
|
|
|
424
|
$hookfile->remove; # in case we're replacing the hooks |
|
147
|
77
|
50
|
|
|
|
2832
|
symlink 'hook.pl', $hookfile |
|
148
|
|
|
|
|
|
|
or BAIL_OUT("can't symlink '$hooks_dir', '$hook': $!"); |
|
149
|
|
|
|
|
|
|
} |
|
150
|
|
|
|
|
|
|
} |
|
151
|
32
|
|
|
|
|
1905
|
return; |
|
152
|
|
|
|
|
|
|
} |
|
153
|
|
|
|
|
|
|
|
|
154
|
|
|
|
|
|
|
sub new_repos { |
|
155
|
22
|
|
|
22
|
0
|
134373
|
my $repodir = $T->child('repo'); |
|
156
|
22
|
|
|
|
|
3197
|
my $filename = $repodir->child('file.txt'); |
|
157
|
22
|
|
|
|
|
975
|
my $clonedir = $T->child('clone'); |
|
158
|
|
|
|
|
|
|
|
|
159
|
|
|
|
|
|
|
# Remove the directories recursively to create new ones. |
|
160
|
22
|
|
|
|
|
1303
|
$repodir->remove_tree({safe => 0}); |
|
161
|
22
|
|
|
|
|
76294
|
$clonedir->remove_tree({safe => 0}); |
|
162
|
|
|
|
|
|
|
|
|
163
|
22
|
50
|
|
|
|
15954
|
mkdir $repodir, 0777 or BAIL_OUT("can't mkdir $repodir: $!"); |
|
164
|
|
|
|
|
|
|
{ |
|
165
|
22
|
50
|
|
|
|
2590
|
open my $fh, '>', $filename or croak BAIL_OUT("can't open $filename: $!"); |
|
|
22
|
|
|
|
|
344
|
|
|
166
|
22
|
|
|
|
|
1941
|
say $fh "first line"; |
|
167
|
22
|
|
|
|
|
3143
|
close $fh; |
|
168
|
|
|
|
|
|
|
} |
|
169
|
|
|
|
|
|
|
|
|
170
|
22
|
|
|
|
|
207
|
my $stderr = $T->child('stderr'); |
|
171
|
|
|
|
|
|
|
|
|
172
|
22
|
|
|
|
|
1262
|
my @result = eval { |
|
173
|
22
|
|
|
|
|
145
|
Git::Repository->run(qw/-c init.defaultBranch=master init -q/, |
|
174
|
|
|
|
|
|
|
"--template=$tmpldir", $repodir, { env => \%git_test_env }); |
|
175
|
|
|
|
|
|
|
|
|
176
|
22
|
|
|
|
|
444801
|
my $repo = Git::Repository->new(work_tree => $repodir, |
|
177
|
|
|
|
|
|
|
{ env => \%git_test_env }); |
|
178
|
|
|
|
|
|
|
|
|
179
|
22
|
|
|
|
|
1018922
|
$repo->run(qw/config user.email myself@example.com/); |
|
180
|
22
|
|
|
|
|
313458
|
$repo->run(qw/config user.name/, 'My Self'); |
|
181
|
|
|
|
|
|
|
|
|
182
|
|
|
|
|
|
|
{ |
|
183
|
22
|
|
|
|
|
293929
|
my $cmd = Git::Repository->command( |
|
|
22
|
|
|
|
|
776
|
|
|
184
|
|
|
|
|
|
|
qw/clone -q --bare --no-hardlinks/, "--template=$tmpldir", $repodir, $clonedir, |
|
185
|
|
|
|
|
|
|
); |
|
186
|
|
|
|
|
|
|
|
|
187
|
22
|
|
|
|
|
250161
|
my $my_stderr = $cmd->stderr; |
|
188
|
|
|
|
|
|
|
|
|
189
|
22
|
50
|
|
|
|
1107
|
open my $err_h, '>', $T->child('stderr') |
|
190
|
0
|
|
|
|
|
0
|
or croak "Can't open '@{[$T->child('stderr')]}' for writing: $!\n"; |
|
191
|
22
|
|
|
|
|
201951
|
while (<$my_stderr>) { |
|
192
|
22
|
|
|
|
|
1067
|
$err_h->print($_); |
|
193
|
|
|
|
|
|
|
} |
|
194
|
22
|
|
|
|
|
26865
|
close $err_h; |
|
195
|
|
|
|
|
|
|
|
|
196
|
22
|
|
|
|
|
492
|
$cmd->close(); |
|
197
|
22
|
50
|
|
|
|
6222
|
croak "Can't git-clone $repodir into $clonedir" unless $cmd->exit() == 0; |
|
198
|
|
|
|
|
|
|
} |
|
199
|
|
|
|
|
|
|
|
|
200
|
22
|
|
|
|
|
2301
|
my $clone = Git::Repository->new(git_dir => $clonedir); |
|
201
|
|
|
|
|
|
|
|
|
202
|
22
|
|
|
|
|
751387
|
$repo->run(qw/remote add clone/, $clonedir); |
|
203
|
|
|
|
|
|
|
|
|
204
|
22
|
|
|
|
|
338614
|
return ($repo, $filename, $clone, $T); |
|
205
|
|
|
|
|
|
|
}; |
|
206
|
|
|
|
|
|
|
|
|
207
|
22
|
50
|
|
|
|
285
|
if (my $E = $@) { |
|
208
|
0
|
|
|
|
|
0
|
my $exception = "$E"; # stringify it |
|
209
|
0
|
0
|
|
|
|
0
|
if (-s $stderr) { |
|
210
|
0
|
0
|
|
|
|
0
|
open my $err_h, '<', $stderr |
|
211
|
|
|
|
|
|
|
or croak "Can't open '$stderr' for reading: $!\n"; |
|
212
|
0
|
|
|
|
|
0
|
local $/ = undef; # slurp mode |
|
213
|
0
|
|
|
|
|
0
|
$exception .= 'STDERR='; |
|
214
|
0
|
|
|
|
|
0
|
$exception .= <$err_h>; |
|
215
|
0
|
|
|
|
|
0
|
close $err_h; |
|
216
|
|
|
|
|
|
|
} |
|
217
|
|
|
|
|
|
|
|
|
218
|
|
|
|
|
|
|
# The BAIL_OUT function can't show a message with newlines |
|
219
|
|
|
|
|
|
|
# inside. So, we have to make sure to get rid of any. |
|
220
|
0
|
|
|
|
|
0
|
$exception =~ s/\n/;/g; |
|
221
|
0
|
|
|
|
|
0
|
local $, = ':'; |
|
222
|
0
|
|
|
|
|
0
|
BAIL_OUT("Error setting up repos for test: Exception='$exception'; CWD=$T; git-version=$git_version; \@INC=(@INC).\n"); |
|
223
|
0
|
|
|
|
|
0
|
@result = (); |
|
224
|
|
|
|
|
|
|
}; |
|
225
|
|
|
|
|
|
|
|
|
226
|
22
|
|
|
|
|
874
|
return @result; |
|
227
|
|
|
|
|
|
|
} |
|
228
|
|
|
|
|
|
|
|
|
229
|
|
|
|
|
|
|
sub new_commit { |
|
230
|
13
|
|
|
13
|
0
|
516177
|
my ($git, $file, $msg) = @_; |
|
231
|
|
|
|
|
|
|
|
|
232
|
13
|
|
50
|
|
|
309
|
$file->append($msg || 'new commit'); |
|
233
|
|
|
|
|
|
|
|
|
234
|
13
|
|
|
|
|
5401
|
$git->run(add => $file); |
|
235
|
13
|
|
50
|
|
|
196311
|
$git->run(qw/commit -q -m/, $msg || 'commit'); |
|
236
|
|
|
|
|
|
|
|
|
237
|
13
|
|
|
|
|
1288124
|
return; |
|
238
|
|
|
|
|
|
|
} |
|
239
|
|
|
|
|
|
|
|
|
240
|
|
|
|
|
|
|
|
|
241
|
|
|
|
|
|
|
# Executes a git command with arguments and return a four-elements |
|
242
|
|
|
|
|
|
|
# list containing: (a) a boolean indication of success, (b) the exit |
|
243
|
|
|
|
|
|
|
# code, (c) the command's STDOUT, and (d) the command's STDERR. |
|
244
|
|
|
|
|
|
|
sub test_command { |
|
245
|
202
|
|
|
202
|
0
|
749722
|
my ($git, $command, @args) = @_; |
|
246
|
|
|
|
|
|
|
|
|
247
|
202
|
|
|
|
|
1937
|
my $cmd = $git->command($command, @args); |
|
248
|
|
|
|
|
|
|
|
|
249
|
202
|
|
|
|
|
2443928
|
my $stdout = do { local $/ = undef; readline($cmd->stdout); }; |
|
|
202
|
|
|
|
|
1426
|
|
|
|
202
|
|
|
|
|
2647
|
|
|
250
|
202
|
|
|
|
|
52534325
|
my $stderr = do { local $/ = undef; readline($cmd->stderr); }; |
|
|
202
|
|
|
|
|
1978
|
|
|
|
202
|
|
|
|
|
4020
|
|
|
251
|
|
|
|
|
|
|
|
|
252
|
202
|
|
|
|
|
13667
|
$cmd->close; |
|
253
|
|
|
|
|
|
|
|
|
254
|
202
|
|
|
|
|
65628
|
return ($cmd->exit() == 0, $cmd->exit(), $stdout, $stderr); |
|
255
|
|
|
|
|
|
|
} |
|
256
|
|
|
|
|
|
|
|
|
257
|
|
|
|
|
|
|
sub test_ok { |
|
258
|
103
|
|
|
103
|
0
|
4611683
|
my ($testname, @args) = @_; |
|
259
|
103
|
|
|
|
|
1040
|
my ($ok, $exit, $stdout, $stderr) = test_command(@args); |
|
260
|
103
|
50
|
|
|
|
14754
|
if ($ok) { |
|
261
|
103
|
|
|
|
|
2244
|
pass($testname); |
|
262
|
|
|
|
|
|
|
} else { |
|
263
|
0
|
|
|
|
|
0
|
fail($testname); |
|
264
|
0
|
|
|
|
|
0
|
diag(" exit=$exit\n stdout=$stdout\n stderr=$stderr\n git-version=$git_version\n"); |
|
265
|
|
|
|
|
|
|
} |
|
266
|
103
|
|
|
|
|
128217
|
return $ok; |
|
267
|
|
|
|
|
|
|
} |
|
268
|
|
|
|
|
|
|
|
|
269
|
|
|
|
|
|
|
sub test_ok_match { |
|
270
|
3
|
|
|
3
|
0
|
49990
|
my ($testname, $regex, @args) = @_; |
|
271
|
3
|
|
|
|
|
38
|
my ($ok, $exit, $stdout, $stderr) = test_command(@args); |
|
272
|
3
|
50
|
|
|
|
346
|
if ($ok) { |
|
273
|
3
|
50
|
66
|
|
|
111
|
if ($stdout =~ $regex || $stderr =~ $regex) { |
|
274
|
3
|
|
|
|
|
58
|
pass($testname); |
|
275
|
|
|
|
|
|
|
} else { |
|
276
|
0
|
|
|
|
|
0
|
fail($testname); |
|
277
|
0
|
|
|
|
|
0
|
diag(" did not match regex ($regex)\n stdout=$stdout\n stderr=$stderr\n git-version=$git_version\n"); |
|
278
|
|
|
|
|
|
|
} |
|
279
|
|
|
|
|
|
|
} else { |
|
280
|
0
|
|
|
|
|
0
|
fail($testname); |
|
281
|
0
|
|
|
|
|
0
|
diag(" exit=$exit\n stdout=$stdout\n stderr=$stderr\n git-version=$git_version\n"); |
|
282
|
|
|
|
|
|
|
} |
|
283
|
3
|
|
|
|
|
3124
|
return $ok; |
|
284
|
|
|
|
|
|
|
} |
|
285
|
|
|
|
|
|
|
|
|
286
|
|
|
|
|
|
|
sub test_nok { |
|
287
|
7
|
|
|
7
|
0
|
177666
|
my ($testname, @args) = @_; |
|
288
|
7
|
|
|
|
|
89
|
my ($ok, $exit, $stdout, $stderr) = test_command(@args); |
|
289
|
7
|
50
|
|
|
|
806
|
if ($ok) { |
|
290
|
0
|
|
|
|
|
0
|
fail($testname); |
|
291
|
0
|
|
|
|
|
0
|
diag(" succeeded without intention\n stdout=$stdout\n stderr=$stderr\n git-version=$git_version\n"); |
|
292
|
|
|
|
|
|
|
} else { |
|
293
|
7
|
|
|
|
|
145
|
pass($testname); |
|
294
|
|
|
|
|
|
|
} |
|
295
|
7
|
|
|
|
|
7379
|
return !$ok; |
|
296
|
|
|
|
|
|
|
} |
|
297
|
|
|
|
|
|
|
|
|
298
|
|
|
|
|
|
|
sub test_nok_match { |
|
299
|
78
|
|
|
78
|
0
|
4058085
|
my ($testname, $regex, @args) = @_; |
|
300
|
78
|
|
|
|
|
1028
|
my ($ok, $exit, $stdout, $stderr) = test_command(@args); |
|
301
|
78
|
50
|
33
|
|
|
15501
|
if ($ok) { |
|
|
|
50
|
|
|
|
|
|
|
302
|
0
|
|
|
|
|
0
|
fail($testname); |
|
303
|
0
|
|
|
|
|
0
|
diag(" succeeded without intention\n exit=$exit\n stdout=$stdout\n stderr=$stderr\n git-version=$git_version\n"); |
|
304
|
0
|
|
|
|
|
0
|
return 0; |
|
305
|
|
|
|
|
|
|
} elsif ($stdout =~ $regex || $stderr =~ $regex) { |
|
306
|
78
|
|
|
|
|
1861
|
pass($testname); |
|
307
|
78
|
|
|
|
|
96196
|
return 1; |
|
308
|
|
|
|
|
|
|
} else { |
|
309
|
0
|
|
|
|
|
0
|
fail($testname); |
|
310
|
0
|
|
|
|
|
0
|
diag(" did not match regex ($regex)\n exit=$exit\n stdout=$stdout\n stderr=$stderr\n git-version=$git_version\n"); |
|
311
|
0
|
|
|
|
|
0
|
return 0; |
|
312
|
|
|
|
|
|
|
} |
|
313
|
|
|
|
|
|
|
} |
|
314
|
|
|
|
|
|
|
|
|
315
|
|
|
|
|
|
|
1; |
|
316
|
|
|
|
|
|
|
|
|
317
|
|
|
|
|
|
|
__END__ |