the other jimmy / mbed-sdk-tools

Fork of mbed-sdk-tools by mbed official

Committer:
The Other Jimmy
Date:
Wed Jan 04 11:58:24 2017 -0600
Revision:
32:8ea194f6145b
Parent:
22:9e85236d8716
Update tools to follow mbed-os tools release 5.3.1

Who changed what in which revision?

UserRevisionLine numberNew 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:
The Other Jimmy 32:8ea194f6145b 30 raise
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 31 return "Unexpected key '%s' in configuration data" % k
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 32 for k in expected:
screamer 13:ab47a20b66f0 33 if k not in ["desc", "expected_macros", "expected_features"] + cfg.keys():
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 34 return "Expected key '%s' was not found in configuration data" % k
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 35 return ""
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 36
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 37 def test_tree(full_name, name):
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 38 failed = 0
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 39 sys.path.append(full_name)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 40 if "test_data" in sys.modules:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 41 del sys.modules["test_data"]
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 42 import test_data
The Other Jimmy 32:8ea194f6145b 43 # If the test defines custom targets, they must exist in a file called
The Other Jimmy 32:8ea194f6145b 44 # "targets.json" in the test's directory.
The Other Jimmy 32:8ea194f6145b 45 if os.path.isfile(os.path.join(full_name, "targets.json")):
The Other Jimmy 32:8ea194f6145b 46 set_targets_json_location(os.path.join(full_name, "targets.json"))
The Other Jimmy 32:8ea194f6145b 47 else: # uset the regular set of targets
The Other Jimmy 32:8ea194f6145b 48 set_targets_json_location()
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 49 for target, expected in test_data.expected_results.items():
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 50 sys.stdout.write("%s:'%s'(%s) " % (name, expected["desc"], target))
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 51 sys.stdout.flush()
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 52 err_msg = None
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 53 try:
screamer 13:ab47a20b66f0 54 cfg, macros, features = get_config(full_name, target, "GCC_ARM")
screamer 13:ab47a20b66f0 55 macros = Config.config_macros_to_macros(macros)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 56 except ConfigException as e:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 57 err_msg = e.message
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 58 if err_msg:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 59 if expected.has_key("exception_msg"):
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 60 if err_msg.find(expected["exception_msg"]) == -1:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 61 print "FAILED!"
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 62 sys.stderr.write(" Unexpected error message!\n")
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 63 sys.stderr.write(" Expected: '%s'\n" % expected["exception_msg"])
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 64 sys.stderr.write(" Got: '%s'\n" % err_msg)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 65 failed += 1
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 66 else:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 67 print "OK"
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 68 else:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 69 print "FAILED!"
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 70 sys.stderr.write(" Error while getting configuration!\n")
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 71 sys.stderr.write(" " + err_msg + "\n")
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 72 failed += 1
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 73 else:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 74 res = compare_config(cfg, expected)
screamer 13:ab47a20b66f0 75 expected_macros = expected.get("expected_macros", None)
screamer 13:ab47a20b66f0 76 expected_features = expected.get("expected_features", None)
screamer 13:ab47a20b66f0 77
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 78 if res:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 79 print "FAILED!"
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 80 sys.stdout.write(" " + res + "\n")
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 81 failed += 1
screamer 13:ab47a20b66f0 82 elif expected_macros is not None:
screamer 13:ab47a20b66f0 83 if sorted(expected_macros) != sorted(macros):
screamer 13:ab47a20b66f0 84 print "FAILED!"
screamer 13:ab47a20b66f0 85 sys.stderr.write(" List of macros doesn't match\n")
screamer 13:ab47a20b66f0 86 sys.stderr.write(" Expected: '%s'\n" % ",".join(sorted(expected_macros)))
screamer 13:ab47a20b66f0 87 sys.stderr.write(" Got: '%s'\n" % ",".join(sorted(expected_macros)))
screamer 13:ab47a20b66f0 88 failed += 1
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 89 else:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 90 print "OK"
screamer 13:ab47a20b66f0 91 elif expected_features is not None:
screamer 13:ab47a20b66f0 92 if sorted(expected_features) != sorted(features):
screamer 13:ab47a20b66f0 93 print "FAILED!"
screamer 13:ab47a20b66f0 94 sys.stderr.write(" List of features doesn't match\n")
screamer 13:ab47a20b66f0 95 sys.stderr.write(" Expected: '%s'\n" % ",".join(sorted(expected_features)))
screamer 13:ab47a20b66f0 96 sys.stderr.write(" Got: '%s'\n" % ",".join(sorted(expected_features)))
screamer 13:ab47a20b66f0 97 failed += 1
screamer 13:ab47a20b66f0 98 else:
screamer 13:ab47a20b66f0 99 print "OK"
screamer 13:ab47a20b66f0 100 else:
screamer 13:ab47a20b66f0 101 print "OK"
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 102 sys.path.remove(full_name)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 103 return failed
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 104
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 105 failed = 0
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 106 root_dir = os.path.abspath(os.path.dirname(__file__))
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 107 tlist = sorted(os.listdir(root_dir), key = lambda e: int(e[4:]) if e.startswith('test') else -1)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 108 for test_name in tlist:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 109 full_name = os.path.join(root_dir, test_name)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 110 if os.path.isdir(full_name) and test_name.startswith('test'):
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 111 failed += test_tree(full_name, test_name)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 112 sys.exit(failed)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 113