Evo
view release on metacpan or search on metacpan
t/evo/promise/promise/driver.t view on Meta::CPAN
package main;
use Evo '-Promise::Util *; Test::More';
{
package MyTestPromise;
use Evo -Class;
with 'Evo::Promise::Role';
sub postpone ($self, $code) {
}
}
sub p { MyTestPromise->new(@_) }
SETTLED: {
ok !p()->d_settled;
ok p->d_fulfill(0)->d_settled;
ok p->d_reject(0)->d_settled;
my $p = p();
$p->d_lock_in(p());
ok !$p->d_settled;
}
LOCK_IN: {
my ($ch, $p) = (p(), p());
$ch->d_lock_in($p);
ok is_locked_in($p, $ch);
ok $ch->d_locked;
}
REJECT: {
my $p = p();
$p->d_reject(0);
ok is_rejected_with(0, $p);
}
FULFILL: {
my $p = p();
$p->d_fulfill(0);
ok is_fulfilled_with(0, $p);
}
no warnings 'once', 'redefine';
CONTINUE: {
my $called;
local *MyTestPromise::d_traverse = sub { $called++; };
REJECT_CONTINUE: {
$called = 0;
my $p = p();
$p->d_reject_continue('REASON');
ok is_rejected_with('REASON', $p);
is $called, 1;
}
RESOLVE_CONTINUE_SETTLED: {
$called = 0;
local *MyTestPromise::d_resolve = sub { };
local *MyTestPromise::d_settled = sub {1};
my $p = p();
$p->d_resolve_continue('V');
is $called, 1;
}
RESOLVE_CONTINUE_PENDING: {
$called = 0;
local *MyTestPromise::d_resolve = sub { };
local *MyTestPromise::d_settled = sub { };
my $p = p();
$p->d_resolve_continue('V');
is $called, 0;
}
}
done_testing;
( run in 2.754 seconds using v1.01-cache-2.11-cpan-8dfa8b56332 )