Clone of official tools
test/config_test/config_test.py@9:2d27d77ada5c, 2016-06-14 (annotated)
- Committer:
- Screamer@Y5070-M.virtuoso
- Date:
- Tue Jun 14 11:07:30 2016 +0100
- Revision:
- 9:2d27d77ada5c
- Child:
- 13:ab47a20b66f0
Updated tools based on latest live tools code
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@Y5070-M.virtuoso | 9:2d27d77ada5c | 19 | from tools.config import ConfigException |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 20 | import os, sys |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 21 | |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 22 | # Compare the output of config against a dictionary of known good results |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 23 | def compare_config(cfg, expected): |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 24 | try: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 25 | for k in cfg: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 26 | if cfg[k].value != expected[k]: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 27 | return "'%s': expected '%s', got '%s'" % (k, expected[k], cfg[k].value) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 28 | except KeyError: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 29 | return "Unexpected key '%s' in configuration data" % k |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 30 | for k in expected: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 31 | if k != "desc" and k != "expected_macros" and not k in cfg: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 32 | return "Expected key '%s' was not found in configuration data" % k |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 33 | return "" |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 34 | |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 35 | def test_tree(full_name, name): |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 36 | failed = 0 |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 37 | sys.path.append(full_name) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 38 | if "test_data" in sys.modules: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 39 | del sys.modules["test_data"] |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 40 | import test_data |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 41 | for target, expected in test_data.expected_results.items(): |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 42 | sys.stdout.write("%s:'%s'(%s) " % (name, expected["desc"], target)) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 43 | sys.stdout.flush() |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 44 | err_msg = None |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 45 | try: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 46 | cfg, macros = get_config(full_name, target, "GCC_ARM") |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 47 | except ConfigException as e: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 48 | err_msg = e.message |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 49 | if err_msg: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 50 | if expected.has_key("exception_msg"): |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 51 | if err_msg.find(expected["exception_msg"]) == -1: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 52 | print "FAILED!" |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 53 | sys.stderr.write(" Unexpected error message!\n") |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 54 | sys.stderr.write(" Expected: '%s'\n" % expected["exception_msg"]) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 55 | sys.stderr.write(" Got: '%s'\n" % err_msg) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 56 | failed += 1 |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 57 | else: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 58 | print "OK" |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 59 | else: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 60 | print "FAILED!" |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 61 | sys.stderr.write(" Error while getting configuration!\n") |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 62 | sys.stderr.write(" " + err_msg + "\n") |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 63 | failed += 1 |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 64 | else: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 65 | res = compare_config(cfg, expected) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 66 | if res: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 67 | print "FAILED!" |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 68 | sys.stdout.write(" " + res + "\n") |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 69 | failed += 1 |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 70 | else: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 71 | expected_macros = expected.get("expected_macros", None) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 72 | if expected_macros is not None: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 73 | if sorted(expected_macros) != sorted(macros): |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 74 | print "FAILED!" |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 75 | sys.stderr.write(" List of macros doesn't match\n") |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 76 | sys.stderr.write(" Expected: '%s'\n" % ",".join(sorted(expected_macros))) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 77 | sys.stderr.write(" Got: '%s'\n" % ",".join(sorted(expected_macros))) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 78 | failed += 1 |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 79 | else: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 80 | print "OK" |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 81 | else: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 82 | print "OK" |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 83 | sys.path.remove(full_name) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 84 | return failed |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 85 | |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 86 | failed = 0 |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 87 | root_dir = os.path.abspath(os.path.dirname(__file__)) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 88 | tlist = sorted(os.listdir(root_dir), key = lambda e: int(e[4:]) if e.startswith('test') else -1) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 89 | for test_name in tlist: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 90 | full_name = os.path.join(root_dir, test_name) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 91 | if os.path.isdir(full_name) and test_name.startswith('test'): |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 92 | failed += test_tree(full_name, test_name) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 93 | sys.exit(failed) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 94 |