Clone of official tools
Diff: test/config_test/config_test.py
- Revision:
- 9:2d27d77ada5c
- Child:
- 13:ab47a20b66f0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/config_test/config_test.py Tue Jun 14 11:07:30 2016 +0100 @@ -0,0 +1,94 @@ +""" +mbed SDK +Copyright (c) 2011-2016 ARM Limited + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +""" + +from tools.build_api import get_config +from tools.config import ConfigException +import os, sys + +# Compare the output of config against a dictionary of known good results +def compare_config(cfg, expected): + try: + for k in cfg: + if cfg[k].value != expected[k]: + return "'%s': expected '%s', got '%s'" % (k, expected[k], cfg[k].value) + except KeyError: + return "Unexpected key '%s' in configuration data" % k + for k in expected: + if k != "desc" and k != "expected_macros" and not k in cfg: + return "Expected key '%s' was not found in configuration data" % k + return "" + +def test_tree(full_name, name): + failed = 0 + sys.path.append(full_name) + if "test_data" in sys.modules: + del sys.modules["test_data"] + import test_data + for target, expected in test_data.expected_results.items(): + sys.stdout.write("%s:'%s'(%s) " % (name, expected["desc"], target)) + sys.stdout.flush() + err_msg = None + try: + cfg, macros = get_config(full_name, target, "GCC_ARM") + except ConfigException as e: + err_msg = e.message + if err_msg: + if expected.has_key("exception_msg"): + if err_msg.find(expected["exception_msg"]) == -1: + print "FAILED!" + sys.stderr.write(" Unexpected error message!\n") + sys.stderr.write(" Expected: '%s'\n" % expected["exception_msg"]) + sys.stderr.write(" Got: '%s'\n" % err_msg) + failed += 1 + else: + print "OK" + else: + print "FAILED!" + sys.stderr.write(" Error while getting configuration!\n") + sys.stderr.write(" " + err_msg + "\n") + failed += 1 + else: + res = compare_config(cfg, expected) + if res: + print "FAILED!" + sys.stdout.write(" " + res + "\n") + failed += 1 + else: + expected_macros = expected.get("expected_macros", None) + if expected_macros is not None: + if sorted(expected_macros) != sorted(macros): + print "FAILED!" + sys.stderr.write(" List of macros doesn't match\n") + sys.stderr.write(" Expected: '%s'\n" % ",".join(sorted(expected_macros))) + sys.stderr.write(" Got: '%s'\n" % ",".join(sorted(expected_macros))) + failed += 1 + else: + print "OK" + else: + print "OK" + sys.path.remove(full_name) + return failed + +failed = 0 +root_dir = os.path.abspath(os.path.dirname(__file__)) +tlist = sorted(os.listdir(root_dir), key = lambda e: int(e[4:]) if e.startswith('test') else -1) +for test_name in tlist: + full_name = os.path.join(root_dir, test_name) + if os.path.isdir(full_name) and test_name.startswith('test'): + failed += test_tree(full_name, test_name) +sys.exit(failed) +