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
|
#!/usr/bin/perl
use v5.14;
use warnings;
use Test::More;
use Future;
use Event::Distributor::Query;
{
my $query = Event::Distributor::Query->new;
$query->subscribe( sub {
Future->done( "The result", "here" );
});
my @result = $query->fire->get;
is_deeply( \@result, [ "The result", "here" ], 'result of query event' );
}
# two sync subscribers
{
my $query = Event::Distributor::Query->new;
my $called;
$query->subscribe( sub { $called++; Future->done( 123 ) } );
$query->subscribe( sub { $called++; Future->done( 456 ) } );
my $result = $query->fire->get;
is( $result, 123, 'query event takes first result' );
is( $called, 1, 'query event does not invoke later sync subscribers' );
}
# no subscribers
{
my $query = Event::Distributor::Query->new;
my $result = $query->fire->get;
is( $result, undef, 'query yields undef with no subscribers' );
}
# empty result counts as failure
{
my $query = Event::Distributor::Query->new;
$query->subscribe( sub { Future->done() } );
$query->subscribe( sub { Future->done( "second" ) } );
is( scalar $query->fire->get, "second", 'query considers empty results failures' );
}
# all empty results yields empty result
{
my $query = Event::Distributor::Query->new;
$query->subscribe( sub { Future->done() } );
my $f = $query->fire;
ok( !$f->is_failed, 'query yielding empty result does not fail' );
is_deeply( [ $f->get ], [], 'query yields empty result' );
}
done_testing;
|