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