The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use strict;
use warnings;
use Test::More;
use AnyEvent::Multilog;
use Directory::Scratch;
use t::lib::multilog qw/check_multilog/;

my $path = check_multilog 0;
my $tmp = Directory::Scratch->new;
my $logfile = $tmp->base->subdir('foo')->absolute->stringify;

my $done = AnyEvent->condvar;
my $log = AnyEvent::Multilog->new(
    multilog => $path,
    script   => [qw/t +*/, $logfile],
    on_exit  => sub { $done->send(\@_) },
);

isa_ok $log, 'AnyEvent::Multilog';

$log->start;
$log->push_write('hello there') for 1..100;
$log->run->delegate('input_handle')->handle->{wbuf} = "<extra1>\n";
$log->push_write('end');
# XXX: this may be timing-dependent if there is a write watcher around
$log->run->delegate('input_handle')->handle->{wbuf} = 'extra';
$log->push_shutdown;

my ($success, $msg, $status) = @{$done->recv || []};
ok $success, 'exited ok 1';
like $msg, qr/leftover/, 'got advice';

ok $tmp->exists('foo/current'), 'has log';

ok $log->has_leftover_data, 'has some leftover data';
is $log->leftover_data, 'extra', 'got extra data';

done_testing;