AnyEvent-XSPromises
view release on metacpan or search on metacpan
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 )