kunit: tool: fix minor typing issue with None status
The code to handle aggregating statuses didn't check that the status
actually got set to some non-None value.
Default the value to SUCCESS instead of adding a bunch of `is None`
checks.
This sorta follows the precedent in commit 3fc48259d5
("kunit: Don't
fail test suites if one of them is empty").
Also slightly simplify the code and add type annotations.
Signed-off-by: Daniel Latypov <dlatypov@google.com>
Reviewed-by: David Gow <davidgow@google.com>
Reviewed-by: Brendan Higgins <brendanhiggins@google.com>
Tested-by: Brendan Higgins <brendanhiggins@google.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
This commit is contained in:
Родитель
09641f7c7d
Коммит
81c60306dc
|
@ -12,13 +12,13 @@ from collections import namedtuple
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from enum import Enum, auto
|
from enum import Enum, auto
|
||||||
from functools import reduce
|
from functools import reduce
|
||||||
from typing import Iterator, List, Optional, Tuple
|
from typing import Iterable, Iterator, List, Optional, Tuple
|
||||||
|
|
||||||
TestResult = namedtuple('TestResult', ['status','suites','log'])
|
TestResult = namedtuple('TestResult', ['status','suites','log'])
|
||||||
|
|
||||||
class TestSuite(object):
|
class TestSuite(object):
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.status = None # type: Optional[TestStatus]
|
self.status = TestStatus.SUCCESS
|
||||||
self.name = ''
|
self.name = ''
|
||||||
self.cases = [] # type: List[TestCase]
|
self.cases = [] # type: List[TestCase]
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ class TestSuite(object):
|
||||||
|
|
||||||
class TestCase(object):
|
class TestCase(object):
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.status = None # type: Optional[TestStatus]
|
self.status = TestStatus.SUCCESS
|
||||||
self.name = ''
|
self.name = ''
|
||||||
self.log = [] # type: List[str]
|
self.log = [] # type: List[str]
|
||||||
|
|
||||||
|
@ -224,12 +224,11 @@ def parse_ok_not_ok_test_suite(lines: List[str],
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def bubble_up_errors(to_status, status_container_list) -> TestStatus:
|
def bubble_up_errors(statuses: Iterable[TestStatus]) -> TestStatus:
|
||||||
status_list = map(to_status, status_container_list)
|
return reduce(max_status, statuses, TestStatus.SUCCESS)
|
||||||
return reduce(max_status, status_list, TestStatus.SUCCESS)
|
|
||||||
|
|
||||||
def bubble_up_test_case_errors(test_suite: TestSuite) -> TestStatus:
|
def bubble_up_test_case_errors(test_suite: TestSuite) -> TestStatus:
|
||||||
max_test_case_status = bubble_up_errors(lambda x: x.status, test_suite.cases)
|
max_test_case_status = bubble_up_errors(x.status for x in test_suite.cases)
|
||||||
return max_status(max_test_case_status, test_suite.status)
|
return max_status(max_test_case_status, test_suite.status)
|
||||||
|
|
||||||
def parse_test_suite(lines: List[str], expected_suite_index: int) -> Optional[TestSuite]:
|
def parse_test_suite(lines: List[str], expected_suite_index: int) -> Optional[TestSuite]:
|
||||||
|
@ -282,8 +281,8 @@ def parse_test_plan(lines: List[str]) -> Optional[int]:
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def bubble_up_suite_errors(test_suite_list: List[TestSuite]) -> TestStatus:
|
def bubble_up_suite_errors(test_suites: Iterable[TestSuite]) -> TestStatus:
|
||||||
return bubble_up_errors(lambda x: x.status, test_suite_list)
|
return bubble_up_errors(x.status for x in test_suites)
|
||||||
|
|
||||||
def parse_test_result(lines: List[str]) -> TestResult:
|
def parse_test_result(lines: List[str]) -> TestResult:
|
||||||
consume_non_diagnostic(lines)
|
consume_non_diagnostic(lines)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче