Color Oled(SSD1331) connect to STMicroelectronics Nucleo-F466

Dependencies:   ssd1331

Committer:
kadonotakashi
Date:
Thu Oct 11 02:27:46 2018 +0000
Revision:
3:f3764f852aa8
Parent:
0:8fdf9a60065b
Nucreo 446 + SSD1331 test version;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kadonotakashi 0:8fdf9a60065b 1 #! /usr/bin/env python2
kadonotakashi 0:8fdf9a60065b 2 """
kadonotakashi 0:8fdf9a60065b 3 Copyright 2018 ARM Limited
kadonotakashi 0:8fdf9a60065b 4 Licensed under the Apache License, Version 2.0 (the "License");
kadonotakashi 0:8fdf9a60065b 5 you may not use this file except in compliance with the License.
kadonotakashi 0:8fdf9a60065b 6 You may obtain a copy of the License at
kadonotakashi 0:8fdf9a60065b 7
kadonotakashi 0:8fdf9a60065b 8 http://www.apache.org/licenses/LICENSE-2.0
kadonotakashi 0:8fdf9a60065b 9
kadonotakashi 0:8fdf9a60065b 10 Unless required by applicable law or agreed to in writing, software
kadonotakashi 0:8fdf9a60065b 11 distributed under the License is distributed on an "AS IS" BASIS,
kadonotakashi 0:8fdf9a60065b 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kadonotakashi 0:8fdf9a60065b 13 See the License for the specific language governing permissions and
kadonotakashi 0:8fdf9a60065b 14 limitations under the License.
kadonotakashi 0:8fdf9a60065b 15 """
kadonotakashi 0:8fdf9a60065b 16
kadonotakashi 0:8fdf9a60065b 17 from __future__ import print_function, division, absolute_import
kadonotakashi 0:8fdf9a60065b 18 import sys
kadonotakashi 0:8fdf9a60065b 19 import os
kadonotakashi 0:8fdf9a60065b 20 import re
kadonotakashi 0:8fdf9a60065b 21 from os.path import abspath, join, dirname, relpath, sep
kadonotakashi 0:8fdf9a60065b 22 import json
kadonotakashi 0:8fdf9a60065b 23 import traceback
kadonotakashi 0:8fdf9a60065b 24 from fnmatch import translate
kadonotakashi 0:8fdf9a60065b 25 from argparse import ArgumentParser
kadonotakashi 0:8fdf9a60065b 26
kadonotakashi 0:8fdf9a60065b 27 ROOT = abspath(join(dirname(__file__), '..'))
kadonotakashi 0:8fdf9a60065b 28 sys.path.insert(0, ROOT)
kadonotakashi 0:8fdf9a60065b 29
kadonotakashi 0:8fdf9a60065b 30 from tools.config import ConfigException
kadonotakashi 0:8fdf9a60065b 31 from tools.utils import cmd, run_cmd
kadonotakashi 0:8fdf9a60065b 32
kadonotakashi 0:8fdf9a60065b 33 plugins_path = abspath(join(ROOT, 'TEST_APPS', 'icetea_plugins', 'plugins_to_load.py'))
kadonotakashi 0:8fdf9a60065b 34
kadonotakashi 0:8fdf9a60065b 35
kadonotakashi 0:8fdf9a60065b 36 def find_build_from_build_data(build_data, id, target, toolchain):
kadonotakashi 0:8fdf9a60065b 37 if 'builds' not in build_data:
kadonotakashi 0:8fdf9a60065b 38 raise Exception("build data is in wrong format, does not include builds object")
kadonotakashi 0:8fdf9a60065b 39
kadonotakashi 0:8fdf9a60065b 40 for build in build_data['builds']:
kadonotakashi 0:8fdf9a60065b 41 if 'id' in build.keys() \
kadonotakashi 0:8fdf9a60065b 42 and id.upper() in build['id'].upper() \
kadonotakashi 0:8fdf9a60065b 43 and 'target_name' in build.keys() \
kadonotakashi 0:8fdf9a60065b 44 and target.upper() == build['target_name'].upper() \
kadonotakashi 0:8fdf9a60065b 45 and 'toolchain_name' in build.keys() \
kadonotakashi 0:8fdf9a60065b 46 and toolchain.upper() == build['toolchain_name'].upper() \
kadonotakashi 0:8fdf9a60065b 47 and 'result' in build.keys() \
kadonotakashi 0:8fdf9a60065b 48 and "OK" == build['result']:
kadonotakashi 0:8fdf9a60065b 49 return build
kadonotakashi 0:8fdf9a60065b 50 return None
kadonotakashi 0:8fdf9a60065b 51
kadonotakashi 0:8fdf9a60065b 52
kadonotakashi 0:8fdf9a60065b 53 def create_test_suite(target, tool, icetea_json_output, build_data, tests_by_name):
kadonotakashi 0:8fdf9a60065b 54 """
kadonotakashi 0:8fdf9a60065b 55 Create test suite content
kadonotakashi 0:8fdf9a60065b 56 :param target:
kadonotakashi 0:8fdf9a60065b 57 :param tool:
kadonotakashi 0:8fdf9a60065b 58 :param icetea_json_output:
kadonotakashi 0:8fdf9a60065b 59 :param build_data:
kadonotakashi 0:8fdf9a60065b 60 :return:
kadonotakashi 0:8fdf9a60065b 61 """
kadonotakashi 0:8fdf9a60065b 62 test_suite = dict()
kadonotakashi 0:8fdf9a60065b 63 test_suite['testcases'] = list()
kadonotakashi 0:8fdf9a60065b 64
kadonotakashi 0:8fdf9a60065b 65 for test in icetea_json_output:
kadonotakashi 0:8fdf9a60065b 66 skip = False
kadonotakashi 0:8fdf9a60065b 67
kadonotakashi 0:8fdf9a60065b 68 for dut in test['requirements']['duts'].values():
kadonotakashi 0:8fdf9a60065b 69 # Set binary path based on application name
kadonotakashi 0:8fdf9a60065b 70 if 'application' in dut.keys() and 'name' in dut['application'].keys():
kadonotakashi 0:8fdf9a60065b 71 build = find_build_from_build_data(
kadonotakashi 0:8fdf9a60065b 72 build_data=build_data,
kadonotakashi 0:8fdf9a60065b 73 id=dut['application']['name'],
kadonotakashi 0:8fdf9a60065b 74 target=target,
kadonotakashi 0:8fdf9a60065b 75 toolchain=tool)
kadonotakashi 0:8fdf9a60065b 76 if build:
kadonotakashi 0:8fdf9a60065b 77 try:
kadonotakashi 0:8fdf9a60065b 78 dut['application']['bin'] = build['bin_fullpath']
kadonotakashi 0:8fdf9a60065b 79 except KeyError:
kadonotakashi 0:8fdf9a60065b 80 raise Exception('Full path is missing from build: {}'.format(build))
kadonotakashi 0:8fdf9a60065b 81 else:
kadonotakashi 0:8fdf9a60065b 82 skip = True
kadonotakashi 0:8fdf9a60065b 83
kadonotakashi 0:8fdf9a60065b 84 if not tests_by_name or is_test_in_test_by_name(test['name'], tests_by_name):
kadonotakashi 0:8fdf9a60065b 85 test_case = {
kadonotakashi 0:8fdf9a60065b 86 'name': test['name'],
kadonotakashi 0:8fdf9a60065b 87 'config': {
kadonotakashi 0:8fdf9a60065b 88 'requirements': set_allowed_platform(test['requirements'], target)
kadonotakashi 0:8fdf9a60065b 89 }
kadonotakashi 0:8fdf9a60065b 90 }
kadonotakashi 0:8fdf9a60065b 91
kadonotakashi 0:8fdf9a60065b 92 # Skip test if not binary path
kadonotakashi 0:8fdf9a60065b 93 if skip:
kadonotakashi 0:8fdf9a60065b 94 test_case['config']['execution'] = {
kadonotakashi 0:8fdf9a60065b 95 'skip': {
kadonotakashi 0:8fdf9a60065b 96 'value': True,
kadonotakashi 0:8fdf9a60065b 97 'reason': "Test requiring application binary not build"
kadonotakashi 0:8fdf9a60065b 98 }
kadonotakashi 0:8fdf9a60065b 99 }
kadonotakashi 0:8fdf9a60065b 100
kadonotakashi 0:8fdf9a60065b 101 test_suite['testcases'].append(test_case)
kadonotakashi 0:8fdf9a60065b 102
kadonotakashi 0:8fdf9a60065b 103 return test_suite
kadonotakashi 0:8fdf9a60065b 104
kadonotakashi 0:8fdf9a60065b 105
kadonotakashi 0:8fdf9a60065b 106 def set_allowed_platform(requirements, target):
kadonotakashi 0:8fdf9a60065b 107 """
kadonotakashi 0:8fdf9a60065b 108 Allowed platform restrict icetea to run tests on specific board
kadonotakashi 0:8fdf9a60065b 109 This targets tests to the right board in case that user has multiple ones connected same time
kadonotakashi 0:8fdf9a60065b 110 """
kadonotakashi 0:8fdf9a60065b 111 if '*' not in requirements['duts'].keys():
kadonotakashi 0:8fdf9a60065b 112 requirements['duts']['*'] = dict()
kadonotakashi 0:8fdf9a60065b 113 requirements['duts']['*']['allowed_platforms'] = [target]
kadonotakashi 0:8fdf9a60065b 114 return requirements
kadonotakashi 0:8fdf9a60065b 115
kadonotakashi 0:8fdf9a60065b 116
kadonotakashi 0:8fdf9a60065b 117 def get_applications(test):
kadonotakashi 0:8fdf9a60065b 118 ret = list()
kadonotakashi 0:8fdf9a60065b 119 for dut in test['requirements']['duts'].values():
kadonotakashi 0:8fdf9a60065b 120 if 'application' in dut.keys() and 'name' in dut['application'].keys():
kadonotakashi 0:8fdf9a60065b 121 ret.append(dut['application']['name'])
kadonotakashi 0:8fdf9a60065b 122 return ret
kadonotakashi 0:8fdf9a60065b 123
kadonotakashi 0:8fdf9a60065b 124
kadonotakashi 0:8fdf9a60065b 125 def filter_test_by_build_data(icetea_json_output, build_data, target, toolchain):
kadonotakashi 0:8fdf9a60065b 126 if not build_data:
kadonotakashi 0:8fdf9a60065b 127 return icetea_json_output
kadonotakashi 0:8fdf9a60065b 128
kadonotakashi 0:8fdf9a60065b 129 ret = list()
kadonotakashi 0:8fdf9a60065b 130 for test in icetea_json_output:
kadonotakashi 0:8fdf9a60065b 131 for dut in test['requirements']['duts'].values():
kadonotakashi 0:8fdf9a60065b 132 if 'application' in dut.keys() and 'name' in dut['application'].keys():
kadonotakashi 0:8fdf9a60065b 133 id = dut['application']['name']
kadonotakashi 0:8fdf9a60065b 134 if find_build_from_build_data(build_data, id, target, toolchain):
kadonotakashi 0:8fdf9a60065b 135 # Test requiring build found
kadonotakashi 0:8fdf9a60065b 136 ret.append(test)
kadonotakashi 0:8fdf9a60065b 137 return ret
kadonotakashi 0:8fdf9a60065b 138
kadonotakashi 0:8fdf9a60065b 139
kadonotakashi 0:8fdf9a60065b 140 def filter_test_by_name(icetea_json_output, test_by_name):
kadonotakashi 0:8fdf9a60065b 141 if not test_by_name:
kadonotakashi 0:8fdf9a60065b 142 return icetea_json_output
kadonotakashi 0:8fdf9a60065b 143 ret = list()
kadonotakashi 0:8fdf9a60065b 144 for test_temp in icetea_json_output:
kadonotakashi 0:8fdf9a60065b 145 if is_test_in_test_by_name(test_temp['name'], test_by_name) and test_temp not in ret:
kadonotakashi 0:8fdf9a60065b 146 ret.append(test_temp)
kadonotakashi 0:8fdf9a60065b 147 return ret
kadonotakashi 0:8fdf9a60065b 148
kadonotakashi 0:8fdf9a60065b 149
kadonotakashi 0:8fdf9a60065b 150 def get_applications_from_test(test):
kadonotakashi 0:8fdf9a60065b 151 ret = list()
kadonotakashi 0:8fdf9a60065b 152 if u'requirements' in test.keys() and u'duts' in test[u'requirements']:
kadonotakashi 0:8fdf9a60065b 153 for name, dut in test[u'requirements'][u'duts'].items():
kadonotakashi 0:8fdf9a60065b 154 if u'application' in dut.keys() and u'name' in dut[u'application']:
kadonotakashi 0:8fdf9a60065b 155 ret.append(dut[u'application'][u'name'])
kadonotakashi 0:8fdf9a60065b 156 return ret
kadonotakashi 0:8fdf9a60065b 157
kadonotakashi 0:8fdf9a60065b 158
kadonotakashi 0:8fdf9a60065b 159 def get_application_list(icetea_json_output, tests_by_name):
kadonotakashi 0:8fdf9a60065b 160 """ Return comma separated list of application which are used in tests """
kadonotakashi 0:8fdf9a60065b 161 ret = list()
kadonotakashi 0:8fdf9a60065b 162 for test in filter_test_by_name(icetea_json_output, tests_by_name):
kadonotakashi 0:8fdf9a60065b 163 ret.extend(get_applications_from_test(test))
kadonotakashi 0:8fdf9a60065b 164 # Remove duplicates
kadonotakashi 0:8fdf9a60065b 165 return list(set(ret))
kadonotakashi 0:8fdf9a60065b 166
kadonotakashi 0:8fdf9a60065b 167
kadonotakashi 0:8fdf9a60065b 168 def icetea_tests(target, tcdir, verbose):
kadonotakashi 0:8fdf9a60065b 169 if not os.path.exists(tcdir):
kadonotakashi 0:8fdf9a60065b 170 raise Exception("Icetea run error: No TEST_APPS folder in {}".format(os.path.curdir))
kadonotakashi 0:8fdf9a60065b 171
kadonotakashi 0:8fdf9a60065b 172 command = ['icetea', '--tcdir', tcdir, '--list', '--json', '--platform_filter', target] \
kadonotakashi 0:8fdf9a60065b 173 + (['-v'] if verbose else [])
kadonotakashi 0:8fdf9a60065b 174
kadonotakashi 0:8fdf9a60065b 175 stdout, stderr, returncode = run_cmd(command)
kadonotakashi 0:8fdf9a60065b 176
kadonotakashi 0:8fdf9a60065b 177 if returncode != 0:
kadonotakashi 0:8fdf9a60065b 178 additional_information = "\ncwd:{} \nCommand:'{}' \noutput:{}".format(os.getcwd(), ' '.join(command),
kadonotakashi 0:8fdf9a60065b 179 stderr.decode())
kadonotakashi 0:8fdf9a60065b 180 raise Exception("Error when running icetea. {}".format(additional_information))
kadonotakashi 0:8fdf9a60065b 181
kadonotakashi 0:8fdf9a60065b 182 return json.loads(stdout)
kadonotakashi 0:8fdf9a60065b 183
kadonotakashi 0:8fdf9a60065b 184
kadonotakashi 0:8fdf9a60065b 185 def is_test_in_test_by_name(test_name, test_by_name):
kadonotakashi 0:8fdf9a60065b 186 for tbn_temp in test_by_name:
kadonotakashi 0:8fdf9a60065b 187 if re.search(translate(tbn_temp), test_name):
kadonotakashi 0:8fdf9a60065b 188 return True
kadonotakashi 0:8fdf9a60065b 189 return False
kadonotakashi 0:8fdf9a60065b 190
kadonotakashi 0:8fdf9a60065b 191
kadonotakashi 0:8fdf9a60065b 192 def check_tests(icetea_json_output):
kadonotakashi 0:8fdf9a60065b 193 """
kadonotakashi 0:8fdf9a60065b 194 Check that all tests have all necessary information
kadonotakashi 0:8fdf9a60065b 195 :return:
kadonotakashi 0:8fdf9a60065b 196 """
kadonotakashi 0:8fdf9a60065b 197 for test in icetea_json_output:
kadonotakashi 0:8fdf9a60065b 198 if not get_applications_from_test(test):
kadonotakashi 0:8fdf9a60065b 199 raise Exception('Test {} does not have application with correct name'.format(test['name']))
kadonotakashi 0:8fdf9a60065b 200
kadonotakashi 0:8fdf9a60065b 201
kadonotakashi 0:8fdf9a60065b 202 def load_build_data(build_data_path):
kadonotakashi 0:8fdf9a60065b 203 """
kadonotakashi 0:8fdf9a60065b 204 :return: build_data.json content as dict and None if build data is not available
kadonotakashi 0:8fdf9a60065b 205 """
kadonotakashi 0:8fdf9a60065b 206 if not os.path.isfile(build_data_path):
kadonotakashi 0:8fdf9a60065b 207 return None
kadonotakashi 0:8fdf9a60065b 208 return json.load(open(build_data_path))
kadonotakashi 0:8fdf9a60065b 209
kadonotakashi 0:8fdf9a60065b 210
kadonotakashi 0:8fdf9a60065b 211 if __name__ == '__main__':
kadonotakashi 0:8fdf9a60065b 212 try:
kadonotakashi 0:8fdf9a60065b 213 # Parse Options
kadonotakashi 0:8fdf9a60065b 214 parser = ArgumentParser()
kadonotakashi 0:8fdf9a60065b 215
kadonotakashi 0:8fdf9a60065b 216 parser.add_argument('-m', '--mcu',
kadonotakashi 0:8fdf9a60065b 217 dest='target',
kadonotakashi 0:8fdf9a60065b 218 default=None,
kadonotakashi 0:8fdf9a60065b 219 help='Test target MCU',
kadonotakashi 0:8fdf9a60065b 220 required=True)
kadonotakashi 0:8fdf9a60065b 221
kadonotakashi 0:8fdf9a60065b 222 parser.add_argument('-t', '--toolchain',
kadonotakashi 0:8fdf9a60065b 223 dest='toolchain',
kadonotakashi 0:8fdf9a60065b 224 default=None,
kadonotakashi 0:8fdf9a60065b 225 help='Toolchain',
kadonotakashi 0:8fdf9a60065b 226 required=True)
kadonotakashi 0:8fdf9a60065b 227
kadonotakashi 0:8fdf9a60065b 228 parser.add_argument('--build-data',
kadonotakashi 0:8fdf9a60065b 229 dest='build_data',
kadonotakashi 0:8fdf9a60065b 230 default=None,
kadonotakashi 0:8fdf9a60065b 231 help='Detail data from build')
kadonotakashi 0:8fdf9a60065b 232
kadonotakashi 0:8fdf9a60065b 233 parser.add_argument('--test-suite',
kadonotakashi 0:8fdf9a60065b 234 dest='test_suite',
kadonotakashi 0:8fdf9a60065b 235 default=None,
kadonotakashi 0:8fdf9a60065b 236 help='Path used for test suite file')
kadonotakashi 0:8fdf9a60065b 237
kadonotakashi 0:8fdf9a60065b 238 parser.add_argument('-n', '--tests-by-name',
kadonotakashi 0:8fdf9a60065b 239 dest='tests_by_name',
kadonotakashi 0:8fdf9a60065b 240 default=None,
kadonotakashi 0:8fdf9a60065b 241 help='Limit the tests to a list (ex. test1,test2,test3)')
kadonotakashi 0:8fdf9a60065b 242
kadonotakashi 0:8fdf9a60065b 243 parser.add_argument('--tcdir',
kadonotakashi 0:8fdf9a60065b 244 dest='tcdir',
kadonotakashi 0:8fdf9a60065b 245 default='TEST_APPS',
kadonotakashi 0:8fdf9a60065b 246 help='Test case directory',
kadonotakashi 0:8fdf9a60065b 247 required=False)
kadonotakashi 0:8fdf9a60065b 248
kadonotakashi 0:8fdf9a60065b 249 parser.add_argument('--compile-list',
kadonotakashi 0:8fdf9a60065b 250 action='store_true',
kadonotakashi 0:8fdf9a60065b 251 dest='compile_list',
kadonotakashi 0:8fdf9a60065b 252 default=False,
kadonotakashi 0:8fdf9a60065b 253 help='List tests, which applications can be compiled')
kadonotakashi 0:8fdf9a60065b 254
kadonotakashi 0:8fdf9a60065b 255 parser.add_argument('--run-list',
kadonotakashi 0:8fdf9a60065b 256 action='store_true',
kadonotakashi 0:8fdf9a60065b 257 dest='run_list',
kadonotakashi 0:8fdf9a60065b 258 default=False,
kadonotakashi 0:8fdf9a60065b 259 help='List tests, which applications are compiled and ready for run')
kadonotakashi 0:8fdf9a60065b 260
kadonotakashi 0:8fdf9a60065b 261 parser.add_argument('--application-list',
kadonotakashi 0:8fdf9a60065b 262 action='store_true',
kadonotakashi 0:8fdf9a60065b 263 dest='application_list',
kadonotakashi 0:8fdf9a60065b 264 default=False,
kadonotakashi 0:8fdf9a60065b 265 help='List applications that need to be build')
kadonotakashi 0:8fdf9a60065b 266
kadonotakashi 0:8fdf9a60065b 267 parser.add_argument('--ignore-checks',
kadonotakashi 0:8fdf9a60065b 268 action='store_true',
kadonotakashi 0:8fdf9a60065b 269 dest='ignore_checks',
kadonotakashi 0:8fdf9a60065b 270 default=False,
kadonotakashi 0:8fdf9a60065b 271 help='Ignore data validation checks')
kadonotakashi 0:8fdf9a60065b 272
kadonotakashi 0:8fdf9a60065b 273 parser.add_argument('-v', '--verbose',
kadonotakashi 0:8fdf9a60065b 274 action='store_true',
kadonotakashi 0:8fdf9a60065b 275 dest='verbose',
kadonotakashi 0:8fdf9a60065b 276 default=False,
kadonotakashi 0:8fdf9a60065b 277 help='Verbose diagnostic output')
kadonotakashi 0:8fdf9a60065b 278
kadonotakashi 0:8fdf9a60065b 279 options = parser.parse_args()
kadonotakashi 0:8fdf9a60065b 280
kadonotakashi 0:8fdf9a60065b 281 icetea_json_output = icetea_tests(options.target, options.tcdir, options.verbose)
kadonotakashi 0:8fdf9a60065b 282 tests_by_name = options.tests_by_name.split(',') if options.tests_by_name else None
kadonotakashi 0:8fdf9a60065b 283 build_data = load_build_data(options.build_data) if options.build_data else None
kadonotakashi 0:8fdf9a60065b 284
kadonotakashi 0:8fdf9a60065b 285 if not options.ignore_checks:
kadonotakashi 0:8fdf9a60065b 286 check_tests(icetea_json_output)
kadonotakashi 0:8fdf9a60065b 287
kadonotakashi 0:8fdf9a60065b 288 if options.compile_list:
kadonotakashi 0:8fdf9a60065b 289 print('Available icetea tests for build \'{}-{}\', location \'{}\''.format(
kadonotakashi 0:8fdf9a60065b 290 options.target, options.toolchain, options.tcdir))
kadonotakashi 0:8fdf9a60065b 291 for test in icetea_json_output:
kadonotakashi 0:8fdf9a60065b 292 print(
kadonotakashi 0:8fdf9a60065b 293 'Test Case:\n Name: {name}\n Path: .{sep}{filepath}\n Test applications: .{sep}{apps}'.format(
kadonotakashi 0:8fdf9a60065b 294 name=test['name'],
kadonotakashi 0:8fdf9a60065b 295 sep=sep,
kadonotakashi 0:8fdf9a60065b 296 filepath=relpath(test['filepath'], ROOT),
kadonotakashi 0:8fdf9a60065b 297 apps=''.join(get_applications(test)).replace('-', os.path.sep)))
kadonotakashi 0:8fdf9a60065b 298
kadonotakashi 0:8fdf9a60065b 299 elif options.run_list:
kadonotakashi 0:8fdf9a60065b 300 print('Available icetea tests for build \'{}-{}\', location \'{}\''.format(
kadonotakashi 0:8fdf9a60065b 301 options.target, options.toolchain, options.tcdir))
kadonotakashi 0:8fdf9a60065b 302
kadonotakashi 0:8fdf9a60065b 303 # Filters
kadonotakashi 0:8fdf9a60065b 304 tests = filter_test_by_name(icetea_json_output, tests_by_name)
kadonotakashi 0:8fdf9a60065b 305 if build_data:
kadonotakashi 0:8fdf9a60065b 306 tests = filter_test_by_build_data(tests, build_data, options.target, options.toolchain)
kadonotakashi 0:8fdf9a60065b 307
kadonotakashi 0:8fdf9a60065b 308 for test in tests:
kadonotakashi 0:8fdf9a60065b 309 print(' test \'{name}\''.format(name=test['name']))
kadonotakashi 0:8fdf9a60065b 310
kadonotakashi 0:8fdf9a60065b 311 elif options.application_list:
kadonotakashi 0:8fdf9a60065b 312 print(','.join(get_application_list(icetea_json_output, tests_by_name)))
kadonotakashi 0:8fdf9a60065b 313
kadonotakashi 0:8fdf9a60065b 314 else:
kadonotakashi 0:8fdf9a60065b 315 if not build_data:
kadonotakashi 0:8fdf9a60065b 316 raise Exception("Build data file does not exist: {}".format(options.build_data))
kadonotakashi 0:8fdf9a60065b 317
kadonotakashi 0:8fdf9a60065b 318 test_suite = create_test_suite(options.target, options.toolchain, icetea_json_output, build_data,
kadonotakashi 0:8fdf9a60065b 319 tests_by_name)
kadonotakashi 0:8fdf9a60065b 320
kadonotakashi 0:8fdf9a60065b 321 if not test_suite['testcases']:
kadonotakashi 0:8fdf9a60065b 322 raise Exception("Test suite is empty. Check that --tcdir and --tests-by-name have correct values")
kadonotakashi 0:8fdf9a60065b 323
kadonotakashi 0:8fdf9a60065b 324 if not options.test_suite:
kadonotakashi 0:8fdf9a60065b 325 raise Exception('--test-suite is required when running tests')
kadonotakashi 0:8fdf9a60065b 326
kadonotakashi 0:8fdf9a60065b 327 with open(options.test_suite, 'w') as f:
kadonotakashi 0:8fdf9a60065b 328 json.dump(test_suite, f, indent=2)
kadonotakashi 0:8fdf9a60065b 329
kadonotakashi 0:8fdf9a60065b 330 # List just for debug
kadonotakashi 0:8fdf9a60065b 331 if options.verbose:
kadonotakashi 0:8fdf9a60065b 332 cmd(['icetea', '--tcdir', options.tcdir, '--list'] + (['-v'] if options.verbose else []))
kadonotakashi 0:8fdf9a60065b 333
kadonotakashi 0:8fdf9a60065b 334 cmd(['icetea', '--tcdir', options.tcdir, '--suite', options.test_suite, '--clean', '--plugin_path',
kadonotakashi 0:8fdf9a60065b 335 plugins_path] + (['-v'] if options.verbose else []))
kadonotakashi 0:8fdf9a60065b 336
kadonotakashi 0:8fdf9a60065b 337 except KeyboardInterrupt as e:
kadonotakashi 0:8fdf9a60065b 338 print('\n[CTRL+c] exit')
kadonotakashi 0:8fdf9a60065b 339 except ConfigException as e:
kadonotakashi 0:8fdf9a60065b 340 # Catching ConfigException here to prevent a traceback
kadonotakashi 0:8fdf9a60065b 341 print('[ERROR] {}'.format(e))
kadonotakashi 0:8fdf9a60065b 342 except Exception as e:
kadonotakashi 0:8fdf9a60065b 343 traceback.print_exc(file=sys.stdout)
kadonotakashi 0:8fdf9a60065b 344 print('[ERROR] {}'.format(e))
kadonotakashi 0:8fdf9a60065b 345 sys.exit(1)