the other jimmy / mbed-sdk-tools

Fork of mbed-sdk-tools by mbed official

Committer:
screamer
Date:
Thu Jul 14 20:21:19 2016 +0100
Revision:
13:ab47a20b66f0
Parent:
9:2d27d77ada5c
Child:
22:9e85236d8716
Apply latest 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 13:ab47a20b66f0 19 from tools.config import ConfigException, Config
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 13:ab47a20b66f0 31 if k not in ["desc", "expected_macros", "expected_features"] + cfg.keys():
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 13:ab47a20b66f0 46 cfg, macros, features = get_config(full_name, target, "GCC_ARM")
screamer 13:ab47a20b66f0 47 macros = Config.config_macros_to_macros(macros)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 48 except ConfigException as e:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 49 err_msg = e.message
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 50 if err_msg:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 51 if expected.has_key("exception_msg"):
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 52 if err_msg.find(expected["exception_msg"]) == -1:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 53 print "FAILED!"
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 54 sys.stderr.write(" Unexpected error message!\n")
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 55 sys.stderr.write(" Expected: '%s'\n" % expected["exception_msg"])
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 56 sys.stderr.write(" Got: '%s'\n" % err_msg)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 57 failed += 1
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 58 else:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 59 print "OK"
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 60 else:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 61 print "FAILED!"
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 62 sys.stderr.write(" Error while getting configuration!\n")
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 63 sys.stderr.write(" " + err_msg + "\n")
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 64 failed += 1
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 65 else:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 66 res = compare_config(cfg, expected)
screamer 13:ab47a20b66f0 67 expected_macros = expected.get("expected_macros", None)
screamer 13:ab47a20b66f0 68 expected_features = expected.get("expected_features", None)
screamer 13:ab47a20b66f0 69
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 70 if res:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 71 print "FAILED!"
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 72 sys.stdout.write(" " + res + "\n")
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 73 failed += 1
screamer 13:ab47a20b66f0 74 elif expected_macros is not None:
screamer 13:ab47a20b66f0 75 if sorted(expected_macros) != sorted(macros):
screamer 13:ab47a20b66f0 76 print "FAILED!"
screamer 13:ab47a20b66f0 77 sys.stderr.write(" List of macros doesn't match\n")
screamer 13:ab47a20b66f0 78 sys.stderr.write(" Expected: '%s'\n" % ",".join(sorted(expected_macros)))
screamer 13:ab47a20b66f0 79 sys.stderr.write(" Got: '%s'\n" % ",".join(sorted(expected_macros)))
screamer 13:ab47a20b66f0 80 failed += 1
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 81 else:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 82 print "OK"
screamer 13:ab47a20b66f0 83 elif expected_features is not None:
screamer 13:ab47a20b66f0 84 if sorted(expected_features) != sorted(features):
screamer 13:ab47a20b66f0 85 print "FAILED!"
screamer 13:ab47a20b66f0 86 sys.stderr.write(" List of features doesn't match\n")
screamer 13:ab47a20b66f0 87 sys.stderr.write(" Expected: '%s'\n" % ",".join(sorted(expected_features)))
screamer 13:ab47a20b66f0 88 sys.stderr.write(" Got: '%s'\n" % ",".join(sorted(expected_features)))
screamer 13:ab47a20b66f0 89 failed += 1
screamer 13:ab47a20b66f0 90 else:
screamer 13:ab47a20b66f0 91 print "OK"
screamer 13:ab47a20b66f0 92 else:
screamer 13:ab47a20b66f0 93 print "OK"
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 94 sys.path.remove(full_name)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 95 return failed
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 96
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 97 failed = 0
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 98 root_dir = os.path.abspath(os.path.dirname(__file__))
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 99 tlist = sorted(os.listdir(root_dir), key = lambda e: int(e[4:]) if e.startswith('test') else -1)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 100 for test_name in tlist:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 101 full_name = os.path.join(root_dir, test_name)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 102 if os.path.isdir(full_name) and test_name.startswith('test'):
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 103 failed += test_tree(full_name, test_name)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 104 sys.exit(failed)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 105