File: XSPromises.t

package info (click to toggle)
libanyevent-xspromises-perl 0.005-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 320 kB
  • sloc: perl: 96; makefile: 3
file content (95 lines) | stat: -rw-r--r-- 1,880 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
use 5.010;
use strict;
use warnings;

use Test::More;
use AnyEvent;
use AnyEvent::XSPromises qw/deferred resolved rejected collect/;

my $cv= AE::cv;

my $deferred= deferred;
my $promise= $deferred->promise;
is($deferred->is_in_progress, !!1);
$deferred->resolve(1, 2, 3);
is($deferred->is_in_progress, !!0);
my ($next_ok, $any, $finally_called, $reached_end);
for (1..1) {
    my $final= $promise->then(
        sub {
            ok(1);
            $any= 1;
            return (123, 456);
        },
        sub {
            fail;
        }
    )->finally(sub {
        $finally_called= 1;
        654;
    })->then(sub {
        is($_[0], 123);
        is($_[1], 456);
        die "Does this work?";
    })->then(
        sub {
            fail;
        },
        sub {
            ok(($_[0] =~ /Does this/) ? 1 : 0);
            next;
        }
    )->then(
        sub {
            fail;
        },
        sub {
            ok(($_[0] =~ /outside a loop block/) ? 1 : 0);
            $next_ok= 1;
        }
    )->catch(sub {
        fail;
    })->then(sub {
        Fakepromise->new
    })->then(
        sub {
            is($_[0], 500);
            $_= 5;
        }, sub {
            fail($_[0]);
        }
    )->then(sub {
        is($_, undef);
        die "test catch";
    })->then(sub {
        fail;
    })->catch(sub {
        collect(resolved(1), resolved(2));
    })->then(sub {
        is_deeply(\@_, [ [1], [2] ]);
        collect(resolved(2), rejected(5));
    })->then(sub {
        fail;
    }, sub {
        is($_[0], 5);
    })->then(sub {
        $reached_end= 1;
    })->then($cv, sub {
        diag $_[0]; fail;
        $cv->();
    })
}
$cv->recv;
ok($any);
ok($next_ok);
ok($reached_end);
ok($finally_called);

done_testing;

package Fakepromise;
sub new { bless {}, 'Fakepromise' }
sub then {
    my ($self, $resolve)= @_;
    $resolve->(500);
}