IO::Async::Test - Utility functions for use in test scripts
IO::Async::Test
use Test::More tests => 1; use IO::Async::Test; use IO::Async::Loop::IO_Poll; my $loop = IO::Async::Loop::IO_Poll->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' ); ... my $buffer = ""; my $handle = IO::Handle-> ... wait_for_stream { length $buffer >= 10 } $handle => $buffer; is( substr( $buffer, 0, 10, "" ), "0123456789", 'Buffer was correct' );
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).
IO::Async
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.
wait_for()
Because the primary purpose of IO::Async is to provide IO operations on filehandles, a great many tests will likely be based around connected pipes or socket handles. The wait_for_stream() function provides a convenient way to wait for some content to be written through such a connected stream.
wait_for_stream()
Set the IO::Async::Loop object which the wait_for() function will loop on.
IO::Async::Loop
Repeatedly call the loop_once() method on the underlying loop (given to the testing_loop() function), until the given condition function callback returns true.
loop_once()
testing_loop()
To guard against stalled scripts, if the loop indicates a timeout for 10 consequentive seconds, then an error is thrown.
Set up an IO::Async::Stream object around the given $handle. Data read from the stream will be appended into $buffer (which is NOT initialised when the function is entered, in case data remains from a previous call). The loop_once method is then repeatedly called until the condition function callback returns true. After this, the temporary stream will be removed from the loop.
IO::Async::Stream
loop_once
Paul Evans <leonerd@leonerd.org.uk>
To install IO::Async, copy and paste the appropriate command in to your terminal.
cpanm
cpanm IO::Async
CPAN shell
perl -MCPAN -e shell install IO::Async
For more information on module installation, please visit the detailed CPAN module installation guide.