1#!/usr/bin/perl
2
3use v5.10;
4use strict;
5use warnings;
6
7use Test::More;
8use Test::Identity;
9
10use Future;
11use Future::Utils qw( call );
12
13# call returns future
14{
15   my $ret_f;
16   my $f = call {
17      return $ret_f = Future->new;
18   };
19
20   identical( $f, $ret_f, 'call() returns future returned from its code' );
21   $f->cancel;
22}
23
24# call returns immediate failure on die
25{
26   my $f = call {
27      die "argh!\n";
28   };
29
30   ok( $f->is_ready, 'call() returns immediate future on die' );
31   is( scalar $f->failure, "argh!\n", 'failure from immediate future on die' );
32}
33
34# call returns immediate failure on non-Future return
35{
36   my $f = call {
37      return "non-future";
38   };
39
40   ok( $f->is_ready, 'call() returns immediate future on non-future return' );
41   like( scalar $f->failure, qr/^Expected __ANON__.*\(\S+ line \d+\) to return a Future$/,
42      'failure from immediate future on non-future return' );
43}
44
45done_testing;
46