Provided by: libio-async-perl_0.61-1_all bug

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' );

        ...

        my $buffer = "";
        my $handle = IO::Handle-> ...

        wait_for_stream { length $buffer >= 10 } $handle => $buffer;

        is( substr( $buffer, 0, 10, "" ), "0123456789", 'Buffer was correct' );

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.

       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.

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.

   wait_for_stream( $condfunc, $handle, $buffer )
       As "wait_for", but will also watch the given IO handle for readability, and whenever it is
       readable will read bytes in from it into the given buffer. The buffer is NOT initialised
       when the function is entered, in case data remains from a previous call.

       $buffer can also be a CODE reference, in which case it will be invoked being passed data
       read from the handle, whenever it is readable.

AUTHOR

       Paul Evans <leonerd@leonerd.org.uk>