NAME

IO::Async::Test - Utility functions for use in test scripts

SYNOPSIS

use Test::More tests => 1;
use IO::Async::Test;

use IO::Async::Loop::...

my $loop = IO::Async::Loop::...->new( ... );
testing_loop( $loop );

my $result;

$loop->do_something( 
   some => args,

   on_done => sub {
      $result = the_outcome;
   }
);

wait_for { defined $result };

is( $result, what_we_expected, 'The event happened' );

DESCRIPTION

This module provides utility functions that may be useful when writing test scripts for code which uses IO::Async (as well as being used in the IO::Async test scripts themselves).

Test scripts are often synchronous by nature; they are a linear sequence of actions to perform, interspersed with assertions which check for given conditions. This goes against the very nature of IO::Async which, being an asynchronisation framework, does not provide a linear stepped way of working.

In order to write a test, the wait_for() function provides a way of synchronising the code, so that a given condition is known to hold, which would typically signify that some event has occured, the outcome of which can now be tested using the usual testing primitives.

FUNCTIONS

testing_loop( $loop )

Set the IO::Async::Loop object which the wait_for() function will loop on.

wait_for( $condfunc )

Repeatedly call the loop_once() method on the underlying loop (given to the testing_loop() function), until the given condition function callback returns true.

To guard against stalled scripts, if the loop indicates a timeout for 10 consequentive seconds, then an error is thrown.

AUTHOR

Paul Evans <leonerd@leonerd.org.uk>