IO::Async::Test


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>

 IO::Async::Test