File Coverage

blib/lib/TestML1/Runtime/TAP.pm
Criterion Covered Total %
statement 44 56 78.5
branch 8 12 66.6
condition 1 6 16.6
subroutine 12 13 92.3
pod 0 10 0.0
total 65 97 67.0


line stmt bran cond sub pod time code
1 24     24   12080 use Test::Builder;
  24         943647  
  24         691  
2 24     24   493 use TestML1::Runtime;
  24         44  
  24         619  
3              
4             package TestML1::Runtime::TAP;
5              
6 24     24   100 use TestML1::Base;
  24         41  
  24         135  
7             extends 'TestML1::Runtime';
8              
9             has tap_object => sub { Test::Builder->new };
10             has planned => 0;
11              
12             sub run {
13 23     23 0 56 my ($self) = @_;
14 23         162 $self->SUPER::run;
15 23         74 $self->check_plan;
16 23         65 $self->plan_end;
17             }
18              
19             sub run_assertion {
20 121     121 0 200 my ($self, @args) = @_;
21 121         242 $self->check_plan;
22 121         374 $self->SUPER::run_assertion(@args);
23             }
24              
25             sub check_plan {
26 144     144 0 185 my ($self) = @_;
27 144 100       253 if (! $self->planned) {
28 23         71 $self->title;
29 23         3147 $self->plan_begin;
30 23         15875 $self->{planned} = 1;
31             }
32             }
33              
34             sub title {
35 23     23 0 49 my ($self) = @_;
36 23 100       59 if (my $title = $self->function->getvar('Title')) {
37 6         33 $title = $title->value;
38 6         19 $title = "=== $title ===\n";
39 6         20 $self->tap_object->note($title);
40             }
41             }
42              
43             sub skip_test {
44 0     0 0 0 my ($self, $reason) = @_;
45 0         0 $self->tap_object->plan(skip_all => $reason);
46             }
47              
48             sub plan_begin {
49 23     23 0 51 my ($self) = @_;
50 23 100       64 if (my $tests = $self->function->getvar('Plan')) {
51 22         113 $self->tap_object->plan(tests => $tests->value);
52             }
53             }
54              
55             sub plan_end {
56 23     23 0 55 my ($self) = @_;
57 23         56 $self->tap_object->done_testing();
58             }
59              
60             # TODO Use Test::Diff here.
61             sub assert_EQ {
62 96     96 0 221 my ($self, $got, $want) = @_;
63 96         201 $got = $got->str->value;
64 96         176 $want = $want->str->value;
65 96 50 33     255 if ($got ne $want and $want =~ /\n/) {
66 0         0 my $block = $self->function->getvar('Block');
67 0         0 my $diff = $self->function->getvar('Diff');
68 0 0 0     0 if ($diff or exists $block->points->{DIFF}) {
69 0         0 require Text::Diff;
70 0         0 $self->tap_object->ok(0, $self->get_label);
71 0         0 my $diff = Text::Diff::diff(
72             \$want, \$got, {
73             FILENAME_A => "want",
74             FILENAME_B => "got",
75             },
76             );
77 0         0 $self->tap_object->diag($diff);
78 0         0 return;
79             }
80             }
81             $self->tap_object->is_eq(
82 96         188 $got,
83             $want,
84             $self->get_label,
85             );
86             }
87              
88             sub assert_HAS {
89 7     7 0 14 my ($self, $got, $has) = @_;
90 7         16 $got = $got->str->value;
91 7         18 $has = $has->str->value;
92 7         21 my $assertion = (index($got, $has) >= 0);
93 7 50       19 if (not $assertion) {
94 0         0 my $msg = <<"...";
95             Failed TestML1 HAS (~~) assertion. This text:
96             '$got'
97             does not contain this string:
98             '$has'
99             ...
100 0         0 $self->tap_object->diag($msg);
101             }
102 7         13 $self->tap_object->ok($assertion, $self->get_label);
103             }
104              
105             sub assert_OK {
106 18     18 0 28 my ($self, $got) = @_;
107 18         31 $self->tap_object->ok(
108             $got->bool->value,
109             $self->get_label,
110             );
111             }
112              
113             1;