takashi kadono / Mbed OS Nucleo446_SSD1331

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 """Tests for the toolchain sub-system"""
kadonotakashi 0:8fdf9a60065b 2 import sys
kadonotakashi 0:8fdf9a60065b 3 import os
kadonotakashi 0:8fdf9a60065b 4 from string import printable
kadonotakashi 0:8fdf9a60065b 5 from copy import deepcopy
kadonotakashi 0:8fdf9a60065b 6 from mock import MagicMock, patch
kadonotakashi 0:8fdf9a60065b 7 from hypothesis import given, settings
kadonotakashi 0:8fdf9a60065b 8 from hypothesis.strategies import text, lists, fixed_dictionaries, booleans
kadonotakashi 0:8fdf9a60065b 9
kadonotakashi 0:8fdf9a60065b 10 ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..",
kadonotakashi 0:8fdf9a60065b 11 ".."))
kadonotakashi 0:8fdf9a60065b 12 sys.path.insert(0, ROOT)
kadonotakashi 0:8fdf9a60065b 13
kadonotakashi 0:8fdf9a60065b 14 from tools.toolchains import (
kadonotakashi 0:8fdf9a60065b 15 TOOLCHAIN_CLASSES,
kadonotakashi 0:8fdf9a60065b 16 TOOLCHAIN_PATHS,
kadonotakashi 0:8fdf9a60065b 17 mbedToolchain,
kadonotakashi 0:8fdf9a60065b 18 )
kadonotakashi 0:8fdf9a60065b 19 from tools.resources import LEGACY_TOOLCHAIN_NAMES, Resources, FileType
kadonotakashi 0:8fdf9a60065b 20 from tools.targets import TARGET_MAP, set_targets_json_location
kadonotakashi 0:8fdf9a60065b 21 from tools.notifier.mock import MockNotifier
kadonotakashi 0:8fdf9a60065b 22
kadonotakashi 0:8fdf9a60065b 23 ALPHABET = [char for char in printable if char not in [u'.', u'/', u'\\']]
kadonotakashi 0:8fdf9a60065b 24
kadonotakashi 0:8fdf9a60065b 25
kadonotakashi 0:8fdf9a60065b 26 @patch('tools.toolchains.arm.run_cmd')
kadonotakashi 0:8fdf9a60065b 27 def test_arm_version_check(_run_cmd):
kadonotakashi 0:8fdf9a60065b 28 set_targets_json_location()
kadonotakashi 0:8fdf9a60065b 29 _run_cmd.return_value = ("""
kadonotakashi 0:8fdf9a60065b 30 Product: ARM Compiler 5.06
kadonotakashi 0:8fdf9a60065b 31 Component: ARM Compiler 5.06 update 5 (build 528)
kadonotakashi 0:8fdf9a60065b 32 Tool: armcc [4d3621]
kadonotakashi 0:8fdf9a60065b 33 """, "", 0)
kadonotakashi 0:8fdf9a60065b 34 notifier = MockNotifier()
kadonotakashi 0:8fdf9a60065b 35 toolchain = TOOLCHAIN_CLASSES["ARM"](TARGET_MAP["K64F"], notify=notifier)
kadonotakashi 0:8fdf9a60065b 36 toolchain.version_check()
kadonotakashi 0:8fdf9a60065b 37 assert notifier.messages == []
kadonotakashi 0:8fdf9a60065b 38 _run_cmd.return_value = ("""
kadonotakashi 0:8fdf9a60065b 39 Product: MDK Professional 5.22
kadonotakashi 0:8fdf9a60065b 40 Component: ARM Compiler 5.06 update 5 (build 528)
kadonotakashi 0:8fdf9a60065b 41 Tool: armcc [4d3621]
kadonotakashi 0:8fdf9a60065b 42 """, "", 0)
kadonotakashi 0:8fdf9a60065b 43 toolchain.version_check()
kadonotakashi 0:8fdf9a60065b 44 assert notifier.messages == []
kadonotakashi 0:8fdf9a60065b 45 _run_cmd.return_value = ("""
kadonotakashi 0:8fdf9a60065b 46 Product: ARM Compiler
kadonotakashi 0:8fdf9a60065b 47 Component: ARM Compiler
kadonotakashi 0:8fdf9a60065b 48 Tool: armcc [4d3621]
kadonotakashi 0:8fdf9a60065b 49 """, "", 0)
kadonotakashi 0:8fdf9a60065b 50 toolchain.version_check()
kadonotakashi 0:8fdf9a60065b 51 assert len(notifier.messages) == 1
kadonotakashi 0:8fdf9a60065b 52
kadonotakashi 0:8fdf9a60065b 53
kadonotakashi 0:8fdf9a60065b 54 @patch('tools.toolchains.iar.run_cmd')
kadonotakashi 0:8fdf9a60065b 55 def test_iar_version_check(_run_cmd):
kadonotakashi 0:8fdf9a60065b 56 set_targets_json_location()
kadonotakashi 0:8fdf9a60065b 57 _run_cmd.return_value = ("""
kadonotakashi 0:8fdf9a60065b 58 IAR ANSI C/C++ Compiler V7.80.1.28/LNX for ARM
kadonotakashi 0:8fdf9a60065b 59 """, "", 0)
kadonotakashi 0:8fdf9a60065b 60 notifier = MockNotifier()
kadonotakashi 0:8fdf9a60065b 61 toolchain = TOOLCHAIN_CLASSES["IAR"](TARGET_MAP["K64F"], notify=notifier)
kadonotakashi 0:8fdf9a60065b 62 toolchain.version_check()
kadonotakashi 0:8fdf9a60065b 63 assert notifier.messages == []
kadonotakashi 0:8fdf9a60065b 64 _run_cmd.return_value = ("""
kadonotakashi 0:8fdf9a60065b 65 IAR ANSI C/C++ Compiler V/LNX for ARM
kadonotakashi 0:8fdf9a60065b 66 """, "", 0)
kadonotakashi 0:8fdf9a60065b 67 toolchain.version_check()
kadonotakashi 0:8fdf9a60065b 68 assert len(notifier.messages) == 1
kadonotakashi 0:8fdf9a60065b 69 _run_cmd.return_value = ("""
kadonotakashi 0:8fdf9a60065b 70 IAR ANSI C/C++ Compiler V/8.80LNX for ARM
kadonotakashi 0:8fdf9a60065b 71 """, "", 0)
kadonotakashi 0:8fdf9a60065b 72 toolchain.version_check()
kadonotakashi 0:8fdf9a60065b 73 assert len(notifier.messages) == 2
kadonotakashi 0:8fdf9a60065b 74
kadonotakashi 0:8fdf9a60065b 75
kadonotakashi 0:8fdf9a60065b 76 @patch('tools.toolchains.gcc.run_cmd')
kadonotakashi 0:8fdf9a60065b 77 def test_gcc_version_check(_run_cmd):
kadonotakashi 0:8fdf9a60065b 78 set_targets_json_location()
kadonotakashi 0:8fdf9a60065b 79 _run_cmd.return_value = ("""
kadonotakashi 0:8fdf9a60065b 80 arm-none-eabi-gcc (Arch Repository) 6.4.4
kadonotakashi 0:8fdf9a60065b 81 Copyright (C) 2018 Free Software Foundation, Inc.
kadonotakashi 0:8fdf9a60065b 82 This is free software; see the source for copying conditions. There is NO
kadonotakashi 0:8fdf9a60065b 83 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
kadonotakashi 0:8fdf9a60065b 84 """, "", 0)
kadonotakashi 0:8fdf9a60065b 85 notifier = MockNotifier()
kadonotakashi 0:8fdf9a60065b 86 toolchain = TOOLCHAIN_CLASSES["GCC_ARM"](
kadonotakashi 0:8fdf9a60065b 87 TARGET_MAP["K64F"], notify=notifier)
kadonotakashi 0:8fdf9a60065b 88 toolchain.version_check()
kadonotakashi 0:8fdf9a60065b 89 assert notifier.messages == []
kadonotakashi 0:8fdf9a60065b 90 _run_cmd.return_value = ("""
kadonotakashi 0:8fdf9a60065b 91 arm-none-eabi-gcc (Arch Repository) 8.1.0
kadonotakashi 0:8fdf9a60065b 92 Copyright (C) 2018 Free Software Foundation, Inc.
kadonotakashi 0:8fdf9a60065b 93 This is free software; see the source for copying conditions. There is NO
kadonotakashi 0:8fdf9a60065b 94 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
kadonotakashi 0:8fdf9a60065b 95 """, "", 0)
kadonotakashi 0:8fdf9a60065b 96 toolchain.version_check()
kadonotakashi 0:8fdf9a60065b 97 assert len(notifier.messages) == 1
kadonotakashi 0:8fdf9a60065b 98 _run_cmd.return_value = ("""
kadonotakashi 0:8fdf9a60065b 99 arm-none-eabi-gcc (Arch Repository)
kadonotakashi 0:8fdf9a60065b 100 Copyright (C) 2018 Free Software Foundation, Inc.
kadonotakashi 0:8fdf9a60065b 101 This is free software; see the source for copying conditions. There is NO
kadonotakashi 0:8fdf9a60065b 102 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
kadonotakashi 0:8fdf9a60065b 103 """, "", 0)
kadonotakashi 0:8fdf9a60065b 104 toolchain.version_check()
kadonotakashi 0:8fdf9a60065b 105 assert len(notifier.messages) == 2
kadonotakashi 0:8fdf9a60065b 106
kadonotakashi 0:8fdf9a60065b 107
kadonotakashi 0:8fdf9a60065b 108 @given(fixed_dictionaries({
kadonotakashi 0:8fdf9a60065b 109 'common': lists(text()),
kadonotakashi 0:8fdf9a60065b 110 'c': lists(text()),
kadonotakashi 0:8fdf9a60065b 111 'cxx': lists(text()),
kadonotakashi 0:8fdf9a60065b 112 'asm': lists(text()),
kadonotakashi 0:8fdf9a60065b 113 'ld': lists(text())}),
kadonotakashi 0:8fdf9a60065b 114 lists(text(min_size=1, alphabet=ALPHABET), min_size=1))
kadonotakashi 0:8fdf9a60065b 115 def test_toolchain_profile_c(profile, source_file):
kadonotakashi 0:8fdf9a60065b 116 """Test that the appropriate profile parameters are passed to the
kadonotakashi 0:8fdf9a60065b 117 C compiler"""
kadonotakashi 0:8fdf9a60065b 118 filename = deepcopy(source_file)
kadonotakashi 0:8fdf9a60065b 119 filename[-1] += ".c"
kadonotakashi 0:8fdf9a60065b 120 to_compile = os.path.join(*filename)
kadonotakashi 0:8fdf9a60065b 121 set_targets_json_location()
kadonotakashi 0:8fdf9a60065b 122 with patch('os.mkdir') as _mkdir:
kadonotakashi 0:8fdf9a60065b 123 for _, tc_class in TOOLCHAIN_CLASSES.items():
kadonotakashi 0:8fdf9a60065b 124 toolchain = tc_class(TARGET_MAP["K64F"], build_profile=profile,
kadonotakashi 0:8fdf9a60065b 125 notify=MockNotifier())
kadonotakashi 0:8fdf9a60065b 126 toolchain.inc_md5 = ""
kadonotakashi 0:8fdf9a60065b 127 toolchain.build_dir = ""
kadonotakashi 0:8fdf9a60065b 128 toolchain.config = MagicMock(app_config_location=None)
kadonotakashi 0:8fdf9a60065b 129 for parameter in profile['c'] + profile['common']:
kadonotakashi 0:8fdf9a60065b 130 assert any(parameter in cmd for cmd in toolchain.cc), \
kadonotakashi 0:8fdf9a60065b 131 "Toolchain %s did not propagate arg %s" % (toolchain.name,
kadonotakashi 0:8fdf9a60065b 132 parameter)
kadonotakashi 0:8fdf9a60065b 133 compile_command = toolchain.compile_command(to_compile,
kadonotakashi 0:8fdf9a60065b 134 to_compile + ".o", [])
kadonotakashi 0:8fdf9a60065b 135 for parameter in profile['c'] + profile['common']:
kadonotakashi 0:8fdf9a60065b 136 assert any(parameter in cmd for cmd in compile_command), \
kadonotakashi 0:8fdf9a60065b 137 "Toolchain %s did not propagate arg %s" % (toolchain.name,
kadonotakashi 0:8fdf9a60065b 138 parameter)
kadonotakashi 0:8fdf9a60065b 139
kadonotakashi 0:8fdf9a60065b 140 @given(fixed_dictionaries({
kadonotakashi 0:8fdf9a60065b 141 'common': lists(text()),
kadonotakashi 0:8fdf9a60065b 142 'c': lists(text()),
kadonotakashi 0:8fdf9a60065b 143 'cxx': lists(text()),
kadonotakashi 0:8fdf9a60065b 144 'asm': lists(text()),
kadonotakashi 0:8fdf9a60065b 145 'ld': lists(text())}),
kadonotakashi 0:8fdf9a60065b 146 lists(text(min_size=1, alphabet=ALPHABET), min_size=1))
kadonotakashi 0:8fdf9a60065b 147 def test_toolchain_profile_cpp(profile, source_file):
kadonotakashi 0:8fdf9a60065b 148 """Test that the appropriate profile parameters are passed to the
kadonotakashi 0:8fdf9a60065b 149 C++ compiler"""
kadonotakashi 0:8fdf9a60065b 150 filename = deepcopy(source_file)
kadonotakashi 0:8fdf9a60065b 151 filename[-1] += ".cpp"
kadonotakashi 0:8fdf9a60065b 152 to_compile = os.path.join(*filename)
kadonotakashi 0:8fdf9a60065b 153 with patch('os.mkdir') as _mkdir:
kadonotakashi 0:8fdf9a60065b 154 for _, tc_class in TOOLCHAIN_CLASSES.items():
kadonotakashi 0:8fdf9a60065b 155 toolchain = tc_class(TARGET_MAP["K64F"], build_profile=profile,
kadonotakashi 0:8fdf9a60065b 156 notify=MockNotifier())
kadonotakashi 0:8fdf9a60065b 157 toolchain.inc_md5 = ""
kadonotakashi 0:8fdf9a60065b 158 toolchain.build_dir = ""
kadonotakashi 0:8fdf9a60065b 159 toolchain.config = MagicMock(app_config_location=None)
kadonotakashi 0:8fdf9a60065b 160 for parameter in profile['cxx'] + profile['common']:
kadonotakashi 0:8fdf9a60065b 161 assert any(parameter in cmd for cmd in toolchain.cppc), \
kadonotakashi 0:8fdf9a60065b 162 "Toolchain %s did not propagate arg %s" % (toolchain.name,
kadonotakashi 0:8fdf9a60065b 163 parameter)
kadonotakashi 0:8fdf9a60065b 164 compile_command = toolchain.compile_command(to_compile,
kadonotakashi 0:8fdf9a60065b 165 to_compile + ".o", [])
kadonotakashi 0:8fdf9a60065b 166 for parameter in profile['cxx'] + profile['common']:
kadonotakashi 0:8fdf9a60065b 167 assert any(parameter in cmd for cmd in compile_command), \
kadonotakashi 0:8fdf9a60065b 168 "Toolchain %s did not propagate arg %s" % (toolchain.name,
kadonotakashi 0:8fdf9a60065b 169 parameter)
kadonotakashi 0:8fdf9a60065b 170
kadonotakashi 0:8fdf9a60065b 171 @given(fixed_dictionaries({
kadonotakashi 0:8fdf9a60065b 172 'common': lists(text()),
kadonotakashi 0:8fdf9a60065b 173 'c': lists(text()),
kadonotakashi 0:8fdf9a60065b 174 'cxx': lists(text()),
kadonotakashi 0:8fdf9a60065b 175 'asm': lists(text()),
kadonotakashi 0:8fdf9a60065b 176 'ld': lists(text())}),
kadonotakashi 0:8fdf9a60065b 177 lists(text(min_size=1, alphabet=ALPHABET), min_size=1))
kadonotakashi 0:8fdf9a60065b 178 def test_toolchain_profile_asm(profile, source_file):
kadonotakashi 0:8fdf9a60065b 179 """Test that the appropriate profile parameters are passed to the
kadonotakashi 0:8fdf9a60065b 180 Assembler"""
kadonotakashi 0:8fdf9a60065b 181 filename = deepcopy(source_file)
kadonotakashi 0:8fdf9a60065b 182 filename[-1] += ".s"
kadonotakashi 0:8fdf9a60065b 183 to_compile = os.path.join(*filename)
kadonotakashi 0:8fdf9a60065b 184 with patch('os.mkdir') as _mkdir:
kadonotakashi 0:8fdf9a60065b 185 for _, tc_class in TOOLCHAIN_CLASSES.items():
kadonotakashi 0:8fdf9a60065b 186 toolchain = tc_class(TARGET_MAP["K64F"], build_profile=profile,
kadonotakashi 0:8fdf9a60065b 187 notify=MockNotifier())
kadonotakashi 0:8fdf9a60065b 188 toolchain.inc_md5 = ""
kadonotakashi 0:8fdf9a60065b 189 toolchain.build_dir = ""
kadonotakashi 0:8fdf9a60065b 190 toolchain.config = MagicMock()
kadonotakashi 0:8fdf9a60065b 191 toolchain.config.get_config_data_macros.return_value = []
kadonotakashi 0:8fdf9a60065b 192 for parameter in profile['asm']:
kadonotakashi 0:8fdf9a60065b 193 assert any(parameter in cmd for cmd in toolchain.asm), \
kadonotakashi 0:8fdf9a60065b 194 "Toolchain %s did not propagate arg %s" % (toolchain.name,
kadonotakashi 0:8fdf9a60065b 195 parameter)
kadonotakashi 0:8fdf9a60065b 196 compile_command = toolchain.compile_command(to_compile,
kadonotakashi 0:8fdf9a60065b 197 to_compile + ".o", [])
kadonotakashi 0:8fdf9a60065b 198 if not compile_command:
kadonotakashi 0:8fdf9a60065b 199 assert compile_command, to_compile
kadonotakashi 0:8fdf9a60065b 200 for parameter in profile['asm']:
kadonotakashi 0:8fdf9a60065b 201 assert any(parameter in cmd for cmd in compile_command), \
kadonotakashi 0:8fdf9a60065b 202 "Toolchain %s did not propagate arg %s" % (toolchain.name,
kadonotakashi 0:8fdf9a60065b 203 parameter)
kadonotakashi 0:8fdf9a60065b 204
kadonotakashi 0:8fdf9a60065b 205 for name, Class in TOOLCHAIN_CLASSES.items():
kadonotakashi 0:8fdf9a60065b 206 CLS = Class(TARGET_MAP["K64F"], notify=MockNotifier())
kadonotakashi 0:8fdf9a60065b 207 assert name == CLS.name or name == LEGACY_TOOLCHAIN_NAMES[CLS.name]
kadonotakashi 0:8fdf9a60065b 208
kadonotakashi 0:8fdf9a60065b 209 @given(fixed_dictionaries({
kadonotakashi 0:8fdf9a60065b 210 'common': lists(text()),
kadonotakashi 0:8fdf9a60065b 211 'c': lists(text()),
kadonotakashi 0:8fdf9a60065b 212 'cxx': lists(text()),
kadonotakashi 0:8fdf9a60065b 213 'asm': lists(text()),
kadonotakashi 0:8fdf9a60065b 214 'ld': lists(text(min_size=1))}),
kadonotakashi 0:8fdf9a60065b 215 lists(text(min_size=1, alphabet=ALPHABET), min_size=1))
kadonotakashi 0:8fdf9a60065b 216 def test_toolchain_profile_ld(profile, source_file):
kadonotakashi 0:8fdf9a60065b 217 """Test that the appropriate profile parameters are passed to the
kadonotakashi 0:8fdf9a60065b 218 Linker"""
kadonotakashi 0:8fdf9a60065b 219 filename = deepcopy(source_file)
kadonotakashi 0:8fdf9a60065b 220 filename[-1] += ".o"
kadonotakashi 0:8fdf9a60065b 221 to_compile = os.path.join(*filename)
kadonotakashi 0:8fdf9a60065b 222 with patch('os.mkdir') as _mkdir,\
kadonotakashi 0:8fdf9a60065b 223 patch('tools.toolchains.mbedToolchain.default_cmd') as _dflt_cmd:
kadonotakashi 0:8fdf9a60065b 224 for _, tc_class in TOOLCHAIN_CLASSES.items():
kadonotakashi 0:8fdf9a60065b 225 toolchain = tc_class(TARGET_MAP["K64F"], build_profile=profile,
kadonotakashi 0:8fdf9a60065b 226 notify=MockNotifier())
kadonotakashi 0:8fdf9a60065b 227 toolchain.RESPONSE_FILES = False
kadonotakashi 0:8fdf9a60065b 228 toolchain.inc_md5 = ""
kadonotakashi 0:8fdf9a60065b 229 toolchain.build_dir = ""
kadonotakashi 0:8fdf9a60065b 230 for parameter in profile['ld']:
kadonotakashi 0:8fdf9a60065b 231 assert any(parameter in cmd for cmd in toolchain.ld), \
kadonotakashi 0:8fdf9a60065b 232 "Toolchain %s did not propagate arg %s" % (toolchain.name,
kadonotakashi 0:8fdf9a60065b 233 parameter)
kadonotakashi 0:8fdf9a60065b 234 toolchain.link(to_compile + ".elf", [to_compile], [], [], None)
kadonotakashi 0:8fdf9a60065b 235 compile_cmd = _dflt_cmd.call_args_list
kadonotakashi 0:8fdf9a60065b 236 if not compile_cmd:
kadonotakashi 0:8fdf9a60065b 237 assert compile_cmd, to_compile
kadonotakashi 0:8fdf9a60065b 238 for parameter in profile['ld']:
kadonotakashi 0:8fdf9a60065b 239 assert any(parameter in cmd[0][0] for cmd in compile_cmd), \
kadonotakashi 0:8fdf9a60065b 240 "Toolchain %s did not propagate arg %s" % (toolchain.name,
kadonotakashi 0:8fdf9a60065b 241 parameter)
kadonotakashi 0:8fdf9a60065b 242
kadonotakashi 0:8fdf9a60065b 243 for name, Class in TOOLCHAIN_CLASSES.items():
kadonotakashi 0:8fdf9a60065b 244 CLS = Class(TARGET_MAP["K64F"], notify=MockNotifier())
kadonotakashi 0:8fdf9a60065b 245 assert name == CLS.name or name == LEGACY_TOOLCHAIN_NAMES[CLS.name]
kadonotakashi 0:8fdf9a60065b 246
kadonotakashi 0:8fdf9a60065b 247
kadonotakashi 0:8fdf9a60065b 248 @given(lists(text(alphabet=ALPHABET, min_size=1), min_size=1))
kadonotakashi 0:8fdf9a60065b 249 def test_detect_duplicates(filenames):
kadonotakashi 0:8fdf9a60065b 250 c_sources = [os.path.join(name, "dupe.c") for name in filenames]
kadonotakashi 0:8fdf9a60065b 251 s_sources = [os.path.join(name, "dupe.s") for name in filenames]
kadonotakashi 0:8fdf9a60065b 252 cpp_sources = [os.path.join(name, "dupe.cpp") for name in filenames]
kadonotakashi 0:8fdf9a60065b 253 notify = MockNotifier()
kadonotakashi 0:8fdf9a60065b 254 res = Resources(notify)
kadonotakashi 0:8fdf9a60065b 255 res.add_files_to_type(FileType.C_SRC, c_sources)
kadonotakashi 0:8fdf9a60065b 256 res.add_files_to_type(FileType.ASM_SRC, s_sources)
kadonotakashi 0:8fdf9a60065b 257 res.add_files_to_type(FileType.CPP_SRC, cpp_sources)
kadonotakashi 0:8fdf9a60065b 258 assert res.detect_duplicates() == 1,\
kadonotakashi 0:8fdf9a60065b 259 "Not Enough duplicates found"
kadonotakashi 0:8fdf9a60065b 260
kadonotakashi 0:8fdf9a60065b 261 notification = notify.messages[0]
kadonotakashi 0:8fdf9a60065b 262 assert "dupe.o" in notification["message"]
kadonotakashi 0:8fdf9a60065b 263 assert "dupe.s" in notification["message"]
kadonotakashi 0:8fdf9a60065b 264 assert "dupe.c" in notification["message"]
kadonotakashi 0:8fdf9a60065b 265 assert "dupe.cpp" in notification["message"]
kadonotakashi 0:8fdf9a60065b 266
kadonotakashi 0:8fdf9a60065b 267 @given(text(alphabet=ALPHABET + [os.sep], min_size=1))
kadonotakashi 0:8fdf9a60065b 268 @given(booleans())
kadonotakashi 0:8fdf9a60065b 269 @given(booleans())
kadonotakashi 0:8fdf9a60065b 270 @settings(max_examples=20)
kadonotakashi 0:8fdf9a60065b 271 def test_path_specified_gcc(gcc_loc, exists_at_loc, exists_in_path):
kadonotakashi 0:8fdf9a60065b 272 with patch('tools.toolchains.gcc.exists') as _exists:
kadonotakashi 0:8fdf9a60065b 273 with patch('tools.toolchains.gcc.find_executable') as _find:
kadonotakashi 0:8fdf9a60065b 274 _exists.return_value = exists_at_loc
kadonotakashi 0:8fdf9a60065b 275 _find.return_value = exists_in_path
kadonotakashi 0:8fdf9a60065b 276 TOOLCHAIN_PATHS['GCC_ARM'] = gcc_loc
kadonotakashi 0:8fdf9a60065b 277 toolchain_class = TOOLCHAIN_CLASSES["GCC_ARM"]
kadonotakashi 0:8fdf9a60065b 278 found_p = toolchain_class.check_executable()
kadonotakashi 0:8fdf9a60065b 279 assert found_p == (exists_at_loc or exists_in_path)
kadonotakashi 0:8fdf9a60065b 280 if exists_at_loc:
kadonotakashi 0:8fdf9a60065b 281 assert TOOLCHAIN_PATHS['GCC_ARM'] == gcc_loc
kadonotakashi 0:8fdf9a60065b 282 elif exists_in_path:
kadonotakashi 0:8fdf9a60065b 283 assert TOOLCHAIN_PATHS['GCC_ARM'] == ''