the other jimmy / mbed-sdk-tools

Fork of mbed-sdk-tools by mbed official

Committer:
screamer
Date:
Sat Jul 16 00:34:03 2016 +0100
Revision:
22:9e85236d8716
Parent:
13:ab47a20b66f0
Child:
31:182518299918
Sync with the mbedmicro/mbed tools

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:
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