AnyEvent-XSPromises

 view release on metacpan or  search on metacpan

t/aplus.t  view on Meta::CPAN

use 5.010;
use strict;
use warnings;

use Test::More;
use AnyEvent;
use AnyEvent::XSPromises qw/deferred resolved rejected collect/;

sub delayed {
    my ($seconds, $sub)= @_;
    my $timer; $timer= AE::timer $seconds, 0, sub {
        undef $timer;
        &$sub;
    };
}
sub expect_resolve {
    $_[0]->then(sub {
        1;
    }, sub {
        fail;
    });
}
sub expect_reject {
    $_[0]->then(sub {
        fail;
    }, sub {
        1;
    });
}

my %tests= (
    no_duplicate_invoke_callback => sub {
        my $all_good;
        resolved->then(sub {
            fail if $all_good;
            $all_good= 1;
        }, sub {
            fail;
        })->finally(sub {
            ok($all_good);
        });
    },
    cannot_resolve_and_reject => sub {
        my $d= deferred;
        $d->resolve;
        eval { $d->reject; fail; };
        expect_resolve($d->promise);
    },
    cannot_reject_and_resolve => sub {
        my $d= deferred;
        $d->reject;
        eval { $d->resolve; fail; };
        expect_reject($d->promise);
    },
    delayed_resolve_and_reject => sub {
        my $d= deferred;
        delayed(0.1, sub {
            $d->resolve;
            eval { $d->resolve; fail; };
            eval { $d->reject; fail; };
        });
        expect_resolve($d->promise);
    },
    rejected_state_must_not_change => sub {
        my $d= deferred;
        $d->reject;
        eval { $d->resolve; fail; };
        expect_reject($d->promise);
    },
    rejected_immediately => sub {
        expect_reject(rejected());
    },



( run in 0.616 second using v1.01-cache-2.11-cpan-acf6aa7dc9e )