summaryrefslogtreecommitdiff
path: root/cpan/Test-Simple/lib/Test/Tester.pm
diff options
context:
space:
mode:
Diffstat (limited to 'cpan/Test-Simple/lib/Test/Tester.pm')
-rw-r--r--cpan/Test-Simple/lib/Test/Tester.pm642
1 files changed, 0 insertions, 642 deletions
diff --git a/cpan/Test-Simple/lib/Test/Tester.pm b/cpan/Test-Simple/lib/Test/Tester.pm
deleted file mode 100644
index 5eab16c08c..0000000000
--- a/cpan/Test-Simple/lib/Test/Tester.pm
+++ /dev/null
@@ -1,642 +0,0 @@
-use strict;
-
-package Test::Tester;
-
-# Turn this back on later
-#warn "Test::Tester is deprecated, see Test::Tester2\n";
-
-BEGIN {
- if (*Test::Builder::new{CODE}) {
- warn "You should load Test::Tester before Test::Builder (or anything that loads Test::Builder)";
- }
-}
-
-use Test::Builder 1.301001;
-BEGIN { Test::Builder::Stream->shared->use_lresults }
-use Test::Tester::CaptureRunner;
-use Test::Tester::Delegate;
-
-require Exporter;
-
-use vars qw( @ISA @EXPORT $VERSION );
-
-
-our $VERSION = '1.301001_040';
-$VERSION = eval $VERSION; ## no critic (BuiltinFunctions::ProhibitStringyEval)
-
-@EXPORT = qw( run_tests check_tests check_test cmp_results show_space );
-@ISA = qw( Exporter );
-
-my $Test = Test::Builder->new;
-my $Capture = Test::Tester::Capture->new;
-my $Delegator = Test::Tester::Delegate->new;
-$Delegator->{Object} = $Test;
-
-my $runner = Test::Tester::CaptureRunner->new;
-
-my $want_space = $ENV{TESTTESTERSPACE};
-
-sub show_space {
- $want_space = 1;
-}
-
-my $colour = '';
-my $reset = '';
-
-if (my $want_colour = $ENV{TESTTESTERCOLOUR} || $ENV{TESTTESTERCOLOUR}) {
- if (eval "require Term::ANSIColor") {
- my ($f, $b) = split(",", $want_colour);
- $colour = Term::ANSIColor::color($f) . Term::ANSIColor::color("on_$b");
- $reset = Term::ANSIColor::color("reset");
- }
-
-}
-
-sub new_new {
- return $Delegator;
-}
-
-sub capture {
- return Test::Tester::Capture->new;
-}
-
-sub fh {
- # experiment with capturing output, I don't like it
- $runner = Test::Tester::FHRunner->new;
-
- return $Test;
-}
-
-sub find_run_tests {
- my $d = 1;
- my $found = 0;
- while ((not $found) and (my ($sub) = (caller($d))[3])) {
- $found = ($sub eq "Test::Tester::run_tests");
- $d++;
- }
-
- return $d;
-}
-
-sub run_tests {
- local ($Delegator->{Object}) = $Capture;
-
- $runner->run_tests(@_);
-
- return ($runner->get_premature, $runner->get_results);
-}
-
-sub check_test {
- my $test = shift;
- my $expect = shift;
- my $name = shift;
- $name = "" unless defined($name);
-
- @_ = ($test, [$expect], $name);
- goto &check_tests;
-}
-
-sub check_tests {
- my $test = shift;
- my $expects = shift;
- my $name = shift;
- $name = "" unless defined($name);
-
- my ($prem, @results) = eval { run_tests($test, $name) };
-
- $Test->ok(!$@, "Test '$name' completed") || $Test->diag($@);
- $Test->ok(!length($prem), "Test '$name' no premature diagnostication")
- || $Test->diag("Before any testing anything, your tests said\n$prem");
-
- local $Test::Builder::Level = $Test::Builder::Level + 1;
- cmp_results(\@results, $expects, $name);
- return ($prem, @results);
-}
-
-sub cmp_field {
- my ($result, $expect, $field, $desc) = @_;
-
- if (defined $expect->{$field}) {
- $Test->is_eq(
- $result->{$field}, $expect->{$field},
- "$desc compare $field"
- );
- }
-}
-
-sub cmp_result {
- my ($result, $expect, $name) = @_;
-
- my $sub_name = $result->{name};
- $sub_name = "" unless defined($name);
-
- my $desc = "subtest '$sub_name' of '$name'";
-
- {
- local $Test::Builder::Level = $Test::Builder::Level + 1;
-
- cmp_field($result, $expect, "ok", $desc);
-
- cmp_field($result, $expect, "actual_ok", $desc);
-
- cmp_field($result, $expect, "type", $desc);
-
- cmp_field($result, $expect, "reason", $desc);
-
- cmp_field($result, $expect, "name", $desc);
- }
-
- # if we got no depth then default to 1
- my $depth = 1;
- if (exists $expect->{depth}) {
- $depth = $expect->{depth};
- }
-
- # if depth was explicitly undef then don't test it
- if (defined $depth) {
- $Test->ok(1, "depth checking is deprecated, dummy pass result...");
- }
-
- if (defined(my $exp = $expect->{diag})) {
- # if there actually is some diag then put a \n on the end if it's not
- # there already
-
- $exp .= "\n" if (length($exp) and $exp !~ /\n$/);
- if (
- not $Test->ok(
- $result->{diag} eq $exp,
- "subtest '$sub_name' of '$name' compare diag"
- )
- )
- {
- my $got = $result->{diag};
- my $glen = length($got);
- my $elen = length($exp);
- for ($got, $exp) {
- my @lines = split("\n", $_);
- $_ = join(
- "\n",
- map {
- if ($want_space) {
- $_ = $colour . escape($_) . $reset;
- }
- else {
- "'$colour$_$reset'";
- }
- } @lines
- );
- }
-
- $Test->diag(<<EOM);
-Got diag ($glen bytes):
-$got
-Expected diag ($elen bytes):
-$exp
-EOM
-
- }
- }
-}
-
-sub escape {
- my $str = shift;
- my $res = '';
- for my $char (split("", $str)) {
- my $c = ord($char);
- if (($c > 32 and $c < 125) or $c == 10) {
- $res .= $char;
- }
- else {
- $res .= sprintf('\x{%x}', $c);
- }
- }
- return $res;
-}
-
-sub cmp_results {
- my ($results, $expects, $name) = @_;
-
- $Test->is_num(scalar @$results, scalar @$expects, "Test '$name' result count");
-
- for (my $i = 0; $i < @$expects; $i++) {
- my $expect = $expects->[$i];
- my $result = $results->[$i];
-
- local $Test::Builder::Level = $Test::Builder::Level + 1;
- cmp_result($result, $expect, $name);
- }
-}
-
-######## nicked from Test::More
-sub plan {
- my (@plan) = @_;
-
- my $caller = caller;
-
- $Test->exported_to($caller);
-
- my @imports = ();
- foreach my $idx (0 .. $#plan) {
- if ($plan[$idx] eq 'import') {
- my ($tag, $imports) = splice @plan, $idx, 2;
- @imports = @$imports;
- last;
- }
- }
-
- $Test->plan(@plan);
-
- __PACKAGE__->_export_to_level(1, __PACKAGE__, @imports);
-}
-
-sub import {
- my ($class) = shift;
- {
- no warnings 'redefine';
- *Test::Builder::new = \&new_new;
- }
- goto &plan;
-}
-
-sub _export_to_level {
- my $pkg = shift;
- my $level = shift;
- (undef) = shift; # redundant arg
- my $callpkg = caller($level);
- $pkg->export($callpkg, @_);
-}
-
-############
-
-1;
-
-__END__
-
-=head1 NAME
-
-Test::Tester - *DEPRECATED* Ease testing test modules built with Test::Builder
-
-=head1 DEPRECATED
-
-See L<Test::Tester2> for a modern and maintained alternative.
-
-=head1 SYNOPSIS
-
- use Test::Tester tests => 6;
-
- use Test::MyStyle;
-
- check_test(
- sub {
- is_mystyle_eq("this", "that", "not eq");
- },
- {
- ok => 0, # expect this to fail
- name => "not eq",
- diag => "Expected: 'this'\nGot: 'that'",
- }
- );
-
-or
-
- use Test::Tester;
-
- use Test::More tests => 3;
- use Test::MyStyle;
-
- my ($premature, @results) = run_tests(
- sub {
- is_database_alive("dbname");
- }
- );
-
- # now use Test::More::like to check the diagnostic output
-
- like($results[0]->{diag}, "/^Database ping took \\d+ seconds$"/, "diag");
-
-=head1 DESCRIPTION
-
-If you have written a test module based on Test::Builder then Test::Tester
-allows you to test it with the minimum of effort.
-
-=head1 HOW TO USE (THE EASY WAY)
-
-From version 0.08 Test::Tester no longer requires you to included anything
-special in your test modules. All you need to do is
-
- use Test::Tester;
-
-in your test script B<before> any other Test::Builder based modules and away
-you go.
-
-Other modules based on Test::Builder can be used to help with the
-testing. In fact you can even use functions from your module to test
-other functions from the same module (while this is possible it is
-probably not a good idea, if your module has bugs, then
-using it to test itself may give the wrong answers).
-
-The easiest way to test is to do something like
-
- check_test(
- sub { is_mystyle_eq("this", "that", "not eq") },
- {
- ok => 0, # we expect the test to fail
- name => "not eq",
- diag => "Expected: 'this'\nGot: 'that'",
- }
- );
-
-this will execute the is_mystyle_eq test, capturing it's results and
-checking that they are what was expected.
-
-You may need to examine the test results in a more flexible way, for
-example, the diagnostic output may be quite long or complex or it may involve
-something that you cannot predict in advance like a timestamp. In this case
-you can get direct access to the test results:
-
- my ($premature, @results) = run_tests(
- sub {
- is_database_alive("dbname");
- }
- );
-
- like($result[0]->{diag}, "/^Database ping took \\d+ seconds$"/, "diag");
-
-
-We cannot predict how long the database ping will take so we use
-Test::More's like() test to check that the diagnostic string is of the right
-form.
-
-=head1 HOW TO USE (THE HARD WAY)
-
-I<This is here for backwards compatibility only>
-
-Make your module use the Test::Tester::Capture object instead of the
-Test::Builder one. How to do this depends on your module but assuming that
-your module holds the Test::Builder object in $Test and that all your test
-routines access it through $Test then providing a function something like this
-
- sub set_builder
- {
- $Test = shift;
- }
-
-should allow your test scripts to do
-
- Test::YourModule::set_builder(Test::Tester->capture);
-
-and after that any tests inside your module will captured.
-
-=head1 TEST EVENTS
-
-The result of each test is captured in a hash. These hashes are the same as
-the hashes returned by Test::Builder->details but with a couple of extra
-fields.
-
-These fields are documented in L<Test::Builder> in the details() function
-
-=over 2
-
-=item ok
-
-Did the test pass?
-
-=item actual_ok
-
-Did the test really pass? That is, did the pass come from
-Test::Builder->ok() or did it pass because it was a TODO test?
-
-=item name
-
-The name supplied for the test.
-
-=item type
-
-What kind of test? Possibilities include, skip, todo etc. See
-L<Test::Builder> for more details.
-
-=item reason
-
-The reason for the skip, todo etc. See L<Test::Builder> for more details.
-
-=back
-
-These fields are exclusive to Test::Tester.
-
-=over 2
-
-=item diag
-
-Any diagnostics that were output for the test. This only includes
-diagnostics output B<after> the test result is declared.
-
-Note that Test::Builder ensures that any diagnostics end in a \n and
-it in earlier versions of Test::Tester it was essential that you have
-the final \n in your expected diagnostics. From version 0.10 onwards,
-Test::Tester will add the \n if you forgot it. It will not add a \n if
-you are expecting no diagnostics. See below for help tracking down
-hard to find space and tab related problems.
-
-=item depth
-
-B<Note:> Depth checking is disabled on newer versions of Test::Builder which no
-longer uses $Test::Builder::Level. In these versions this will simple produce a
-dummy true result.
-
-This allows you to check that your test module is setting the correct value
-for $Test::Builder::Level and thus giving the correct file and line number
-when a test fails. It is calculated by looking at caller() and
-$Test::Builder::Level. It should count how many subroutines there are before
-jumping into the function you are testing. So for example in
-
- run_tests( sub { my_test_function("a", "b") } );
-
-the depth should be 1 and in
-
- sub deeper { my_test_function("a", "b") }
-
- run_tests(sub { deeper() });
-
-depth should be 2, that is 1 for the sub {} and one for deeper(). This
-might seem a little complex but if your tests look like the simple
-examples in this doc then you don't need to worry as the depth will
-always be 1 and that's what Test::Tester expects by default.
-
-B<Note>: if you do not specify a value for depth in check_test() then it
-automatically compares it against 1, if you really want to skip the depth
-test then pass in undef.
-
-B<Note>: depth will not be correctly calculated for tests that run from a
-signal handler or an END block or anywhere else that hides the call stack.
-
-=back
-
-Some of Test::Tester's functions return arrays of these hashes, just
-like Test::Builder->details. That is, the hash for the first test will
-be array element 1 (not 0). Element 0 will not be a hash it will be a
-string which contains any diagnostic output that came before the first
-test. This should usually be empty, if it's not, it means something
-output diagnostics before any test results showed up.
-
-=head1 SPACES AND TABS
-
-Appearances can be deceptive, especially when it comes to emptiness. If you
-are scratching your head trying to work out why Test::Tester is saying that
-your diagnostics are wrong when they look perfectly right then the answer is
-probably whitespace. From version 0.10 on, Test::Tester surrounds the
-expected and got diag values with single quotes to make it easier to spot
-trailing whitesapce. So in this example
-
- # Got diag (5 bytes):
- # 'abcd '
- # Expected diag (4 bytes):
- # 'abcd'
-
-it is quite clear that there is a space at the end of the first string.
-Another way to solve this problem is to use colour and inverse video on an
-ANSI terminal, see below COLOUR below if you want this.
-
-Unfortunately this is sometimes not enough, neither colour nor quotes will
-help you with problems involving tabs, other non-printing characters and
-certain kinds of problems inherent in Unicode. To deal with this, you can
-switch Test::Tester into a mode whereby all "tricky" characters are shown as
-\{xx}. Tricky characters are those with ASCII code less than 33 or higher
-than 126. This makes the output more difficult to read but much easier to
-find subtle differences between strings. To turn on this mode either call
-show_space() in your test script or set the TESTTESTERSPACE environment
-variable to be a true value. The example above would then look like
-
- # Got diag (5 bytes):
- # abcd\x{20}
- # Expected diag (4 bytes):
- # abcd
-
-=head1 COLOUR
-
-If you prefer to use colour as a means of finding tricky whitespace
-characters then you can set the TESTTESTCOLOUR environment variable to a
-comma separated pair of colours, the first for the foreground, the second
-for the background. For example "white,red" will print white text on a red
-background. This requires the Term::ANSIColor module. You can specify any
-colour that would be acceptable to the Term::ANSIColor::color function.
-
-If you spell colour differently, that's no problem. The TESTTESTERCOLOR
-variable also works (if both are set then the British spelling wins out).
-
-=head1 EXPORTED FUNCTIONS
-
-=head3 ($premature, @results) = run_tests(\&test_sub)
-
-\&test_sub is a reference to a subroutine.
-
-run_tests runs the subroutine in $test_sub and captures the results of any
-tests inside it. You can run more than 1 test inside this subroutine if you
-like.
-
-$premature is a string containing any diagnostic output from before
-the first test.
-
-@results is an array of test result hashes.
-
-=head3 cmp_result(\%result, \%expect, $name)
-
-\%result is a ref to a test result hash.
-
-\%expect is a ref to a hash of expected values for the test result.
-
-cmp_result compares the result with the expected values. If any differences
-are found it outputs diagnostics. You may leave out any field from the
-expected result and cmp_result will not do the comparison of that field.
-
-=head3 cmp_results(\@results, \@expects, $name)
-
-\@results is a ref to an array of test results.
-
-\@expects is a ref to an array of hash refs.
-
-cmp_results checks that the results match the expected results and if any
-differences are found it outputs diagnostics. It first checks that the
-number of elements in \@results and \@expects is the same. Then it goes
-through each result checking it against the expected result as in
-cmp_result() above.
-
-=head3 ($premature, @results) = check_tests(\&test_sub, \@expects, $name)
-
-\&test_sub is a reference to a subroutine.
-
-\@expect is a ref to an array of hash refs which are expected test results.
-
-check_tests combines run_tests and cmp_tests into a single call. It also
-checks if the tests died at any stage.
-
-It returns the same values as run_tests, so you can further examine the test
-results if you need to.
-
-=head3 ($premature, @results) = check_test(\&test_sub, \%expect, $name)
-
-\&test_sub is a reference to a subroutine.
-
-\%expect is a ref to an hash of expected values for the test result.
-
-check_test is a wrapper around check_tests. It combines run_tests and
-cmp_tests into a single call, checking if the test died. It assumes
-that only a single test is run inside \&test_sub and include a test to
-make sure this is true.
-
-It returns the same values as run_tests, so you can further examine the test
-results if you need to.
-
-=head3 show_space()
-
-Turn on the escaping of characters as described in the SPACES AND TABS
-section.
-
-=head1 HOW IT WORKS
-
-Normally, a test module (let's call it Test:MyStyle) calls
-Test::Builder->new to get the Test::Builder object. Test::MyStyle calls
-methods on this object to record information about test results. When
-Test::Tester is loaded, it replaces Test::Builder's new() method with one
-which returns a Test::Tester::Delegate object. Most of the time this object
-behaves as the real Test::Builder object. Any methods that are called are
-delegated to the real Test::Builder object so everything works perfectly.
-However once we go into test mode, the method calls are no longer passed to
-the real Test::Builder object, instead they go to the Test::Tester::Capture
-object. This object seems exactly like the real Test::Builder object,
-except, instead of outputting test results and diagnostics, it just records
-all the information for later analysis.
-
-=head1 CAVEATS
-
-Support for calling Test::Builder->note is minimal. It's implemented
-as an empty stub, so modules that use it will not crash but the calls
-are not recorded for testing purposes like the others. Patches
-welcome.
-
-=head1 SEE ALSO
-
-L<Test::Builder> the source of testing goodness. L<Test::Builder::Tester>
-for an alternative approach to the problem tackled by Test::Tester -
-captures the strings output by Test::Builder. This means you cannot get
-separate access to the individual pieces of information and you must predict
-B<exactly> what your test will output.
-
-=head1 AUTHOR
-
-This module is copyright 2005 Fergal Daly <fergal@esatclear.ie>, some parts
-are based on other people's work.
-
-Plan handling lifted from Test::More. written by Michael G Schwern
-<schwern@pobox.com>.
-
-Test::Tester::Capture is a cut down and hacked up version of Test::Builder.
-Test::Builder was written by chromatic <chromatic@wgz.org> and Michael G
-Schwern <schwern@pobox.com>.
-
-=head1 LICENSE
-
-Under the same license as Perl itself
-
-See http://www.perl.com/perl/misc/Artistic.html
-
-=cut