Clone of official tools

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?

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