Rtos API example

Committer:
marcozecchini
Date:
Sat Feb 23 12:13:36 2019 +0000
Revision:
0:9fca2b23d0ba
final commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marcozecchini 0:9fca2b23d0ba 1 #!/usr/bin/env python
marcozecchini 0:9fca2b23d0ba 2 """
marcozecchini 0:9fca2b23d0ba 3 mbed
marcozecchini 0:9fca2b23d0ba 4 Copyright (c) 2017-2017 ARM Limited
marcozecchini 0:9fca2b23d0ba 5
marcozecchini 0:9fca2b23d0ba 6 Licensed under the Apache License, Version 2.0 (the "License");
marcozecchini 0:9fca2b23d0ba 7 you may not use this file except in compliance with the License.
marcozecchini 0:9fca2b23d0ba 8 You may obtain a copy of the License at
marcozecchini 0:9fca2b23d0ba 9
marcozecchini 0:9fca2b23d0ba 10 http://www.apache.org/licenses/LICENSE-2.0
marcozecchini 0:9fca2b23d0ba 11
marcozecchini 0:9fca2b23d0ba 12 Unless required by applicable law or agreed to in writing, software
marcozecchini 0:9fca2b23d0ba 13 distributed under the License is distributed on an "AS IS" BASIS,
marcozecchini 0:9fca2b23d0ba 14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
marcozecchini 0:9fca2b23d0ba 15 See the License for the specific language governing permissions and
marcozecchini 0:9fca2b23d0ba 16 limitations under the License.
marcozecchini 0:9fca2b23d0ba 17 """
marcozecchini 0:9fca2b23d0ba 18 import os
marcozecchini 0:9fca2b23d0ba 19 import sys
marcozecchini 0:9fca2b23d0ba 20 import shutil
marcozecchini 0:9fca2b23d0ba 21 import tempfile
marcozecchini 0:9fca2b23d0ba 22 from os.path import join, abspath, dirname
marcozecchini 0:9fca2b23d0ba 23 from contextlib import contextmanager
marcozecchini 0:9fca2b23d0ba 24 import pytest
marcozecchini 0:9fca2b23d0ba 25
marcozecchini 0:9fca2b23d0ba 26 from tools.targets import TARGETS, TARGET_MAP, Target, update_target_data
marcozecchini 0:9fca2b23d0ba 27 from tools.arm_pack_manager import Cache
marcozecchini 0:9fca2b23d0ba 28
marcozecchini 0:9fca2b23d0ba 29
marcozecchini 0:9fca2b23d0ba 30 def test_device_name():
marcozecchini 0:9fca2b23d0ba 31 """Assert device name is in a pack"""
marcozecchini 0:9fca2b23d0ba 32 cache = Cache(True, True)
marcozecchini 0:9fca2b23d0ba 33 named_targets = (target for target in TARGETS if
marcozecchini 0:9fca2b23d0ba 34 hasattr(target, "device_name"))
marcozecchini 0:9fca2b23d0ba 35 for target in named_targets:
marcozecchini 0:9fca2b23d0ba 36 assert target.device_name in cache.index,\
marcozecchini 0:9fca2b23d0ba 37 ("Target %s contains invalid device_name %s" %
marcozecchini 0:9fca2b23d0ba 38 (target.name, target.device_name))
marcozecchini 0:9fca2b23d0ba 39
marcozecchini 0:9fca2b23d0ba 40 @contextmanager
marcozecchini 0:9fca2b23d0ba 41 def temp_target_file(extra_target, json_filename='custom_targets.json'):
marcozecchini 0:9fca2b23d0ba 42 """Create an extra targets temp file in a context manager
marcozecchini 0:9fca2b23d0ba 43
marcozecchini 0:9fca2b23d0ba 44 :param extra_target: the contents of the extra targets temp file
marcozecchini 0:9fca2b23d0ba 45 """
marcozecchini 0:9fca2b23d0ba 46 tempdir = tempfile.mkdtemp()
marcozecchini 0:9fca2b23d0ba 47 try:
marcozecchini 0:9fca2b23d0ba 48 targetfile = os.path.join(tempdir, json_filename)
marcozecchini 0:9fca2b23d0ba 49 with open(targetfile, 'w') as f:
marcozecchini 0:9fca2b23d0ba 50 f.write(extra_target)
marcozecchini 0:9fca2b23d0ba 51 yield tempdir
marcozecchini 0:9fca2b23d0ba 52 finally:
marcozecchini 0:9fca2b23d0ba 53 # Reset extra targets
marcozecchini 0:9fca2b23d0ba 54 Target.set_targets_json_location()
marcozecchini 0:9fca2b23d0ba 55 # Delete temp files
marcozecchini 0:9fca2b23d0ba 56 shutil.rmtree(tempdir)
marcozecchini 0:9fca2b23d0ba 57
marcozecchini 0:9fca2b23d0ba 58 def test_add_extra_targets():
marcozecchini 0:9fca2b23d0ba 59 """Search for extra targets json in a source folder"""
marcozecchini 0:9fca2b23d0ba 60 test_target_json = """
marcozecchini 0:9fca2b23d0ba 61 {
marcozecchini 0:9fca2b23d0ba 62 "Test_Target": {
marcozecchini 0:9fca2b23d0ba 63 "inherits": ["Target"]
marcozecchini 0:9fca2b23d0ba 64 }
marcozecchini 0:9fca2b23d0ba 65 }
marcozecchini 0:9fca2b23d0ba 66 """
marcozecchini 0:9fca2b23d0ba 67 with temp_target_file(test_target_json) as source_dir:
marcozecchini 0:9fca2b23d0ba 68 Target.add_extra_targets(source_dir=source_dir)
marcozecchini 0:9fca2b23d0ba 69 update_target_data()
marcozecchini 0:9fca2b23d0ba 70
marcozecchini 0:9fca2b23d0ba 71 assert 'Test_Target' in TARGET_MAP
marcozecchini 0:9fca2b23d0ba 72 assert TARGET_MAP['Test_Target'].core is None, \
marcozecchini 0:9fca2b23d0ba 73 "attributes should be inherited from Target"
marcozecchini 0:9fca2b23d0ba 74
marcozecchini 0:9fca2b23d0ba 75 def test_modify_existing_target():
marcozecchini 0:9fca2b23d0ba 76 """Set default targets file, then override base Target definition"""
marcozecchini 0:9fca2b23d0ba 77 initial_target_json = """
marcozecchini 0:9fca2b23d0ba 78 {
marcozecchini 0:9fca2b23d0ba 79 "Target": {
marcozecchini 0:9fca2b23d0ba 80 "core": null,
marcozecchini 0:9fca2b23d0ba 81 "default_toolchain": "ARM",
marcozecchini 0:9fca2b23d0ba 82 "supported_toolchains": null,
marcozecchini 0:9fca2b23d0ba 83 "extra_labels": [],
marcozecchini 0:9fca2b23d0ba 84 "is_disk_virtual": false,
marcozecchini 0:9fca2b23d0ba 85 "macros": [],
marcozecchini 0:9fca2b23d0ba 86 "device_has": [],
marcozecchini 0:9fca2b23d0ba 87 "features": [],
marcozecchini 0:9fca2b23d0ba 88 "detect_code": [],
marcozecchini 0:9fca2b23d0ba 89 "public": false,
marcozecchini 0:9fca2b23d0ba 90 "default_lib": "std",
marcozecchini 0:9fca2b23d0ba 91 "bootloader_supported": false
marcozecchini 0:9fca2b23d0ba 92 },
marcozecchini 0:9fca2b23d0ba 93 "Test_Target": {
marcozecchini 0:9fca2b23d0ba 94 "inherits": ["Target"],
marcozecchini 0:9fca2b23d0ba 95 "core": "Cortex-M4",
marcozecchini 0:9fca2b23d0ba 96 "supported_toolchains": ["ARM"]
marcozecchini 0:9fca2b23d0ba 97 }
marcozecchini 0:9fca2b23d0ba 98 }"""
marcozecchini 0:9fca2b23d0ba 99
marcozecchini 0:9fca2b23d0ba 100 test_target_json = """
marcozecchini 0:9fca2b23d0ba 101 {
marcozecchini 0:9fca2b23d0ba 102 "Target": {
marcozecchini 0:9fca2b23d0ba 103 "core": "Cortex-M0",
marcozecchini 0:9fca2b23d0ba 104 "default_toolchain": "GCC_ARM",
marcozecchini 0:9fca2b23d0ba 105 "supported_toolchains": null,
marcozecchini 0:9fca2b23d0ba 106 "extra_labels": [],
marcozecchini 0:9fca2b23d0ba 107 "is_disk_virtual": false,
marcozecchini 0:9fca2b23d0ba 108 "macros": [],
marcozecchini 0:9fca2b23d0ba 109 "device_has": [],
marcozecchini 0:9fca2b23d0ba 110 "features": [],
marcozecchini 0:9fca2b23d0ba 111 "detect_code": [],
marcozecchini 0:9fca2b23d0ba 112 "public": false,
marcozecchini 0:9fca2b23d0ba 113 "default_lib": "std",
marcozecchini 0:9fca2b23d0ba 114 "bootloader_supported": true
marcozecchini 0:9fca2b23d0ba 115 }
marcozecchini 0:9fca2b23d0ba 116 }
marcozecchini 0:9fca2b23d0ba 117 """
marcozecchini 0:9fca2b23d0ba 118
marcozecchini 0:9fca2b23d0ba 119 with temp_target_file(initial_target_json, json_filename="targets.json") as targets_dir:
marcozecchini 0:9fca2b23d0ba 120 Target.set_targets_json_location(os.path.join(targets_dir, "targets.json"))
marcozecchini 0:9fca2b23d0ba 121 update_target_data()
marcozecchini 0:9fca2b23d0ba 122 assert TARGET_MAP["Test_Target"].core == "Cortex-M4"
marcozecchini 0:9fca2b23d0ba 123 assert TARGET_MAP["Test_Target"].default_toolchain == 'ARM'
marcozecchini 0:9fca2b23d0ba 124 assert TARGET_MAP["Test_Target"].bootloader_supported == False
marcozecchini 0:9fca2b23d0ba 125
marcozecchini 0:9fca2b23d0ba 126 with temp_target_file(test_target_json) as source_dir:
marcozecchini 0:9fca2b23d0ba 127 Target.add_extra_targets(source_dir=source_dir)
marcozecchini 0:9fca2b23d0ba 128 update_target_data()
marcozecchini 0:9fca2b23d0ba 129
marcozecchini 0:9fca2b23d0ba 130 assert TARGET_MAP["Test_Target"].core == "Cortex-M4"
marcozecchini 0:9fca2b23d0ba 131 # The existing target should not be modified by custom targets
marcozecchini 0:9fca2b23d0ba 132 assert TARGET_MAP["Test_Target"].default_toolchain != 'GCC_ARM'
marcozecchini 0:9fca2b23d0ba 133 assert TARGET_MAP["Test_Target"].bootloader_supported != True