Implement and test filtering resources by libraries

pull/9561/head
Jimmy Brisson 2019-01-15 14:44:54 -06:00
parent e10adffa31
commit e2849e6201
2 changed files with 47 additions and 1 deletions

View File

@ -126,6 +126,9 @@ class Resources(object):
# publicly accessible things
self.ignored_dirs = []
# library requirements
self._libs_filtered = None
# Pre-mbed 2.0 ignore dirs
self._legacy_ignore_dirs = (LEGACY_IGNORE_DIRS)
@ -257,7 +260,25 @@ class Resources(object):
def get_file_refs(self, file_type):
"""Return a list of FileRef for every file of the given type"""
return list(self._file_refs[file_type])
if self._libs_filtered is None:
return list(self._file_refs[file_type])
else:
to_ret = []
for ref in self._file_refs[file_type]:
_, path = ref
if not any(
path.startswith(dirname(e.path)) for e in self._excluded_libs
):
to_ret.append(ref)
return to_ret
def filter_by_libraries(self, library_refs):
"""
Call after completely done scanning to filter resources based on
libraries
"""
self._libs_filtered = library_refs
self._excluded_libs = set(self._file_refs[FileType.JSON]) - set(library_refs)
def _get_from_refs(self, file_type, key):
return sorted([key(f) for f in self.get_file_refs(file_type)])

View File

@ -99,6 +99,31 @@ class ResourcesTest(unittest.TestCase):
assert(" not-main.o " in error_messages)
assert(" main.o " in error_messages)
def test_filter_by_all_libraries(self):
"""
Assert something
"""
res = Resources(MockNotifier())
res._add_labels('TARGET', ['K64F'])
res._add_labels('TARGET', ['FRDM'])
for name, loc in SRC_PATHS.items():
res.add_directory(loc, into_path=name)
res.filter_by_libraries(res.get_file_refs(FileType.JSON))
assert("main.cpp" in res.get_file_names(FileType.CPP_SRC))
def test_filter_by_bm_lib(self):
res = Resources(MockNotifier())
res._add_labels('TARGET', ['K64F'])
res._add_labels('TARGET', ['FRDM'])
for name, loc in SRC_PATHS.items():
res.add_directory(loc, into_path=name)
res.win_to_unix()
res.filter_by_libraries(
ref for ref in res.get_file_refs(FileType.JSON)
if "/bm/" in ref.name
)
assert("main.cpp" not in res.get_file_names(FileType.CPP_SRC))
if __name__ == '__main__':
unittest.main()