mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-07 22:59:56 -05:00
Tests: Add test for toolchains-v1 File API object
This commit is contained in:
@@ -24,6 +24,7 @@ function(check_python case)
|
||||
file(GLOB index ${RunCMake_TEST_BINARY_DIR}/.cmake/api/v1/reply/index-*.json)
|
||||
execute_process(
|
||||
COMMAND ${PYTHON_EXECUTABLE} "${RunCMake_SOURCE_DIR}/${case}-check.py" "${index}" "${CMAKE_CXX_COMPILER_ID}"
|
||||
"${RunCMake_TEST_BINARY_DIR}"
|
||||
RESULT_VARIABLE result
|
||||
OUTPUT_VARIABLE output
|
||||
ERROR_VARIABLE output
|
||||
@@ -62,3 +63,4 @@ endfunction()
|
||||
run_object(codemodel-v2)
|
||||
run_object(cache-v2)
|
||||
run_object(cmakeFiles-v1)
|
||||
run_object(toolchains-v1)
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
set(expect
|
||||
query
|
||||
query/client-foo
|
||||
query/client-foo/query.json
|
||||
reply
|
||||
reply/index-[0-9.T-]+.json
|
||||
reply/toolchains-v1-[0-9a-f]+.json
|
||||
)
|
||||
check_api("^${expect}$")
|
||||
|
||||
check_python(toolchains-v1)
|
||||
@@ -0,0 +1,4 @@
|
||||
file(REMOVE_RECURSE ${RunCMake_TEST_BINARY_DIR}/.cmake/api/v1/query)
|
||||
file(WRITE "${RunCMake_TEST_BINARY_DIR}/.cmake/api/v1/query/client-foo/query.json" [[
|
||||
{ "requests": [ { "kind": "toolchains", "version" : 1 } ] }
|
||||
]])
|
||||
@@ -0,0 +1,11 @@
|
||||
set(expect
|
||||
query
|
||||
query/client-foo
|
||||
query/client-foo/toolchains-v1
|
||||
reply
|
||||
reply/index-[0-9.T-]+.json
|
||||
reply/toolchains-v1-[0-9a-f]+.json
|
||||
)
|
||||
check_api("^${expect}$")
|
||||
|
||||
check_python(toolchains-v1)
|
||||
@@ -0,0 +1,2 @@
|
||||
file(REMOVE_RECURSE ${RunCMake_TEST_BINARY_DIR}/.cmake/api/v1/query)
|
||||
file(WRITE "${RunCMake_TEST_BINARY_DIR}/.cmake/api/v1/query/client-foo/toolchains-v1" "")
|
||||
@@ -0,0 +1,10 @@
|
||||
set(expect
|
||||
query
|
||||
query/toolchains-v1
|
||||
reply
|
||||
reply/index-[0-9.T-]+.json
|
||||
reply/toolchains-v1-[0-9a-f]+.json
|
||||
)
|
||||
check_api("^${expect}$")
|
||||
|
||||
check_python(toolchains-v1)
|
||||
@@ -0,0 +1,2 @@
|
||||
file(REMOVE_RECURSE ${RunCMake_TEST_BINARY_DIR}/.cmake/api/v1/query)
|
||||
file(WRITE "${RunCMake_TEST_BINARY_DIR}/.cmake/api/v1/query/toolchains-v1" "")
|
||||
@@ -0,0 +1,86 @@
|
||||
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"])
|
||||
@@ -0,0 +1,22 @@
|
||||
enable_language(CXX)
|
||||
|
||||
set(variable_suffixes
|
||||
COMPILER COMPILER_ID COMPILER_VERSION COMPILER_TARGET
|
||||
IMPLICIT_INCLUDE_DIRECTORIES IMPLICIT_LINK_DIRECTORIES
|
||||
IMPLICIT_LINK_FRAMEWORK_DIRECTORIES IMPLICIT_LINK_LIBRARIES
|
||||
SOURCE_FILE_EXTENSIONS)
|
||||
set(language CXX)
|
||||
set(json "{}")
|
||||
|
||||
foreach(variable_suffix ${variable_suffixes})
|
||||
set(variable "CMAKE_${language}_${variable_suffix}")
|
||||
string(JSON json SET "${json}" "${variable}" "{}")
|
||||
if(DEFINED "${variable}")
|
||||
string(JSON json SET "${json}" "${variable}" "defined" "true")
|
||||
string(JSON json SET "${json}" "${variable}" "value" "\"${${variable}}\"")
|
||||
else()
|
||||
string(JSON json SET "${json}" "${variable}" "defined" "false")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
file(WRITE ${CMAKE_BINARY_DIR}/toolchain_variables.json "${json}")
|
||||
Reference in New Issue
Block a user