Commit | Line | Data |
---|---|---|
13287dd5 MS |
1 | #!/usr/bin/perl -Tw |
2 | ||
3 | BEGIN { | |
4 | if( $ENV{PERL_CORE} ) { | |
5 | chdir 't'; | |
6 | @INC = ('../lib', 'lib'); | |
7 | } | |
8 | else { | |
9 | unshift @INC, 't/lib'; | |
10 | } | |
11 | } | |
12 | ||
13 | use strict; | |
14 | ||
a72fde19 | 15 | use Test::More tests => 147; |
13287dd5 MS |
16 | |
17 | ||
18 | use_ok('Test::Harness::Straps'); | |
19 | ||
20 | my $strap = Test::Harness::Straps->new; | |
21 | ok( defined $strap && $strap->isa("Test::Harness::Straps"), 'new()' ); | |
22 | ||
23 | ||
24 | ### Testing _is_comment() | |
25 | ||
26 | my $comment; | |
27 | ok( !$strap->_is_comment("foo", \$comment), '_is_comment(), not a comment' ); | |
28 | ok( !defined $comment, ' no comment set' ); | |
29 | ||
30 | ok( !$strap->_is_comment("f # oo", \$comment), ' not a comment with #' ); | |
31 | ok( !defined $comment, ' no comment set' ); | |
32 | ||
33 | my %comments = ( | |
34 | "# stuff and things # and stuff" => | |
35 | ' stuff and things # and stuff', | |
36 | " # more things " => ' more things ', | |
37 | "#" => '', | |
38 | ); | |
39 | ||
40 | while( my($line, $line_comment) = each %comments ) { | |
41 | my $strap = Test::Harness::Straps->new; | |
42 | ||
43 | my $name = substr($line, 0, 20); | |
44 | ok( $strap->_is_comment($line, \$comment), " comment '$name'" ); | |
45 | is( $comment, $line_comment, ' right comment set' ); | |
46 | } | |
47 | ||
48 | ||
49 | ||
50 | ### Testing _is_header() | |
51 | ||
52 | my @not_headers = (' 1..2', | |
53 | '1..M', | |
54 | '1..-1', | |
55 | '2..2', | |
56 | '1..a', | |
57 | '', | |
58 | ); | |
59 | ||
60 | foreach my $unheader (@not_headers) { | |
61 | my $strap = Test::Harness::Straps->new; | |
62 | ||
63 | ok( !$strap->_is_header($unheader), | |
64 | "_is_header(), not a header '$unheader'" ); | |
65 | ||
66 | ok( (!grep { exists $strap->{$_} } qw(max todo skip_all)), | |
67 | " max, todo and skip_all are not set" ); | |
68 | } | |
69 | ||
70 | ||
71 | my @attribs = qw(max skip_all todo); | |
72 | my %headers = ( | |
73 | '1..2' => { max => 2 }, | |
74 | '1..1' => { max => 1 }, | |
a72fde19 JH |
75 | '1..0' => { max => 0, |
76 | skip_all => '', | |
77 | }, | |
13287dd5 MS |
78 | '1..0 # Skipped: no leverage found' => { max => 0, |
79 | skip_all => 'no leverage found', | |
80 | }, | |
81 | '1..4 # Skipped: no leverage found' => { max => 4, | |
82 | skip_all => 'no leverage found', | |
83 | }, | |
84 | '1..0 # skip skip skip because' => { max => 0, | |
85 | skip_all => 'skip skip because', | |
86 | }, | |
87 | '1..10 todo 2 4 10' => { max => 10, | |
88 | 'todo' => { 2 => 1, | |
a72fde19 JH |
89 | 4 => 1, |
90 | 10 => 1, | |
13287dd5 MS |
91 | }, |
92 | }, | |
93 | '1..10 todo' => { max => 10 }, | |
94 | '1..192 todo 4 2 13 192 # Skip skip skip because' => | |
95 | { max => 192, | |
96 | 'todo' => { 4 => 1, | |
a72fde19 JH |
97 | 2 => 1, |
98 | 13 => 1, | |
99 | 192 => 1, | |
13287dd5 MS |
100 | }, |
101 | skip_all => 'skip skip because' | |
102 | } | |
103 | ); | |
104 | ||
105 | while( my($header, $expect) = each %headers ) { | |
106 | my $strap = Test::Harness::Straps->new; | |
107 | ||
108 | ok( $strap->_is_header($header), "_is_header() is a header '$header'" ); | |
109 | ||
110 | is( $strap->{skip_all}, $expect->{skip_all}, ' skip_all set right' ) | |
111 | if defined $expect->{skip_all}; | |
112 | ||
113 | ok( eq_set( [map $strap->{$_}, grep defined $strap->{$_}, @attribs], | |
114 | [map $expect->{$_}, grep defined $expect->{$_}, @attribs] ), | |
115 | ' the right attributes are there' ); | |
116 | } | |
117 | ||
118 | ||
119 | ||
120 | ### Testing _is_test() | |
121 | ||
122 | my %tests = ( | |
123 | 'ok' => { 'ok' => 1 }, | |
124 | 'not ok' => { 'ok' => 0 }, | |
125 | ||
126 | 'ok 1' => { 'ok' => 1, number => 1 }, | |
127 | 'not ok 1' => { 'ok' => 0, number => 1 }, | |
128 | ||
129 | 'ok 2938' => { 'ok' => 1, number => 2938 }, | |
130 | ||
131 | 'ok 1066 - and all that' => { 'ok' => 1, | |
132 | number => 1066, | |
133 | name => "- and all that" }, | |
134 | 'not ok 42 - universal constant' => | |
135 | { 'ok' => 0, | |
136 | number => 42, | |
137 | name => '- universal constant', | |
138 | }, | |
139 | 'not ok 23 # TODO world peace' => { 'ok' => 0, | |
140 | number => 23, | |
141 | type => 'todo', | |
142 | reason => 'world peace' | |
143 | }, | |
144 | 'ok 11 - have life # TODO get a life' => | |
145 | { 'ok' => 1, | |
146 | number => 11, | |
147 | name => '- have life', | |
148 | type => 'todo', | |
149 | reason => 'get a life' | |
150 | }, | |
151 | 'not ok # TODO' => { 'ok' => 0, | |
152 | type => 'todo', | |
153 | reason => '' | |
154 | }, | |
155 | 'ok # skip' => { 'ok' => 1, | |
156 | type => 'skip', | |
157 | }, | |
158 | 'not ok 11 - this is \# all the name # skip this is not' | |
159 | => { 'ok' => 0, | |
160 | number => 11, | |
161 | name => '- this is \# all the name', | |
162 | type => 'skip', | |
163 | reason => 'this is not' | |
164 | }, | |
165 | "ok 42 - _is_header() is a header '1..192 todo 4 2 13 192 \\# Skip skip skip because" | |
166 | => { 'ok' => 1, | |
167 | number => 42, | |
168 | name => "- _is_header() is a header '1..192 todo 4 2 13 192 \\# Skip skip skip because", | |
169 | }, | |
170 | ); | |
171 | ||
172 | while( my($line, $expect) = each %tests ) { | |
173 | my %test; | |
174 | ok( $strap->_is_test($line, \%test), "_is_test() spots '$line'" ); | |
175 | ||
176 | foreach my $type (qw(ok number name type reason)) { | |
177 | cmp_ok( $test{$type}, 'eq', $expect->{$type}, " $type" ); | |
178 | } | |
179 | } | |
180 | ||
181 | my @untests = ( | |
182 | ' ok', | |
183 | 'not', | |
184 | 'okay 23', | |
185 | ); | |
186 | foreach my $line (@untests) { | |
187 | my $strap = Test::Harness::Straps->new; | |
188 | my %test = (); | |
189 | ok( !$strap->_is_test($line, \%test), "_is_test() disregards '$line'" ); | |
190 | ||
191 | # is( keys %test, 0 ) won't work in 5.004 because it's undef. | |
192 | ok( !keys %test, ' and produces no test info' ); | |
193 | } | |
194 | ||
195 | ||
196 | ### Test _is_bail_out() | |
197 | ||
198 | my %bails = ( | |
199 | 'Bail out!' => undef, | |
200 | 'Bail out! Wing on fire.' => 'Wing on fire.', | |
201 | 'BAIL OUT!' => undef, | |
202 | 'bail out! - Out of coffee' => '- Out of coffee', | |
203 | ); | |
204 | ||
205 | while( my($line, $expect) = each %bails ) { | |
206 | my $strap = Test::Harness::Straps->new; | |
207 | my $reason; | |
208 | ok( $strap->_is_bail_out($line, \$reason), "_is_bail_out() spots '$line'"); | |
209 | is( $reason, $expect, ' with the right reason' ); | |
210 | } | |
211 | ||
212 | my @unbails = ( | |
213 | ' Bail out!', | |
214 | 'BAIL OUT', | |
215 | 'frobnitz', | |
216 | 'ok 23 - BAIL OUT!', | |
217 | ); | |
218 | ||
219 | foreach my $line (@unbails) { | |
220 | my $strap = Test::Harness::Straps->new; | |
221 | my $reason; | |
222 | ||
223 | ok( !$strap->_is_bail_out($line, \$reason), | |
224 | "_is_bail_out() ignores '$line'" ); | |
225 | is( $reason, undef, ' and gives no reason' ); | |
226 | } |