Added property based regression test to travis

pull/2802/head
Jimmy Brisson 2016-09-27 17:40:18 -05:00
parent d88852d150
commit fd04ea2125
3 changed files with 76 additions and 1 deletions

View File

@ -19,3 +19,4 @@ install:
- sudo pip install jinja2
- sudo pip install pytest
- sudo pip install pylint
- sudo pip install hypothesis

View File

@ -1,5 +1,9 @@
import sys
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__), "..", "..", ".."))
sys.path.insert(0, ROOT)
@ -11,3 +15,71 @@ def test_instantiation():
for name, Class in TOOLCHAIN_CLASSES.items():
CLS = Class(TARGET_MAP["K64F"])
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)

View File

@ -217,6 +217,8 @@ class mbedToolchain:
__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):
self.target = target
self.name = self.__class__.__name__
@ -225,7 +227,7 @@ class mbedToolchain:
self.hook = hooks.Hook(target, self)
# Toolchain flags
self.flags = deepcopy(build_profile)
self.flags = deepcopy(build_profile or self.profile_template)
# User-defined macros
self.macros = macros or []