| from check_index import * |
| import os |
| |
| class ExpectedVar(object): |
| def __init__(self, name): |
| self.name = name |
| |
| class ExpectedList(object): |
| def __init__(self, name): |
| self.name = name |
| |
| EXPECTED_TOOLCHAIN = { |
| "language": "CXX", |
| "compiler": { |
| "path": ExpectedVar("CMAKE_CXX_COMPILER"), |
| "id": ExpectedVar("CMAKE_CXX_COMPILER_ID"), |
| "version": ExpectedVar("CMAKE_CXX_COMPILER_VERSION"), |
| "target": ExpectedVar("CMAKE_CXX_COMPILER_TARGET"), |
| "implicit": { |
| "includeDirectories": \ |
| ExpectedList("CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES"), |
| "linkDirectories": \ |
| ExpectedList("CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES"), |
| "linkFrameworkDirectories": \ |
| ExpectedList( |
| "CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES"), |
| "linkLibraries": \ |
| ExpectedList("CMAKE_CXX_IMPLICIT_LINK_LIBRARIES"), |
| } |
| }, |
| "sourceFileExtensions": \ |
| ExpectedList("CMAKE_CXX_SOURCE_FILE_EXTENSIONS"), |
| } |
| |
| def check_objects(o): |
| assert is_list(o) |
| assert len(o) == 1 |
| check_index_object(o[0], "toolchains", 1, 0, check_object_toolchains) |
| |
| def check_object_toolchains(o): |
| assert sorted(o.keys()) == ["kind", "toolchains", "version"] |
| # The "kind" and "version" members are handled by check_index_object. |
| toolchains = o["toolchains"] |
| assert is_list(toolchains) |
| |
| # Other platform-specific toolchains may exist (like RC on Windows). |
| has_cxx_toolchain = False |
| for toolchain in toolchains: |
| assert is_dict(toolchain) |
| assert "language" in toolchain |
| if toolchain["language"] == "CXX": |
| check_object_toolchain(toolchain, EXPECTED_TOOLCHAIN) |
| has_cxx_toolchain = True |
| |
| assert has_cxx_toolchain |
| |
| def check_object_toolchain(o, expected): |
| expected_keys = [ |
| key for (key, value) in expected.items() |
| if is_string(value) or is_dict(value) |
| or (type(value) in (ExpectedVar, ExpectedList) |
| and variables[value.name]["defined"])] |
| assert sorted(o.keys()) == sorted(expected_keys) |
| |
| for key in expected_keys: |
| value = expected[key] |
| if is_string(value): |
| assert o[key] == value |
| elif is_dict(value): |
| check_object_toolchain(o[key], value) |
| elif type(value) == ExpectedVar: |
| assert o[key] == variables[value.name]["value"] |
| elif type(value) == ExpectedList: |
| expected_items = filter( |
| None, variables[value.name]["value"].split(";")) |
| check_list_match(lambda a, b: a == b, o[key], expected_items) |
| else: |
| assert False |
| |
| with open(os.path.join(sys.argv[3], "toolchain_variables.json")) as f: |
| variables = json.load(f) |
| |
| assert is_dict(variables) |
| assert is_dict(index) |
| assert sorted(index.keys()) == ["cmake", "objects", "reply"] |
| check_objects(index["objects"]) |