1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
use 5.010;
use strict;
use warnings;
use Test::More;
use AnyEvent;
use AnyEvent::XSPromises qw/deferred resolved rejected collect/;
my $cv= AE::cv;
my $deferred= deferred;
my $promise= $deferred->promise;
is($deferred->is_in_progress, !!1);
$deferred->resolve(1, 2, 3);
is($deferred->is_in_progress, !!0);
my ($next_ok, $any, $finally_called, $reached_end);
for (1..1) {
my $final= $promise->then(
sub {
ok(1);
$any= 1;
return (123, 456);
},
sub {
fail;
}
)->finally(sub {
$finally_called= 1;
654;
})->then(sub {
is($_[0], 123);
is($_[1], 456);
die "Does this work?";
})->then(
sub {
fail;
},
sub {
ok(($_[0] =~ /Does this/) ? 1 : 0);
next;
}
)->then(
sub {
fail;
},
sub {
ok(($_[0] =~ /outside a loop block/) ? 1 : 0);
$next_ok= 1;
}
)->catch(sub {
fail;
})->then(sub {
Fakepromise->new
})->then(
sub {
is($_[0], 500);
$_= 5;
}, sub {
fail($_[0]);
}
)->then(sub {
is($_, undef);
die "test catch";
})->then(sub {
fail;
})->catch(sub {
collect(resolved(1), resolved(2));
})->then(sub {
is_deeply(\@_, [ [1], [2] ]);
collect(resolved(2), rejected(5));
})->then(sub {
fail;
}, sub {
is($_[0], 5);
})->then(sub {
$reached_end= 1;
})->then($cv, sub {
diag $_[0]; fail;
$cv->();
})
}
$cv->recv;
ok($any);
ok($next_ok);
ok($reached_end);
ok($finally_called);
done_testing;
package Fakepromise;
sub new { bless {}, 'Fakepromise' }
sub then {
my ($self, $resolve)= @_;
$resolve->(500);
}
|