diff --git a/mesonbuild/mtest.py b/mesonbuild/mtest.py index 8af37f0cf..22ab8e56d 100644 --- a/mesonbuild/mtest.py +++ b/mesonbuild/mtest.py @@ -15,7 +15,7 @@ # A tool to run tests in many different ways. from pathlib import Path -from collections import deque, namedtuple +from collections import deque from copy import deepcopy import argparse import asyncio @@ -209,11 +209,26 @@ class TestResult(enum.Enum): TYPE_TAPResult = T.Union['TAPParser.Test', 'TAPParser.Error', 'TAPParser.Version', 'TAPParser.Plan', 'TAPParser.Bailout'] class TAPParser: - Plan = namedtuple('Plan', ['count', 'late', 'skipped', 'explanation']) - Bailout = namedtuple('Bailout', ['message']) - Test = namedtuple('Test', ['number', 'name', 'result', 'explanation']) - Error = namedtuple('Error', ['message']) - Version = namedtuple('Version', ['version']) + class Plan(T.NamedTuple): + num_tests: int + late: bool + skipped: bool + explanation: T.Optional[str] + + class Bailout(T.NamedTuple): + message: str + + class Test(T.NamedTuple): + number: int + name: str + result: TestResult + explanation: T.Optional[str] + + class Error(T.NamedTuple): + message: str + + class Version(T.NamedTuple): + version: int _MAIN = 1 _AFTER_TEST = 2 @@ -308,16 +323,16 @@ class TAPParser: if self.plan: yield self.Error('more than one plan found') else: - count = int(m.group(1)) - skipped = (count == 0) + num_tests = int(m.group(1)) + skipped = (num_tests == 0) if m.group(2): if m.group(2).upper().startswith('SKIP'): - if count > 0: + if num_tests > 0: yield self.Error('invalid SKIP directive for plan') skipped = True else: yield self.Error('invalid directive for plan') - self.plan = self.Plan(count=count, late=(self.num_tests > 0), + self.plan = self.Plan(num_tests=num_tests, late=(self.num_tests > 0), skipped=skipped, explanation=m.group(3)) yield self.plan return @@ -350,11 +365,11 @@ class TAPParser: if self.state == self._YAML: yield self.Error('YAML block not terminated (started on line {})'.format(self.yaml_lineno)) - if not self.bailed_out and self.plan and self.num_tests != self.plan.count: - if self.num_tests < self.plan.count: - yield self.Error('Too few tests run (expected {}, got {})'.format(self.plan.count, self.num_tests)) + if not self.bailed_out and self.plan and self.num_tests != self.plan.num_tests: + if self.num_tests < self.plan.num_tests: + yield self.Error('Too few tests run (expected {}, got {})'.format(self.plan.num_tests, self.num_tests)) else: - yield self.Error('Too many tests run (expected {}, got {})'.format(self.plan.count, self.num_tests)) + yield self.Error('Too many tests run (expected {}, got {})'.format(self.plan.num_tests, self.num_tests)) class TestLogger: def flush(self) -> None: diff --git a/run_unittests.py b/run_unittests.py index 709f019ae..9569e145e 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -8889,25 +8889,25 @@ class TAPParserTests(unittest.TestCase): def test_empty_plan(self): events = self.parse_tap('1..0') - self.assert_plan(events, count=0, late=False, skipped=True) + self.assert_plan(events, num_tests=0, late=False, skipped=True) self.assert_last(events) def test_plan_directive(self): events = self.parse_tap('1..0 # skipped for some reason') - self.assert_plan(events, count=0, late=False, skipped=True, + self.assert_plan(events, num_tests=0, late=False, skipped=True, explanation='for some reason') self.assert_last(events) events = self.parse_tap('1..1 # skipped for some reason\nok 1') self.assert_error(events) - self.assert_plan(events, count=1, late=False, skipped=True, + self.assert_plan(events, num_tests=1, late=False, skipped=True, explanation='for some reason') self.assert_test(events, number=1, name='', result=TestResult.OK) self.assert_last(events) events = self.parse_tap('1..1 # todo not supported here\nok 1') self.assert_error(events) - self.assert_plan(events, count=1, late=False, skipped=False, + self.assert_plan(events, num_tests=1, late=False, skipped=False, explanation='not supported here') self.assert_test(events, number=1, name='', result=TestResult.OK) self.assert_last(events) @@ -8953,7 +8953,7 @@ class TAPParserTests(unittest.TestCase): def test_many_early_plan(self): events = self.parse_tap('1..4\nok 1\nnot ok 2\nok 3\nnot ok 4') - self.assert_plan(events, count=4, late=False) + self.assert_plan(events, num_tests=4, late=False) self.assert_test(events, number=1, name='', result=TestResult.OK) self.assert_test(events, number=2, name='', result=TestResult.FAIL) self.assert_test(events, number=3, name='', result=TestResult.OK) @@ -8966,7 +8966,7 @@ class TAPParserTests(unittest.TestCase): self.assert_test(events, number=2, name='', result=TestResult.FAIL) self.assert_test(events, number=3, name='', result=TestResult.OK) self.assert_test(events, number=4, name='', result=TestResult.FAIL) - self.assert_plan(events, count=4, late=True) + self.assert_plan(events, num_tests=4, late=True) self.assert_last(events) def test_directive_case(self): @@ -8991,14 +8991,14 @@ class TAPParserTests(unittest.TestCase): def test_one_test_early_plan(self): events = self.parse_tap('1..1\nok') - self.assert_plan(events, count=1, late=False) + self.assert_plan(events, num_tests=1, late=False) self.assert_test(events, number=1, name='', result=TestResult.OK) self.assert_last(events) def test_one_test_late_plan(self): events = self.parse_tap('ok\n1..1') self.assert_test(events, number=1, name='', result=TestResult.OK) - self.assert_plan(events, count=1, late=True) + self.assert_plan(events, num_tests=1, late=True) self.assert_last(events) def test_out_of_order(self): @@ -9010,14 +9010,14 @@ class TAPParserTests(unittest.TestCase): def test_middle_plan(self): events = self.parse_tap('ok 1\n1..2\nok 2') self.assert_test(events, number=1, name='', result=TestResult.OK) - self.assert_plan(events, count=2, late=True) + self.assert_plan(events, num_tests=2, late=True) self.assert_error(events) self.assert_test(events, number=2, name='', result=TestResult.OK) self.assert_last(events) def test_too_many_plans(self): events = self.parse_tap('1..1\n1..2\nok 1') - self.assert_plan(events, count=1, late=False) + self.assert_plan(events, num_tests=1, late=False) self.assert_error(events) self.assert_test(events, number=1, name='', result=TestResult.OK) self.assert_last(events) @@ -9026,12 +9026,12 @@ class TAPParserTests(unittest.TestCase): events = self.parse_tap('ok 1\nnot ok 2\n1..1') self.assert_test(events, number=1, name='', result=TestResult.OK) self.assert_test(events, number=2, name='', result=TestResult.FAIL) - self.assert_plan(events, count=1, late=True) + self.assert_plan(events, num_tests=1, late=True) self.assert_error(events) self.assert_last(events) events = self.parse_tap('1..1\nok 1\nnot ok 2') - self.assert_plan(events, count=1, late=False) + self.assert_plan(events, num_tests=1, late=False) self.assert_test(events, number=1, name='', result=TestResult.OK) self.assert_test(events, number=2, name='', result=TestResult.FAIL) self.assert_error(events) @@ -9041,12 +9041,12 @@ class TAPParserTests(unittest.TestCase): events = self.parse_tap('ok 1\nnot ok 2\n1..3') self.assert_test(events, number=1, name='', result=TestResult.OK) self.assert_test(events, number=2, name='', result=TestResult.FAIL) - self.assert_plan(events, count=3, late=True) + self.assert_plan(events, num_tests=3, late=True) self.assert_error(events) self.assert_last(events) events = self.parse_tap('1..3\nok 1\nnot ok 2') - self.assert_plan(events, count=3, late=False) + self.assert_plan(events, num_tests=3, late=False) self.assert_test(events, number=1, name='', result=TestResult.OK) self.assert_test(events, number=2, name='', result=TestResult.FAIL) self.assert_error(events) @@ -9054,7 +9054,7 @@ class TAPParserTests(unittest.TestCase): def test_too_few_bailout(self): events = self.parse_tap('1..3\nok 1\nnot ok 2\nBail out! no third test') - self.assert_plan(events, count=3, late=False) + self.assert_plan(events, num_tests=3, late=False) self.assert_test(events, number=1, name='', result=TestResult.OK) self.assert_test(events, number=2, name='', result=TestResult.FAIL) self.assert_bailout(events, message='no third test') @@ -9062,29 +9062,29 @@ class TAPParserTests(unittest.TestCase): def test_diagnostics(self): events = self.parse_tap('1..1\n# ignored\nok 1') - self.assert_plan(events, count=1, late=False) + self.assert_plan(events, num_tests=1, late=False) self.assert_test(events, number=1, name='', result=TestResult.OK) self.assert_last(events) events = self.parse_tap('# ignored\n1..1\nok 1\n# ignored too') - self.assert_plan(events, count=1, late=False) + self.assert_plan(events, num_tests=1, late=False) self.assert_test(events, number=1, name='', result=TestResult.OK) self.assert_last(events) events = self.parse_tap('# ignored\nok 1\n1..1\n# ignored too') self.assert_test(events, number=1, name='', result=TestResult.OK) - self.assert_plan(events, count=1, late=True) + self.assert_plan(events, num_tests=1, late=True) self.assert_last(events) def test_empty_line(self): events = self.parse_tap('1..1\n\nok 1') - self.assert_plan(events, count=1, late=False) + self.assert_plan(events, num_tests=1, late=False) self.assert_test(events, number=1, name='', result=TestResult.OK) self.assert_last(events) def test_unexpected(self): events = self.parse_tap('1..1\ninvalid\nok 1') - self.assert_plan(events, count=1, late=False) + self.assert_plan(events, num_tests=1, late=False) self.assert_error(events) self.assert_test(events, number=1, name='', result=TestResult.OK) self.assert_last(events) @@ -9099,7 +9099,7 @@ class TAPParserTests(unittest.TestCase): self.assert_last(events) events = self.parse_tap('1..0\nTAP version 13\n') - self.assert_plan(events, count=0, late=False, skipped=True) + self.assert_plan(events, num_tests=0, late=False, skipped=True) self.assert_error(events) self.assert_last(events)