[tapx-dev] [commit][203] Leif Eriksen's improvements to t/080-aggregator.t

andy at hexten.net andy at hexten.net
Wed Aug 1 22:55:51 BST 2007


Revision: 203
Author:   andy
Date:     2007-08-01 22:55:50 +0100 (Wed, 01 Aug 2007)

Log Message:
-----------
Leif Eriksen's improvements to t/080-aggregator.t

Modified Paths:
--------------
    trunk/Changes
    trunk/t/080-aggregator.t

Modified: trunk/Changes
===================================================================
--- trunk/Changes	2007-08-01 21:53:24 UTC (rev 202)
+++ trunk/Changes	2007-08-01 21:55:50 UTC (rev 203)
@@ -10,6 +10,7 @@
       on 5.6.2.
     - Fixed runtests --exec option. T::H wasn't passing the exec option to
       T::P.
+    - Merged Leif Eriksen's coverage enhancing changes to t/080-aggregator.t
 
 0.52  14 July 2007
     - Incorporate Schwern's investigations into TAP versions.

Modified: trunk/t/080-aggregator.t
===================================================================
--- trunk/t/080-aggregator.t	2007-08-01 21:53:24 UTC (rev 202)
+++ trunk/t/080-aggregator.t	2007-08-01 21:55:50 UTC (rev 203)
@@ -7,7 +7,7 @@
 use TAP::Parser::Iterator;
 use TAP::Parser::Aggregator;
 
-use Test::More tests => 34;
+use Test::More tests => 65;
 
 my $tap = <<'END_TAP';
 1..5
@@ -102,3 +102,174 @@
 
 can_ok $agg, 'has_problems';
 ok $agg->has_problems, '... and it should report true if there are problems';
+
+# coverage testing
+
+# _get_parsers
+# bad descriptions
+# currently the $agg object has descriptions tap1 and tap2
+# call _get_parsers with another description.
+# $agg will call  its _croak method
+my @die;
+
+eval {
+    local $SIG{__DIE__} = sub { push @die, @_ };
+
+    $agg->_get_parsers('no_such_parser_for');
+};
+
+is @die, 1,
+  'coverage tests for missing parsers... and we caught just one death message';
+like pop(@die),
+  qr/^A parser for \(no_such_parser_for\) could not be found at /,
+  '... and it was the expected death message';
+
+# _get_parsers in scalar context
+
+my $gp = $agg->_get_parsers(qw(tap1 tap2))
+  ;    # should return ref to array containing parsers for tap1 and tap2
+
+is @$gp, 2,
+  'coverage tests for _get_parser in scalar context... and we got the right number of parsers';
+isa_ok( $_, 'TAP::Parser' ) foreach (@$gp);
+
+# _get_parsers
+# todo_failed - this is a depricated method, so it  (and these tests) can be removed eventually
+# however it is showing up in the coverage as never tested.
+my @warn;
+
+eval {
+    local $SIG{__WARN__} = sub { push @warn, @_ };
+
+    $agg->todo_failed();
+};
+
+# check the warning, making sure to capture the fullstops correctly (not as "any char" matches)
+is @warn, 1,
+  'overage tests for depricated todo_failed... and just one warning caught';
+like pop(@warn),
+  qr/^"todo_failed" is deprecated[.]  Please use "todo_passed"[.]  See the docs[.] at/,
+  '... and it was the expected warning';
+
+# has_problems
+# this has a large number of conditions 'OR'd together, so the tests get a little complicated here
+
+# currently, we have covered the cases of failed() being true and none of the summary methods failing
+# we need to set up test cases for
+# 1. !failed && todo_passed
+# 2. !failed && !todo_passed && parse_errors
+# 3. !failed && !todo_passed && !parse_errors && exit
+# 4. !failed && !todo_passed && !parse_errors && !exit && wait
+
+# note there is nothing wrong per se with the has_problems logic, these are simply coverage tests
+
+# 1. !failed && todo_passed
+
+$agg = TAP::Parser::Aggregator->new();
+
+$tap = <<'END_TAP';
+1..1
+ok 1 - you shall not pass! # TODO should have failed
+END_TAP
+
+my $parser3 = TAP::Parser->new( { tap => $tap } );
+$parser3->run;
+
+$agg->add( 'tap3', $parser3 );
+
+is $agg->passed, 1,
+  'coverage tests for !failed && todo_passed... and we should have the correct number of passed tests';
+is $agg->failed, 0,
+  '... and we should have the correct number of failed tests';
+is $agg->todo_passed, 1,
+  '... and the correct number of unexpectedly succeeded tests';
+ok $agg->has_problems,
+  '... and it should report true that there are problems';
+
+# 2. !failed && !todo_passed && parse_errors
+
+$agg = TAP::Parser::Aggregator->new();
+
+$tap = <<'END_TAP';
+1..-1
+END_TAP
+
+my $parser4 = TAP::Parser->new( { tap => $tap } );
+$parser4->run;
+
+$agg->add( 'tap4', $parser4 );
+
+is $agg->passed, 0,
+  'coverage tests for !failed && !todo_passed && parse_errors... and we should have the correct number of passed tests';
+is $agg->failed, 0,
+  '... and we should have the correct number of failed tests';
+is $agg->todo_passed, 0,
+  '... and the correct number of unexpectedly succeeded tests';
+is $agg->parse_errors, 1, '... and the correct number of parse errors';
+ok $agg->has_problems,
+  '... and it should report true that there are problems';
+
+# 3. !failed && !todo_passed && !parse_errors && exit
+# now this is a little harder to emulate cleanly through creating tap
+# fragments and parsing, as exit and wait collect OS-status codes.
+# so we'll get a little funky with $agg and push exit and wait descriptions
+# in it - not very friendly to internal rep changes.
+
+$agg = TAP::Parser::Aggregator->new();
+
+$tap = <<'END_TAP';
+1..1
+ok 1 - you shall not pass!
+END_TAP
+
+my $parser5 = TAP::Parser->new( { tap => $tap } );
+$parser5->run;
+
+$agg->add( 'tap', $parser5 );
+
+push @{ $agg->{descriptions_for_exit} }, 'one possible reason';
+$agg->{exit}++;
+
+is $agg->passed, 1,
+  'coverage tests for !failed && !todo_passed && !parse_errors... and we should have the correct number of passed tests';
+is $agg->failed, 0,
+  '... and we should have the correct number of failed tests';
+is $agg->todo_passed, 0,
+  '... and the correct number of unexpectedly succeeded tests';
+is $agg->parse_errors, 0, '... and the correct number of parse errors';
+
+my @exits = $agg->exit;
+
+is @exits, 1, '... and the correct number of exits';
+is pop(@exits), 'one possible reason',
+  '... and we collected the right exit reason';
+
+ok $agg->has_problems,
+  '... and it should report true that there are problems';
+
+# 4. !failed && !todo_passed && !parse_errors && !exit && wait
+
+$agg = TAP::Parser::Aggregator->new();
+
+$agg->add( 'tap', $parser5 );
+
+push @{ $agg->{descriptions_for_wait} }, 'another possible reason';
+$agg->{wait}++;
+
+is $agg->passed, 1,
+  'coverage tests for !failed && !todo_passed && !parse_errors && !exit... and we should have the correct number of passed tests';
+is $agg->failed, 0,
+  '... and we should have the correct number of failed tests';
+is $agg->todo_passed, 0,
+  '... and the correct number of unexpectedly succeeded tests';
+is $agg->parse_errors, 0, '... and the correct number of parse errors';
+is $agg->exit,         0, '... and the correct number of exits';
+
+my @waits = $agg->wait;
+
+is @waits, 1, '... and the correct number of waits';
+is pop(@waits), 'another possible reason',
+  '... and we collected the right wait reason';
+
+ok $agg->has_problems,
+  '... and it should report true that there are problems';




More information about the tapx-dev mailing list