Improve comments and variable naming

Signed-off-by: Pengyu Lv <pengyu.lv@arm.com>
This commit is contained in:
Pengyu Lv 2023-11-23 14:15:37 +08:00
parent a442858878
commit 31a9b7891a

View file

@ -62,24 +62,24 @@ def execute_reference_driver_tests(results: Results, ref_component, driver_compo
def analyze_coverage(results, outcomes, allow_list, full_coverage): def analyze_coverage(results, outcomes, allow_list, full_coverage):
"""Check that all available test cases are executed at least once.""" """Check that all available test cases are executed at least once."""
available = check_test_cases.collect_available_test_cases() available = check_test_cases.collect_available_test_cases()
for key in available: for suite_case in available:
hits = 0 hits = 0
for _comp, comp_outcomes in outcomes.items(): for _comp, comp_outcomes in outcomes.items():
if key in comp_outcomes["successes"] or \ if suite_case in comp_outcomes["successes"] or \
key in comp_outcomes["failures"]: suite_case in comp_outcomes["failures"]:
hits += 1 hits += 1
if hits == 0 and key not in allow_list: if hits == 0 and suite_case not in allow_list:
if full_coverage: if full_coverage:
results.error('Test case not executed: {}', key) results.error('Test case not executed: {}', suite_case)
else: else:
results.warning('Test case not executed: {}', key) results.warning('Test case not executed: {}', suite_case)
elif hits != 0 and key in allow_list: elif hits != 0 and suite_case in allow_list:
# Test Case should be removed from the allow list. # Test Case should be removed from the allow list.
if full_coverage: if full_coverage:
results.error('Allow listed test case was executed: {}', key) results.error('Allow listed test case was executed: {}', suite_case)
else: else:
results.warning('Allow listed test case was executed: {}', key) results.warning('Allow listed test case was executed: {}', suite_case)
def name_matches_pattern(name, str_or_re): def name_matches_pattern(name, str_or_re):
"""Check if name matches a pattern, that may be a string or regex. """Check if name matches a pattern, that may be a string or regex.
@ -96,8 +96,8 @@ def name_matches_pattern(name, str_or_re):
def analyze_driver_vs_reference(results: Results, outcomes, def analyze_driver_vs_reference(results: Results, outcomes,
component_ref, component_driver, component_ref, component_driver,
ignored_suites, ignored_tests=None): ignored_suites, ignored_tests=None):
"""Check that all tests executed in the reference component are also """Check that all tests passed in the reference component are also
executed in the corresponding driver component. passed in the corresponding driver component.
Skip: Skip:
- full test suites provided in ignored_suites list - full test suites provided in ignored_suites list
- only some specific test inside a test suite, for which the corresponding - only some specific test inside a test suite, for which the corresponding
@ -110,9 +110,9 @@ def analyze_driver_vs_reference(results: Results, outcomes,
results.error("no passing test in reference component: bad outcome file?") results.error("no passing test in reference component: bad outcome file?")
return return
for key in ref_outcomes["successes"]: for suite_case in ref_outcomes["successes"]:
# key is like "test_suite_foo.bar;Description of test case" # suite_case is like "test_suite_foo.bar;Description of test case"
(full_test_suite, test_string) = key.split(';') (full_test_suite, test_string) = suite_case.split(';')
test_suite = full_test_suite.split('.')[0] # retrieve main part of test suite name test_suite = full_test_suite.split('.')[0] # retrieve main part of test suite name
# Immediately skip fully-ignored test suites # Immediately skip fully-ignored test suites
@ -128,10 +128,10 @@ def analyze_driver_vs_reference(results: Results, outcomes,
if name_matches_pattern(test_string, str_or_re): if name_matches_pattern(test_string, str_or_re):
ignored = True ignored = True
if not ignored and not key in driver_outcomes['successes']: if not ignored and not suite_case in driver_outcomes['successes']:
results.error("PASS -> SKIP/FAIL: {}", key) results.error("PASS -> SKIP/FAIL: {}", suite_case)
if ignored and key in driver_outcomes['successes']: if ignored and suite_case in driver_outcomes['successes']:
results.error("uselessly ignored: {}", key) results.error("uselessly ignored: {}", suite_case)
def analyze_outcomes(results: Results, outcomes, args): def analyze_outcomes(results: Results, outcomes, args):
"""Run all analyses on the given outcome collection.""" """Run all analyses on the given outcome collection."""
@ -141,22 +141,31 @@ def analyze_outcomes(results: Results, outcomes, args):
def read_outcome_file(outcome_file): def read_outcome_file(outcome_file):
"""Parse an outcome file and return an outcome collection. """Parse an outcome file and return an outcome collection.
An outcome collection is a dictionary mapping keys to TestCaseOutcomes objects. An outcome collection is a dictionary presentation of the outcome file:
The keys are the test suite name and the test case description, separated ```
by a semicolon. outcomes = {
"<config>": {
"successes": frozenset(["<suite_case>", ... ]),
"failures": frozenset(["<suite_case>", ...])
}
...
}
suite_case = "<suite>;<case>"
```
""" """
outcomes = {} outcomes = {}
with open(outcome_file, 'r', encoding='utf-8') as input_file: with open(outcome_file, 'r', encoding='utf-8') as input_file:
for line in input_file: for line in input_file:
(_platform, config, suite, case, result, _cause) = line.split(';') (_platform, config, suite, case, result, _cause) = line.split(';')
key = ';'.join([suite, case]) suite_case = ';'.join([suite, case])
if config not in outcomes: if config not in outcomes:
outcomes[config] = {"successes":[], "failures":[]} outcomes[config] = {"successes":[], "failures":[]}
if result == 'PASS': if result == 'PASS':
outcomes[config]['successes'].append(key) outcomes[config]['successes'].append(suite_case)
elif result == 'FAIL': elif result == 'FAIL':
outcomes[config]['failures'].append(key) outcomes[config]['failures'].append(suite_case)
# Convert `list` to `frozenset` to improve search performance
for config in outcomes: for config in outcomes:
outcomes[config]['successes'] = frozenset(outcomes[config]['successes']) outcomes[config]['successes'] = frozenset(outcomes[config]['successes'])
outcomes[config]['failures'] = frozenset(outcomes[config]['failures']) outcomes[config]['failures'] = frozenset(outcomes[config]['failures'])