AnyEvent-Promises
view release on metacpan or search on metacpan
t/02-then.t view on Meta::CPAN
};
subtest reject_handler_dies => sub {
my $d = deferred();
my $pp = $d->promise->then( undef, sub { die shift() . " - Oops\n" } );
run_event_loop {
my $cv = shift;
$d->reject("B");
$pp->then( sub { $cv->send }, sub { $cv->send } );
};
ok( $pp->is_rejected );
is_deeply( $pp->reason, "B - Oops\n" );
};
subtest fulfill_handler_returns_promise => sub {
my $d = deferred();
my $dd = deferred();
my @track;
my $pp
= $d->promise->then( sub { push @track, @_; return $dd->promise; } );
$d->promise->then( sub { push @track, $pp->state; } );
run_event_loop {
my $cv = shift;
$d->resolve("A");
$pp->then( sub { $cv->send }, sub { $cv->send } );
$dd->resolve('B');
};
ok( $pp->is_fulfilled );
is_deeply( \@track, [ 'A', 'pending' ] );
is( $dd->promise->value, 'B' );
is( $pp->value, 'B' );
};
subtest reject_handler_returns_promise => sub {
my $d = deferred();
my $dd = deferred();
my @track;
my $pp = $d->promise->then( undef,
sub { push @track, @_; return $dd->promise; } );
$d->promise->then( undef, sub { push @track, $pp->state; } );
run_event_loop {
my $cv = shift;
$d->reject("A");
$pp->then( sub { $cv->send }, sub { $cv->send } );
$dd->resolve('B');
};
ok( $pp->is_fulfilled );
is_deeply( \@track, [ 'A', 'pending' ] );
is( $dd->promise->value, 'B' );
is( $pp->value, 'B' );
};
done_testing();
# vim: expandtab:shiftwidth=4:tabstop=4:softtabstop=0:textwidth=78:
( run in 0.717 second using v1.01-cache-2.11-cpan-5b529ec07f3 )