Using the standard Test::More framework, is it
possible to test whether what was printed to a
filehandle matches a predetermined string or list of
strings?

Consider the following:

    use Test::More tests => 1;
    
    is(get_data_count([1..39]), 39, 
        "should be 39 items");
    
    sub get_data_count {return @{+shift};}

This will print out:

    1..1
    ok 1 - should be 39 items

Now add one subroutine and one test to the foregoing:

    use Test::More tests => 2;
    
    is(get_data_count([1..39]), 39, 
        "should be 39 items");
    ok(print_data_count([1..39]), 
        "print_data_count() printed successfully");
    
    sub get_data_count {return @{+shift};}

    sub print_data_count {
        print 'Current data count:  ' . 
            @{+shift} . "\n";
    }

This will print out:

    1..2
    ok 1 - should be 39 items
    Current data count:  39
    ok 2 - print_data_count() printed successfully

The comment on the second test is, however, somewhat
misleading.  The test reports that *something* was
printed -- because the return value of 'print' was
true -- but it doesn't test *what* was printed.  The
only *completely* meaningful test would be one that
captures the list of items printed by
print_data_count().

Another way of putting this:  Could a Test::More
function 'didprint' be invented which would have an
interface like this?

    didprint( (print_data_count([1..39]), 
        'Current data count:  39')
        "print_data_count() printed ideally");

I've Googled comp.lang.perl.misc and this list's
archive and have looked thru Perlmonks as well, but
haven't come up with a *simple* solution ('simple'
being defined as one that uses just Perl built-in
functions or modules distributed with 5.8 core).

Any suggestions?  TIA.

Jim Keenan

=====
Affiliations:  Perl Seminar NY / New York Perlmongers / Toronto Perlmongers


                
__________________________________ 
Do you Yahoo!? 
Take Yahoo! Mail with you! Get it on your mobile phone. 
http://mobile.yahoo.com/maildemo 

Reply via email to