summaryrefslogtreecommitdiff
path: root/t/30utils-call.t
diff options
context:
space:
mode:
Diffstat (limited to 't/30utils-call.t')
-rw-r--r--t/30utils-call.t44
1 files changed, 44 insertions, 0 deletions
diff --git a/t/30utils-call.t b/t/30utils-call.t
new file mode 100644
index 0000000..221d302
--- /dev/null
+++ b/t/30utils-call.t
@@ -0,0 +1,44 @@
+#!/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;