diff options
Diffstat (limited to 't/53loop-extend.t')
-rw-r--r-- | t/53loop-extend.t | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/t/53loop-extend.t b/t/53loop-extend.t new file mode 100644 index 0000000..82e7088 --- /dev/null +++ b/t/53loop-extend.t @@ -0,0 +1,103 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use IO::Async::Test; + +use Test::More; +use Test::Identity; + +use IO::Async::Loop; + +my $loop = IO::Async::Loop->new_builtin; + +testing_loop( $loop ); + +# connect +{ + my %connectargs; + my $connect_future; + sub IO::Async::Loop::FOO_connect + { + my $self = shift; + %connectargs = @_; + + identical( $self, $loop, 'FOO_connect invocant is $loop' ); + + return $connect_future = $loop->new_future; + } + + my $sock; + my $f = $loop->connect( + extensions => [qw( FOO )], + some_param => "here", + on_connected => sub { $sock = shift }, + ); + + is( ref delete $connectargs{on_connected}, "CODE", 'FOO_connect received on_connected continuation' ); + is_deeply( \%connectargs, + { some_param => "here" }, + 'FOO_connect received some_param and no others' ); + + identical( $f, $connect_future, 'FOO_connect returns Future object' ); + + $loop->connect( + extensions => [qw( FOO BAR )], + param1 => "one", + param2 => "two", + on_connected => sub { $sock = shift }, + ); + + delete $connectargs{on_connected}; + is_deeply( \%connectargs, + { extensions => [qw( BAR )], + param1 => "one", + param2 => "two" }, + 'FOO_connect still receives other extensions' ); +} + +# listen +{ + my %listenargs; + my $listen_future; + sub IO::Async::Loop::FOO_listen + { + my $self = shift; + %listenargs = @_; + + identical( $self, $loop, 'FOO_listen invocant is $loop' ); + + return $listen_future = $loop->new_future; + } + + my $sock; + my $f = $loop->listen( + extensions => [qw( FOO )], + some_param => "here", + on_accept => sub { $sock = shift }, + ); + + isa_ok( delete $listenargs{listener}, "IO::Async::Listener", '$listenargs{listener}' ); + is_deeply( \%listenargs, + { some_param => "here" }, + 'FOO_listen received some_param and no others' ); + + identical( $f, $listen_future, 'FOO_listen returns Future object' ); + + $loop->listen( + extensions => [qw( FOO BAR )], + param1 => "one", + param2 => "two", + on_accept => sub { $sock = shift }, + ); + + delete $listenargs{listener}; + is_deeply( \%listenargs, + { extensions => [qw( BAR )], + param1 => "one", + param2 => "two" }, + 'FOO_listen still receives other extensions' ); +} + +done_testing; |