mirror of https://github.com/ARMmbed/mbed-os.git
Added property based regression test to travis
parent
d88852d150
commit
fd04ea2125
|
@ -19,3 +19,4 @@ install:
|
||||||
- sudo pip install jinja2
|
- sudo pip install jinja2
|
||||||
- sudo pip install pytest
|
- sudo pip install pytest
|
||||||
- sudo pip install pylint
|
- sudo pip install pylint
|
||||||
|
- sudo pip install hypothesis
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
from string import printable
|
||||||
|
from copy import deepcopy
|
||||||
|
from hypothesis import given
|
||||||
|
from hypothesis.strategies import text, lists, fixed_dictionaries
|
||||||
|
|
||||||
ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", ".."))
|
ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", ".."))
|
||||||
sys.path.insert(0, ROOT)
|
sys.path.insert(0, ROOT)
|
||||||
|
@ -11,3 +15,71 @@ def test_instantiation():
|
||||||
for name, Class in TOOLCHAIN_CLASSES.items():
|
for name, Class in TOOLCHAIN_CLASSES.items():
|
||||||
CLS = Class(TARGET_MAP["K64F"])
|
CLS = Class(TARGET_MAP["K64F"])
|
||||||
assert name == CLS.name or name == LEGACY_TOOLCHAIN_NAMES[CLS.name]
|
assert name == CLS.name or name == LEGACY_TOOLCHAIN_NAMES[CLS.name]
|
||||||
|
|
||||||
|
ALPHABET = [char for char in printable if char not in [u'.', u'/']]
|
||||||
|
|
||||||
|
@given(fixed_dictionaries({
|
||||||
|
'common': lists(text()),
|
||||||
|
'c': lists(text()),
|
||||||
|
'cxx': lists(text()),
|
||||||
|
'asm': lists(text()),
|
||||||
|
'ld': lists(text())}),
|
||||||
|
lists(text(min_size=1, alphabet=ALPHABET), min_size=1)
|
||||||
|
)
|
||||||
|
def test_toolchain_profile_c(profile, source_file):
|
||||||
|
filename = deepcopy(source_file)
|
||||||
|
filename[-1] += ".c"
|
||||||
|
to_compile = os.path.join(*filename)
|
||||||
|
for name, Class in TOOLCHAIN_CLASSES.items():
|
||||||
|
CLS = Class(TARGET_MAP["K64F"], build_profile=profile)
|
||||||
|
CLS.inc_md5 = ""
|
||||||
|
CLS.build_dir = ""
|
||||||
|
compile_command = CLS.compile_command(to_compile, to_compile + ".o", [])
|
||||||
|
for parameter in profile['c'] + profile['common']:
|
||||||
|
assert any(parameter in cmd for cmd in compile_command), \
|
||||||
|
"Toolchain %s did not propigate arg %s" % (CLS.name, parameter)
|
||||||
|
|
||||||
|
@given(fixed_dictionaries({
|
||||||
|
'common': lists(text()),
|
||||||
|
'c': lists(text()),
|
||||||
|
'cxx': lists(text()),
|
||||||
|
'asm': lists(text()),
|
||||||
|
'ld': lists(text())}),
|
||||||
|
lists(text(min_size=1, alphabet=ALPHABET), min_size=1)
|
||||||
|
)
|
||||||
|
def test_toolchain_profile_cpp(profile, source_file):
|
||||||
|
filename = deepcopy(source_file)
|
||||||
|
filename[-1] += ".cpp"
|
||||||
|
to_compile = os.path.join(*filename)
|
||||||
|
for name, Class in TOOLCHAIN_CLASSES.items():
|
||||||
|
CLS = Class(TARGET_MAP["K64F"], build_profile=profile)
|
||||||
|
CLS.inc_md5 = ""
|
||||||
|
CLS.build_dir = ""
|
||||||
|
compile_command = CLS.compile_command(to_compile, to_compile + ".o", [])
|
||||||
|
for parameter in profile['cxx'] + profile['common']:
|
||||||
|
assert any(parameter in cmd for cmd in compile_command), \
|
||||||
|
"Toolchain %s did not propigate arg %s" % (CLS.name, parameter)
|
||||||
|
|
||||||
|
@given(fixed_dictionaries({
|
||||||
|
'common': lists(text()),
|
||||||
|
'c': lists(text()),
|
||||||
|
'cxx': lists(text()),
|
||||||
|
'asm': lists(text()),
|
||||||
|
'ld': lists(text())}),
|
||||||
|
lists(text(min_size=1, alphabet=ALPHABET), min_size=1)
|
||||||
|
)
|
||||||
|
def test_toolchain_profile_asm(profile, source_file):
|
||||||
|
filename = deepcopy(source_file)
|
||||||
|
filename[-1] += ".s"
|
||||||
|
to_compile = os.path.join(*filename)
|
||||||
|
for name, Class in TOOLCHAIN_CLASSES.items():
|
||||||
|
CLS = Class(TARGET_MAP["K64F"], build_profile=profile)
|
||||||
|
CLS.inc_md5 = ""
|
||||||
|
CLS.build_dir = ""
|
||||||
|
compile_command = CLS.compile_command(to_compile, to_compile + ".o", [])
|
||||||
|
if not compile_command:
|
||||||
|
assert compile_command, to_compile
|
||||||
|
for parameter in profile['asm']:
|
||||||
|
assert any(parameter in cmd for cmd in compile_command), \
|
||||||
|
"Toolchain %s did not propigate arg %s" % (CLS.name, parameter)
|
||||||
|
|
||||||
|
|
|
@ -217,6 +217,8 @@ class mbedToolchain:
|
||||||
|
|
||||||
__metaclass__ = ABCMeta
|
__metaclass__ = ABCMeta
|
||||||
|
|
||||||
|
profile_template = {'common':[], 'c':[], 'cxx':[], 'asm':[], 'ld':[]}
|
||||||
|
|
||||||
def __init__(self, target, notify=None, macros=None, silent=False, extra_verbose=False, build_profile=None):
|
def __init__(self, target, notify=None, macros=None, silent=False, extra_verbose=False, build_profile=None):
|
||||||
self.target = target
|
self.target = target
|
||||||
self.name = self.__class__.__name__
|
self.name = self.__class__.__name__
|
||||||
|
@ -225,7 +227,7 @@ class mbedToolchain:
|
||||||
self.hook = hooks.Hook(target, self)
|
self.hook = hooks.Hook(target, self)
|
||||||
|
|
||||||
# Toolchain flags
|
# Toolchain flags
|
||||||
self.flags = deepcopy(build_profile)
|
self.flags = deepcopy(build_profile or self.profile_template)
|
||||||
|
|
||||||
# User-defined macros
|
# User-defined macros
|
||||||
self.macros = macros or []
|
self.macros = macros or []
|
||||||
|
|
Loading…
Reference in New Issue