AnyEvent-Promises

 view release on metacpan or  search on metacpan

t/03-make_promise.t  view on Meta::CPAN

use strict;
use warnings;

use Test::More;
use t::Utils;

BEGIN {
    use_ok( 'AnyEvent::Promises', 'make_promise', 'deferred' );
}

subtest make_promise_with_success => sub {
    run_event_loop(
        sub {
            my $cv = shift;
            my $p1 = make_promise('ok');
            my $p2 = make_promise( sub {'ok'} );
            $p1->then(
                sub {
                    ok( $p2->is_fulfilled,
                        'in next tick promise from code is fulfilled too' );
                }
            );
            ok( $p1->is_fulfilled,
                'promise created from value is fulfilled' );
            ok( $p2->is_pending,
                'promise from code is pending, code was not evaluated yet' );
            my $w; $w = AE::timer(0,0, sub {undef $w; $cv->send });
        }
    );
};

subtest make_promise_with_throw => sub {
    my @data;
    run_event_loop(
        sub {
            my $cv = shift;
            my $p = make_promise( sub {die "oops\n"} );
            ok( $p->is_pending,
                'promise from code is pending, code was not evaluated yet' );
            $p->then(sub {
                fail("promise is rejected");
            }, sub {
                is( shift(), "oops\n", "make_promise created a rejected response");
            })->then( sub { $cv->send;  });
        }
    );
};

done_testing();



( run in 2.465 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )