1 # SPDX-License-Identifier: BSD-2-Clause
3 # Copyright (c) 2016, Matt Layman
5 from tap
.adapter
import Adapter
6 from tap
.directive
import Directive
8 from tap
.line
import Result
13 def __init__(self
, filename
, suite
):
14 self
._filename
= filename
16 self
._lines
_seen
= {'plan': [], 'test': 0, 'version': []}
18 def check(self
, final_line_count
):
19 """Check the status of all provided data and update the suite."""
20 if self
._lines
_seen
['version']:
21 self
._process
_version
_lines
()
22 self
._process
_plan
_lines
(final_line_count
)
24 def _process_version_lines(self
):
25 """Process version line rules."""
26 if len(self
._lines
_seen
['version']) > 1:
27 self
._add
_error
(_('Multiple version lines appeared.'))
28 elif self
._lines
_seen
['version'][0] != 1:
29 self
._add
_error
(_('The version must be on the first line.'))
31 def _process_plan_lines(self
, final_line_count
):
32 """Process plan line rules."""
33 if not self
._lines
_seen
['plan']:
34 self
._add
_error
(_('Missing a plan.'))
37 if len(self
._lines
_seen
['plan']) > 1:
38 self
._add
_error
(_('Only one plan line is permitted per file.'))
41 plan
, at_line
= self
._lines
_seen
['plan'][0]
42 if not self
._plan
_on
_valid
_line
(at_line
, final_line_count
):
44 _('A plan must appear at the beginning or end of the file.'))
47 if plan
.expected_tests
!= self
._lines
_seen
['test']:
49 'Expected {expected_count} tests '
50 'but only {seen_count} ran.').format(
51 expected_count
=plan
.expected_tests
,
52 seen_count
=self
._lines
_seen
['test']))
54 def _plan_on_valid_line(self
, at_line
, final_line_count
):
55 """Check if a plan is on a valid line."""
56 # Put the common cases first.
57 if at_line
== 1 or at_line
== final_line_count
:
60 # The plan may only appear on line 2 if the version is at line 1.
62 self
._lines
_seen
['version'] and
63 self
._lines
_seen
['version'][0] == 1 and
70 def handle_bail(self
, bail
):
71 """Handle a bail line."""
72 self
._add
_error
(_('Bailed: {reason}').format(reason
=bail
.reason
))
74 def handle_file_does_not_exist(self
):
75 """Handle a test file that does not exist."""
76 self
._add
_error
(_('{filename} does not exist.').format(
77 filename
=self
._filename
))
79 def handle_skipping_plan(self
, skip_plan
):
80 """Handle a plan that contains a SKIP directive."""
82 True, None, skip_plan
.directive
.text
, Directive('SKIP'))
83 self
._suite
.addTest(Adapter(self
._filename
, skip_line
))
85 def saw_plan(self
, plan
, at_line
):
86 """Record when a plan line was seen."""
87 self
._lines
_seen
['plan'].append((plan
, at_line
))
90 """Record when a test line was seen."""
91 self
._lines
_seen
['test'] += 1
93 def saw_version_at(self
, line_counter
):
94 """Record when a version line was seen."""
95 self
._lines
_seen
['version'].append(line_counter
)
97 def _add_error(self
, message
):
98 """Add an error test to the suite."""
99 error_line
= Result(False, None, message
, Directive(''))
100 self
._suite
.addTest(Adapter(self
._filename
, error_line
))
This page took 0.034196 seconds and 5 git commands to generate.