mbed-os

Fork of mbed-os by erkin yucel

Committer:
xuaner
Date:
Thu Jul 20 14:26:57 2017 +0000
Revision:
1:3deb71413561
Parent:
0:f269e3021894
mbed_os

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elessair 0:f269e3021894 1 """
elessair 0:f269e3021894 2 mbed SDK
elessair 0:f269e3021894 3 Copyright (c) 2011-2016 ARM Limited
elessair 0:f269e3021894 4
elessair 0:f269e3021894 5 Licensed under the Apache License, Version 2.0 (the "License");
elessair 0:f269e3021894 6 you may not use this file except in compliance with the License.
elessair 0:f269e3021894 7 You may obtain a copy of the License at
elessair 0:f269e3021894 8
elessair 0:f269e3021894 9 http://www.apache.org/licenses/LICENSE-2.0
elessair 0:f269e3021894 10
elessair 0:f269e3021894 11 Unless required by applicable law or agreed to in writing, software
elessair 0:f269e3021894 12 distributed under the License is distributed on an "AS IS" BASIS,
elessair 0:f269e3021894 13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
elessair 0:f269e3021894 14 See the License for the specific language governing permissions and
elessair 0:f269e3021894 15 limitations under the License.
elessair 0:f269e3021894 16 """
elessair 0:f269e3021894 17
elessair 0:f269e3021894 18 from tools.build_api import get_config
elessair 0:f269e3021894 19 from tools.targets import set_targets_json_location, Target
elessair 0:f269e3021894 20 from tools.config import ConfigException, Config
elessair 0:f269e3021894 21 import os, sys
elessair 0:f269e3021894 22
elessair 0:f269e3021894 23 # Compare the output of config against a dictionary of known good results
elessair 0:f269e3021894 24 def compare_config(cfg, expected):
elessair 0:f269e3021894 25 try:
elessair 0:f269e3021894 26 for k in cfg:
elessair 0:f269e3021894 27 if cfg[k].value != expected[k]:
elessair 0:f269e3021894 28 return "'%s': expected '%s', got '%s'" % (k, expected[k], cfg[k].value)
elessair 0:f269e3021894 29 except KeyError:
elessair 0:f269e3021894 30 raise
elessair 0:f269e3021894 31 return "Unexpected key '%s' in configuration data" % k
elessair 0:f269e3021894 32 for k in expected:
elessair 0:f269e3021894 33 if k not in ["desc", "expected_macros", "expected_features"] + cfg.keys():
elessair 0:f269e3021894 34 return "Expected key '%s' was not found in configuration data" % k
elessair 0:f269e3021894 35 return ""
elessair 0:f269e3021894 36
elessair 0:f269e3021894 37 def test_tree(full_name, name):
elessair 0:f269e3021894 38 failed = 0
elessair 0:f269e3021894 39 sys.path.append(full_name)
elessair 0:f269e3021894 40 if "test_data" in sys.modules:
elessair 0:f269e3021894 41 del sys.modules["test_data"]
elessair 0:f269e3021894 42 import test_data
elessair 0:f269e3021894 43 # If the test defines custom targets, they must exist in a file called
elessair 0:f269e3021894 44 # "targets.json" in the test's directory.
elessair 0:f269e3021894 45 if os.path.isfile(os.path.join(full_name, "targets.json")):
elessair 0:f269e3021894 46 set_targets_json_location(os.path.join(full_name, "targets.json"))
elessair 0:f269e3021894 47 else: # uset the regular set of targets
elessair 0:f269e3021894 48 set_targets_json_location()
elessair 0:f269e3021894 49 for target, expected in test_data.expected_results.items():
elessair 0:f269e3021894 50 sys.stdout.write("%s:'%s'(%s) " % (name, expected["desc"], target))
elessair 0:f269e3021894 51 sys.stdout.flush()
elessair 0:f269e3021894 52 err_msg = None
elessair 0:f269e3021894 53 try:
elessair 0:f269e3021894 54 cfg, macros, features = get_config(full_name, target, "GCC_ARM")
elessair 0:f269e3021894 55 macros = Config.config_macros_to_macros(macros)
elessair 0:f269e3021894 56 except ConfigException as e:
elessair 0:f269e3021894 57 err_msg = e.message
elessair 0:f269e3021894 58 if err_msg:
elessair 0:f269e3021894 59 if expected.has_key("exception_msg"):
elessair 0:f269e3021894 60 if err_msg.find(expected["exception_msg"]) == -1:
elessair 0:f269e3021894 61 print "FAILED!"
elessair 0:f269e3021894 62 sys.stderr.write(" Unexpected error message!\n")
elessair 0:f269e3021894 63 sys.stderr.write(" Expected: '%s'\n" % expected["exception_msg"])
elessair 0:f269e3021894 64 sys.stderr.write(" Got: '%s'\n" % err_msg)
elessair 0:f269e3021894 65 failed += 1
elessair 0:f269e3021894 66 else:
elessair 0:f269e3021894 67 print "OK"
elessair 0:f269e3021894 68 else:
elessair 0:f269e3021894 69 print "FAILED!"
elessair 0:f269e3021894 70 sys.stderr.write(" Error while getting configuration!\n")
elessair 0:f269e3021894 71 sys.stderr.write(" " + err_msg + "\n")
elessair 0:f269e3021894 72 failed += 1
elessair 0:f269e3021894 73 else:
elessair 0:f269e3021894 74 res = compare_config(cfg, expected)
elessair 0:f269e3021894 75 expected_macros = expected.get("expected_macros", None)
elessair 0:f269e3021894 76 expected_features = expected.get("expected_features", None)
elessair 0:f269e3021894 77
elessair 0:f269e3021894 78 if res:
elessair 0:f269e3021894 79 print "FAILED!"
elessair 0:f269e3021894 80 sys.stdout.write(" " + res + "\n")
elessair 0:f269e3021894 81 failed += 1
elessair 0:f269e3021894 82 elif expected_macros is not None:
elessair 0:f269e3021894 83 if sorted(expected_macros) != sorted(macros):
elessair 0:f269e3021894 84 print "FAILED!"
elessair 0:f269e3021894 85 sys.stderr.write(" List of macros doesn't match\n")
elessair 0:f269e3021894 86 sys.stderr.write(" Expected: '%s'\n" % ",".join(sorted(expected_macros)))
elessair 0:f269e3021894 87 sys.stderr.write(" Got: '%s'\n" % ",".join(sorted(expected_macros)))
elessair 0:f269e3021894 88 failed += 1
elessair 0:f269e3021894 89 else:
elessair 0:f269e3021894 90 print "OK"
elessair 0:f269e3021894 91 elif expected_features is not None:
elessair 0:f269e3021894 92 if sorted(expected_features) != sorted(features):
elessair 0:f269e3021894 93 print "FAILED!"
elessair 0:f269e3021894 94 sys.stderr.write(" List of features doesn't match\n")
elessair 0:f269e3021894 95 sys.stderr.write(" Expected: '%s'\n" % ",".join(sorted(expected_features)))
elessair 0:f269e3021894 96 sys.stderr.write(" Got: '%s'\n" % ",".join(sorted(expected_features)))
elessair 0:f269e3021894 97 failed += 1
elessair 0:f269e3021894 98 else:
elessair 0:f269e3021894 99 print "OK"
elessair 0:f269e3021894 100 else:
elessair 0:f269e3021894 101 print "OK"
elessair 0:f269e3021894 102 sys.path.remove(full_name)
elessair 0:f269e3021894 103 return failed
elessair 0:f269e3021894 104
elessair 0:f269e3021894 105 failed = 0
elessair 0:f269e3021894 106 root_dir = os.path.abspath(os.path.dirname(__file__))
elessair 0:f269e3021894 107 tlist = sorted(os.listdir(root_dir), key = lambda e: int(e[4:]) if e.startswith('test') else -1)
elessair 0:f269e3021894 108 for test_name in tlist:
elessair 0:f269e3021894 109 full_name = os.path.join(root_dir, test_name)
elessair 0:f269e3021894 110 if os.path.isdir(full_name) and test_name.startswith('test'):
elessair 0:f269e3021894 111 failed += test_tree(full_name, test_name)
elessair 0:f269e3021894 112 sys.exit(failed)
elessair 0:f269e3021894 113