NAME
Test::LongString - tests strings for equality, with more helpful failures
SYNOPSIS
use Test::More tests => 1;
use Test::LongString;
like_string( $html, qr/(perl|cpan)\.org/ );
# Failed test (html-test.t at line 12)
# got: "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Trans"...
# length: 58930
# doesn't match '(?-xism:(perl|cpan)\.org)'
DESCRIPTION
This module provides some drop-in replacements for the string comparison functions of Test::More, but which are more suitable when you test against long strings. If you've ever had to search for text in a multi-line string like an HTML document, or find specific items in binary data, this is the module for you.
FUNCTIONS
is_string( $string, $expected [, $label ] )
is_string()
is equivalent to Test::More::is()
, but with more helpful diagnostics in case of failure.
It doesn't print the entire strings in the failure message.
It reports the lengths of the strings that have been compared.
It reports the length of the common prefix of the strings.
In the diagnostics, non-ASCII characters are escaped as
\x{xx}
.
For example:
is_string( $soliloquy, $juliet );
# Failed test (soliloquy.t at line 15)
# got: "To be, or not to be: that is the question:\x{0a}Whether"...
# length: 1490
# expected: "O Romeo, Romeo,\x{0a}wherefore art thou Romeo?\x{0a}Deny thy"...
# length: 154
# strings begin to differ at char 1
like_string( $string, qr/regex/ [, $label ] )
unlike_string( $string, qr/regex/ [, $label ] )
like_string()
and unlike_string()
are replacements for Test::More:like()
and unlike()
that only print the beginning of the received string in the output. Unfortunately, they can't print out the position where the regex failed to match.
like_string( $soliloquy, qr/Romeo|Juliet|Mercutio|Tybalt/ );
# Failed test (soliloquy.t at line 15)
# got: "To be, or not to be: that is the question:\x{0a}Whether"...
# length: 1490
# doesn't match '(?-xism:Romeo|Juliet|Mercutio|Tybalt)'
# Looks like you planned 4 tests but only ran 1.
contains_string( $string, $substring [, $label ] )
contains_string()
searches for $substring in $string. It's the same as like_string()
, except that it's not a regular expression search.
contains_string( $soliloquy, "Romeo" );
# Failed test (soliloquy.t at line 10)
# searched: "To be, or not to be: that is the question:\x{0a}Whether"...
# and can't find: "Romeo"
# Looks like you planned 4 tests but only ran 1.
CONTROLLING OUTPUT
By default, only the first 50 characters of the compared strings are shown in the failure message. This value is in $Test::LongString::Max
, and can be set at run-time.
You can also set it by specifying an argument to use
:
use Test::LongString max => 100;
AUTHOR
Written by Rafael Garcia-Suarez. Thanks to Mark Fowler (and to Joss Whedon) for the inspirational Acme::Test::Buffy.
This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.