#!/usr/bin/perl
use strict;
use warnings;
use Test::More;
use Test::Identity;
use Future;
use Future::Utils qw( call );
# call returns future
{
my $ret_f;
my $f = call {
return $ret_f = Future->new;
};
identical( $f, $ret_f, 'call() returns future returned from its code' );
$f->cancel;
}
# call returns immediate failure on die
{
my $f = call {
die "argh!\n";
};
ok( $f->is_ready, 'call() returns immediate future on die' );
is( scalar $f->failure, "argh!\n", 'failure from immediate future on die' );
}
# call returns immediate failure on non-Future return
{
my $f = call {
return "non-future";
};
ok( $f->is_ready, 'call() returns immediate future on non-future return' );
like( scalar $f->failure, qr/^Expected __ANON__.*\(\S+ line \d+\) to return a Future$/,
'failure from immediate future on non-future return' );
}
done_testing;