1#!/usr/bin/perl 2 3use v5.10; 4use strict; 5use warnings; 6 7use Test::More; 8 9use Future; 10 11our $VAR = ""; 12# around Future::wrap_cb => sub { ... } 13{ 14 my $orig = Future->can( 'wrap_cb' ); 15 no warnings 'redefine'; 16 *Future::wrap_cb = sub { 17 my $cb = $orig->(@_); 18 my $saved_VAR = $VAR; 19 20 return sub { 21 local $VAR = $saved_VAR; 22 $cb->(@_); 23 }; 24 }; 25} 26 27# on_ready 28{ 29 my $result; 30 my $f = Future->new; 31 32 { 33 local $VAR = "inner"; 34 $f->on_ready( sub { $result = $VAR } ); 35 } 36 37 $f->done; 38 39 is( $result, "inner", 'on_ready wraps CB' ); 40} 41 42# on_done 43{ 44 my $result; 45 my $f = Future->new; 46 47 { 48 local $VAR = "inner"; 49 $f->on_done( sub { $result = $VAR } ); 50 } 51 52 $f->done; 53 54 is( $result, "inner", 'on_done wraps CB' ); 55} 56 57# on_fail 58{ 59 my $result; 60 my $f = Future->new; 61 62 { 63 local $VAR = "inner"; 64 $f->on_fail( sub { $result = $VAR } ); 65 } 66 67 $f->fail( "Failed" ); 68 69 is( $result, "inner", 'on_fail wraps CB' ); 70} 71 72# then 73{ 74 my $result; 75 my $f = Future->new; 76 77 my $f2; 78 { 79 local $VAR = "inner"; 80 $f2 = $f->then( sub { $result = $VAR; Future->done } ); 81 } 82 83 $f->done; 84 85 is( $result, "inner", 'then wraps CB' ); 86} 87 88# else 89{ 90 my $result; 91 my $f = Future->new; 92 93 my $f2; 94 { 95 local $VAR = "inner"; 96 $f2 = $f->else( sub { $result = $VAR; Future->done } ); 97 } 98 99 $f->fail( "Failed" ); 100 101 is( $result, "inner", 'else wraps CB' ); 102} 103 104# Other sequence methods all use the same ->_sequence so all should be fine 105 106done_testing; 107