1 package TAP::Formatter::Session;
6 use vars qw($VERSION @ISA);
14 @ACCESSOR = qw( name formatter parser show_count );
16 for my $method (@ACCESSOR) {
18 *$method = sub { shift->{$method} };
24 TAP::Formatter::Session - Abstract base class for harness output delegate
43 my $harness = TAP::Formatter::Console::Session->new( \%args );
45 The constructor returns a new C<TAP::Formatter::Console::Session> object.
62 my ( $self, $arg_for ) = @_;
65 $self->SUPER::_initialize($arg_for);
66 my %arg_for = %$arg_for; # force a shallow copy
68 for my $name (@ACCESSOR) {
69 $self->{$name} = delete $arg_for{$name};
72 if ( !defined $self->show_count ) {
73 $self->{show_count} = 1; # defaults to true
75 if ( $self->show_count ) { # but may be a damned lie!
76 $self->{show_count} = $self->_should_show_count;
79 if ( my @props = sort keys %arg_for ) {
81 "Unknown arguments to " . __PACKAGE__ . "::new (@props)" );
93 Called by the harness for each line of TAP it receives.
97 Called to close a test session.
99 =head3 C<clear_for_close>
101 Called by C<close_test> to clear the line showing test progress, or the parallel
102 test ruler, prior to printing the final test result.
112 sub clear_for_close { }
114 sub _should_show_count {
117 !$self->formatter->verbose
118 && -t $self->formatter->stdout
119 && !$ENV{HARNESS_NOTTY};
122 sub _format_for_output {
123 my ( $self, $result ) = @_;
124 return $self->formatter->normalize ? $result->as_string : $result->raw;
127 sub _output_test_failure {
128 my ( $self, $parser ) = @_;
129 my $formatter = $self->formatter;
130 return if $formatter->really_quiet;
132 my $tests_run = $parser->tests_run;
133 my $tests_planned = $parser->tests_planned;
136 = defined $tests_planned
140 my $passed = $parser->passed;
142 # The total number of fails includes any tests that were planned but
144 my $failed = $parser->failed + $total - $tests_run;
145 my $exit = $parser->exit;
147 if ( my $exit = $parser->exit ) {
148 my $wstat = $parser->wait;
149 my $status = sprintf( "%d (wstat %d, 0x%x)", $exit, $wstat, $wstat );
150 $formatter->_failure_output("Dubious, test returned $status\n");
153 if ( $failed == 0 ) {
154 $formatter->_failure_output(
156 ? "All $total subtests passed "
161 $formatter->_failure_output("Failed $failed/$total subtests ");
163 $formatter->_failure_output("\nNo tests run!");
167 if ( my $skipped = $parser->skipped ) {
169 my $test = 'subtest' . ( $skipped != 1 ? 's' : '' );
171 "\n\t(less $skipped skipped $test: $passed okay)");
174 if ( my $failed = $parser->todo_passed ) {
175 my $test = $failed > 1 ? 'tests' : 'test';
177 "\n\t($failed TODO $test unexpectedly succeeded)");
180 $formatter->_output("\n");