]> Sergey Matveev's repositories - public-inbox.git/blobdiff - t/spawn.t
ds: introduce awaitpid, switch ProcessPipe users
[public-inbox.git] / t / spawn.t
index 5fc99a2a101c8c2c83466e515a84bba471b9546e..c22cfcfcef1234a62f84ceb213d5fcf547d47020 100644 (file)
--- 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');
 }