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 )