From b40d80993e3a36ca5b59970e04e46dd7884e7599 Mon Sep 17 00:00:00 2001 From: Peter Kjellerstedt Date: Fri, 29 Sep 2017 18:06:11 +0200 Subject: oeqa/core/loader: Make _built_modules_dict() support packages correctly For test modules in a package, e.g., oelib.license, running `oe-selftest -r oelib.license` or `oe-selftest -r oelib.license.TestSimpleCombinations` would fail with a message that the specified test cases could not be found. This was due to the parsing in _built_modules_dict(), which failed to distinguish between .. and .. and treated both cases as the latter. (From OE-Core rev: 80db3d999ae26d298d9d5418a32b11a4f27af9d5) Signed-off-by: Peter Kjellerstedt Signed-off-by: Ross Burton Signed-off-by: Richard Purdie --- meta/lib/oeqa/core/loader.py | 50 +++++++++++++------------------------------- 1 file changed, 14 insertions(+), 36 deletions(-) (limited to 'meta/lib/oeqa/core') diff --git a/meta/lib/oeqa/core/loader.py b/meta/lib/oeqa/core/loader.py index 332086a13d..975a081ba4 100644 --- a/meta/lib/oeqa/core/loader.py +++ b/meta/lib/oeqa/core/loader.py @@ -2,6 +2,7 @@ # Released under the MIT license (see COPYING.MIT) import os +import re import sys import unittest import inspect @@ -39,42 +40,19 @@ def _built_modules_dict(modules): if modules == None: return modules_dict - for m in modules: - ms = m.split('.') - - if len(ms) == 1: - module_name = ms[0] - if not module_name in modules_dict: - modules_dict[module_name] = {} - elif len(ms) == 2: - module_name = ms[0] - class_name = ms[1] - if not module_name in modules_dict: - modules_dict[module_name] = {} - if not class_name in modules_dict[module_name]: - modules_dict[module_name][class_name] = [] - elif len(ms) == 3: - module_name = ms[0] - class_name = ms[1] - test_name = ms[2] - - if not module_name in modules_dict: - modules_dict[module_name] = {} - if not class_name in modules_dict[module_name]: - modules_dict[module_name][class_name] = [] - if not test_name in modules_dict[module_name][class_name]: - modules_dict[module_name][class_name].append(test_name) - elif len(ms) >= 4: - module_name = '.'.join(ms[0:-2]) - class_name = ms[-2] - test_name = ms[-1] - - if not module_name in modules_dict: - modules_dict[module_name] = {} - if not class_name in modules_dict[module_name]: - modules_dict[module_name][class_name] = [] - if not test_name in modules_dict[module_name][class_name]: - modules_dict[module_name][class_name].append(test_name) + for module in modules: + # Assumption: package and module names do not contain upper case + # characters, whereas class names do + m = re.match(r'^([^A-Z]+)(?:\.([A-Z][^.]*)(?:\.([^.]+))?)?$', module) + + module_name, class_name, test_name = m.groups() + + if module_name and module_name not in modules_dict: + modules_dict[module_name] = {} + if class_name and class_name not in modules_dict[module_name]: + modules_dict[module_name][class_name] = [] + if test_name and test_name not in modules_dict[module_name][class_name]: + modules_dict[module_name][class_name].append(test_name) return modules_dict -- cgit v1.2.3-54-g00ecf