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