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>