AnyEvent-Promises

 view release on metacpan or  search on metacpan

t/04-merge.t  view on Meta::CPAN

    my @progress;
    my $merged = merge_promises(@p);
    for my $i ( 0 .. $#p ) {
        $p[$i]->then( sub { push @progress, $i => $merged->state } );
    }
    $merged->then( sub { push @progress, [@_]; } );

    run_event_loop {
        my $cv = shift;
        $d[0]->resolve( 'd0', 'dd0' );
        $d[2]->resolve('d2');
        $d[1]->resolve('d1');
        $merged->then( ( sub { $cv->send } ) x 2 );
    };

    is_deeply(
        \@progress,
        [   0 => 'pending',
            2 => 'pending',
            1 => 'fulfilled',
            [ 'd0', 'd1', 'd2' ]
        ]
    );
};

subtest merge_some_rejected => sub {
    my @d = map { deferred() } 1 .. 3;
    my @p = map { $_->promise } @d;

    my @progress;
    my $merged = merge_promises(@p);
    for my $i ( 0 .. $#p ) {
        $p[$i]->then( ( sub { push @progress, $i => $merged->state } ) x 2 );
    }
    $merged->then( undef, sub { push @progress, [@_]; } );

    run_event_loop {
        my $cv = shift;
        $d[0]->resolve();
        $d[2]->reject('oops');
        $d[1]->reject('another fail');
        $p[1]->then( undef, sub { $cv->send } );
    };

    is_deeply( \@progress,
        [ 0 => 'pending', 2 => 'rejected', 1 => 'rejected', ['oops'], ] );
    $merged->then( sub { push @progress, [@_]; } );
};

subtest merge_empty => sub {
    my $values;
    run_event_loop {
        my $cv = shift;
        merge_promises()->then(sub { $values = [@_]; $cv->send});
    };
    is_deeply($values, [], 'merge_promises() returns resolved promise');
};

done_testing();

# vim: expandtab:shiftwidth=4:tabstop=4:softtabstop=0:textwidth=78:



( run in 1.153 second using v1.01-cache-2.11-cpan-5b529ec07f3 )