Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
test/config_test/config_test.py@22:9e85236d8716, 2016-07-16 (annotated)
- Committer:
- screamer
- Date:
- Sat Jul 16 00:34:03 2016 +0100
- Revision:
- 22:9e85236d8716
- Parent:
- 13:ab47a20b66f0
- Child:
- 31:8ea194f6145b
Sync with the mbedmicro/mbed tools
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 1 | """ |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 2 | mbed SDK |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 3 | Copyright (c) 2011-2016 ARM Limited |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 4 | |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 5 | Licensed under the Apache License, Version 2.0 (the "License"); |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 6 | you may not use this file except in compliance with the License. |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 7 | You may obtain a copy of the License at |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 8 | |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 9 | http://www.apache.org/licenses/LICENSE-2.0 |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 10 | |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 11 | Unless required by applicable law or agreed to in writing, software |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 12 | distributed under the License is distributed on an "AS IS" BASIS, |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 14 | See the License for the specific language governing permissions and |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 15 | limitations under the License. |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 16 | """ |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 17 | |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 18 | from tools.build_api import get_config |
| screamer | 22:9e85236d8716 | 19 | from tools.targets import set_targets_json_location, Target |
| screamer | 13:ab47a20b66f0 | 20 | from tools.config import ConfigException, Config |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 21 | import os, sys |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 22 | |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 23 | # Compare the output of config against a dictionary of known good results |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 24 | def compare_config(cfg, expected): |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 25 | try: |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 26 | for k in cfg: |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 27 | if cfg[k].value != expected[k]: |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 28 | return "'%s': expected '%s', got '%s'" % (k, expected[k], cfg[k].value) |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 29 | except KeyError: |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 30 | return "Unexpected key '%s' in configuration data" % k |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 31 | for k in expected: |
| screamer | 13:ab47a20b66f0 | 32 | if k not in ["desc", "expected_macros", "expected_features"] + cfg.keys(): |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 33 | return "Expected key '%s' was not found in configuration data" % k |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 34 | return "" |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 35 | |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 36 | def test_tree(full_name, name): |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 37 | failed = 0 |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 38 | sys.path.append(full_name) |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 39 | if "test_data" in sys.modules: |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 40 | del sys.modules["test_data"] |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 41 | import test_data |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 42 | for target, expected in test_data.expected_results.items(): |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 43 | sys.stdout.write("%s:'%s'(%s) " % (name, expected["desc"], target)) |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 44 | sys.stdout.flush() |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 45 | err_msg = None |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 46 | try: |
| screamer | 22:9e85236d8716 | 47 | # Use 'set_targets_json_location' to remove the previous custom targets from the target list |
| screamer | 22:9e85236d8716 | 48 | set_targets_json_location(Target._Target__targets_json_location) |
| screamer | 13:ab47a20b66f0 | 49 | cfg, macros, features = get_config(full_name, target, "GCC_ARM") |
| screamer | 13:ab47a20b66f0 | 50 | macros = Config.config_macros_to_macros(macros) |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 51 | except ConfigException as e: |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 52 | err_msg = e.message |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 53 | if err_msg: |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 54 | if expected.has_key("exception_msg"): |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 55 | if err_msg.find(expected["exception_msg"]) == -1: |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 56 | print "FAILED!" |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 57 | sys.stderr.write(" Unexpected error message!\n") |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 58 | sys.stderr.write(" Expected: '%s'\n" % expected["exception_msg"]) |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 59 | sys.stderr.write(" Got: '%s'\n" % err_msg) |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 60 | failed += 1 |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 61 | else: |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 62 | print "OK" |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 63 | else: |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 64 | print "FAILED!" |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 65 | sys.stderr.write(" Error while getting configuration!\n") |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 66 | sys.stderr.write(" " + err_msg + "\n") |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 67 | failed += 1 |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 68 | else: |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 69 | res = compare_config(cfg, expected) |
| screamer | 13:ab47a20b66f0 | 70 | expected_macros = expected.get("expected_macros", None) |
| screamer | 13:ab47a20b66f0 | 71 | expected_features = expected.get("expected_features", None) |
| screamer | 13:ab47a20b66f0 | 72 | |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 73 | if res: |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 74 | print "FAILED!" |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 75 | sys.stdout.write(" " + res + "\n") |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 76 | failed += 1 |
| screamer | 13:ab47a20b66f0 | 77 | elif expected_macros is not None: |
| screamer | 13:ab47a20b66f0 | 78 | if sorted(expected_macros) != sorted(macros): |
| screamer | 13:ab47a20b66f0 | 79 | print "FAILED!" |
| screamer | 13:ab47a20b66f0 | 80 | sys.stderr.write(" List of macros doesn't match\n") |
| screamer | 13:ab47a20b66f0 | 81 | sys.stderr.write(" Expected: '%s'\n" % ",".join(sorted(expected_macros))) |
| screamer | 13:ab47a20b66f0 | 82 | sys.stderr.write(" Got: '%s'\n" % ",".join(sorted(expected_macros))) |
| screamer | 13:ab47a20b66f0 | 83 | failed += 1 |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 84 | else: |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 85 | print "OK" |
| screamer | 13:ab47a20b66f0 | 86 | elif expected_features is not None: |
| screamer | 13:ab47a20b66f0 | 87 | if sorted(expected_features) != sorted(features): |
| screamer | 13:ab47a20b66f0 | 88 | print "FAILED!" |
| screamer | 13:ab47a20b66f0 | 89 | sys.stderr.write(" List of features doesn't match\n") |
| screamer | 13:ab47a20b66f0 | 90 | sys.stderr.write(" Expected: '%s'\n" % ",".join(sorted(expected_features))) |
| screamer | 13:ab47a20b66f0 | 91 | sys.stderr.write(" Got: '%s'\n" % ",".join(sorted(expected_features))) |
| screamer | 13:ab47a20b66f0 | 92 | failed += 1 |
| screamer | 13:ab47a20b66f0 | 93 | else: |
| screamer | 13:ab47a20b66f0 | 94 | print "OK" |
| screamer | 13:ab47a20b66f0 | 95 | else: |
| screamer | 13:ab47a20b66f0 | 96 | print "OK" |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 97 | sys.path.remove(full_name) |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 98 | return failed |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 99 | |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 100 | failed = 0 |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 101 | root_dir = os.path.abspath(os.path.dirname(__file__)) |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 102 | tlist = sorted(os.listdir(root_dir), key = lambda e: int(e[4:]) if e.startswith('test') else -1) |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 103 | for test_name in tlist: |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 104 | full_name = os.path.join(root_dir, test_name) |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 105 | if os.path.isdir(full_name) and test_name.startswith('test'): |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 106 | failed += test_tree(full_name, test_name) |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 107 | sys.exit(failed) |
| Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 108 |