about summary refs log tree commit homepage
path: root/t/spawn.t
diff options
context:
space:
mode:
Diffstat (limited to 't/spawn.t')
-rw-r--r--t/spawn.t12
1 files changed, 8 insertions, 4 deletions
diff --git a/t/spawn.t b/t/spawn.t
index 5fc99a2a..c22cfcfc 100644
--- a/t/spawn.t
+++ b/t/spawn.t
@@ -140,13 +140,13 @@ EOF
 
 { # ->CLOSE vs ->DESTROY waitpid caller distinction
         my @c;
-        my $fh = popen_rd(['true'], undef, { cb => sub { @c = caller } });
+        my $fh = popen_rd(['true'], undef, { cb_arg => [sub { @c = caller }] });
         ok(close($fh), '->CLOSE fired and successful');
         ok(scalar(@c), 'callback fired by ->CLOSE');
         ok(grep(!m[/PublicInbox/DS\.pm\z], @c), 'callback not invoked by DS');
 
         @c = ();
-        $fh = popen_rd(['true'], undef, { cb => sub { @c = caller } });
+        $fh = popen_rd(['true'], undef, { cb_arg => [sub { @c = caller }] });
         undef $fh; # ->DESTROY
         ok(scalar(@c), 'callback fired by ->DESTROY');
         ok(grep(!m[/PublicInbox/ProcessPipe\.pm\z], @c),
@@ -156,8 +156,9 @@ EOF
 { # children don't wait on siblings
         use POSIX qw(_exit);
         pipe(my ($r, $w)) or BAIL_OUT $!;
-        my $cb = sub { warn "x=$$\n" };
-        my $fh = popen_rd(['cat'], undef, { 0 => $r, cb => $cb });
+        my @arg;
+        my $cb = [ sub { @arg = @_; warn "x=$$\n" }, 'hi' ];
+        my $fh = popen_rd(['cat'], undef, { 0 => $r, cb_arg => $cb });
         my $pp = tied *$fh;
         my $pid = fork // BAIL_OUT $!;
         local $SIG{__WARN__} = sub { _exit(1) };
@@ -173,6 +174,9 @@ EOF
         close $w;
         close $fh;
         is($?, 0, 'cat exited');
+        is(scalar(@arg), 2, 'callback got args');
+        is($arg[1], 'hi', 'passed arg');
+        like($arg[0], qr/\A\d+\z/, 'PID');
         is_deeply(\@w, [ "x=$$\n" ], 'callback fired from owner');
 }