mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-04 13:19:51 -05:00
trace: Add test for the JSON-v1 trace
This commit is contained in:
@@ -454,7 +454,7 @@ add_RunCMake_test(target_include_directories)
|
|||||||
add_RunCMake_test(target_sources)
|
add_RunCMake_test(target_sources)
|
||||||
add_RunCMake_test(CheckModules)
|
add_RunCMake_test(CheckModules)
|
||||||
add_RunCMake_test(CheckIPOSupported)
|
add_RunCMake_test(CheckIPOSupported)
|
||||||
add_RunCMake_test(CommandLine -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DCYGWIN=${CYGWIN})
|
add_RunCMake_test(CommandLine -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DCYGWIN=${CYGWIN} -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE})
|
||||||
add_RunCMake_test(CommandLineTar)
|
add_RunCMake_test(CommandLineTar)
|
||||||
|
|
||||||
if(CMAKE_PLATFORM_NO_VERSIONED_SONAME OR (NOT CMAKE_SHARED_LIBRARY_SONAME_FLAG AND NOT CMAKE_SHARED_LIBRARY_SONAME_C_FLAG))
|
if(CMAKE_PLATFORM_NO_VERSIONED_SONAME OR (NOT CMAKE_SHARED_LIBRARY_SONAME_FLAG AND NOT CMAKE_SHARED_LIBRARY_SONAME_C_FLAG))
|
||||||
|
|||||||
@@ -607,6 +607,14 @@ set(RunCMake_TEST_OPTIONS --trace-redirect=/no/such/file.txt)
|
|||||||
run_cmake(trace-redirect-nofile)
|
run_cmake(trace-redirect-nofile)
|
||||||
unset(RunCMake_TEST_OPTIONS)
|
unset(RunCMake_TEST_OPTIONS)
|
||||||
|
|
||||||
|
set(RunCMake_TEST_OPTIONS --trace --trace-format=json-v1 --trace-redirect=${RunCMake_BINARY_DIR}/json-v1.trace)
|
||||||
|
run_cmake(trace-json-v1)
|
||||||
|
unset(RunCMake_TEST_OPTIONS)
|
||||||
|
|
||||||
|
set(RunCMake_TEST_OPTIONS --trace-expand --trace-format=json-v1 --trace-redirect=${RunCMake_BINARY_DIR}/json-v1-expand.trace)
|
||||||
|
run_cmake(trace-json-v1-expand)
|
||||||
|
unset(RunCMake_TEST_OPTIONS)
|
||||||
|
|
||||||
set(RunCMake_TEST_OPTIONS -Wno-deprecated --warn-uninitialized)
|
set(RunCMake_TEST_OPTIONS -Wno-deprecated --warn-uninitialized)
|
||||||
run_cmake(warn-uninitialized)
|
run_cmake(warn-uninitialized)
|
||||||
unset(RunCMake_TEST_OPTIONS)
|
unset(RunCMake_TEST_OPTIONS)
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
if(PYTHON_EXECUTABLE)
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${PYTHON_EXECUTABLE} "${RunCMake_SOURCE_DIR}/trace-json-v1-check.py" "${RunCMake_BINARY_DIR}/json-v1.trace"
|
||||||
|
RESULT_VARIABLE result
|
||||||
|
OUTPUT_VARIABLE output
|
||||||
|
ERROR_VARIABLE output
|
||||||
|
)
|
||||||
|
if(NOT result EQUAL 0)
|
||||||
|
set(RunCMake_TEST_FAILED "JSON trace validation failed:\n${output}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
+67
@@ -0,0 +1,67 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
if sys.version_info[0] >= 3:
|
||||||
|
unicode = str
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Checks the trace output')
|
||||||
|
parser.add_argument('-e', '--expand', action='store_true')
|
||||||
|
parser.add_argument('trace', type=str, help='the trace file to check')
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
assert os.path.exists(args.trace)
|
||||||
|
|
||||||
|
if args.expand:
|
||||||
|
msg_args = ['STATUS', 'fff', 'fff;sss; SPACES !!! ', ' 42 space in string!', ' SPACES !!! ']
|
||||||
|
else:
|
||||||
|
msg_args = ['STATUS', 'fff', '${ASDF}', ' ${FOO} ${BAR}', ' SPACES !!! ']
|
||||||
|
|
||||||
|
required_traces = [
|
||||||
|
{
|
||||||
|
'args': ['STATUS', 'JSON-V1 str', 'spaces'],
|
||||||
|
'cmd': 'message',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'args': ['ASDF', 'fff', 'sss', ' SPACES !!! '],
|
||||||
|
'cmd': 'set',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'args': ['FOO', '42'],
|
||||||
|
'cmd': 'set',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'args': ['BAR', ' space in string!'],
|
||||||
|
'cmd': 'set',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'args': msg_args,
|
||||||
|
'cmd': 'message',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
with open(args.trace, 'r') as fp:
|
||||||
|
# Check for version (must be the first document)
|
||||||
|
vers = json.loads(fp.readline())
|
||||||
|
assert sorted(vers.keys()) == ['version']
|
||||||
|
assert sorted(vers['version'].keys()) == ['major', 'minor']
|
||||||
|
assert vers['version']['major'] == 1
|
||||||
|
assert vers['version']['minor'] == 0
|
||||||
|
|
||||||
|
for i in fp.readlines():
|
||||||
|
line = json.loads(i)
|
||||||
|
assert sorted(line.keys()) == ['args', 'cmd', 'file', 'line']
|
||||||
|
assert isinstance(line['args'], list)
|
||||||
|
assert isinstance(line['cmd'], unicode)
|
||||||
|
assert isinstance(line['file'], unicode)
|
||||||
|
assert isinstance(line['line'], int)
|
||||||
|
|
||||||
|
for i in required_traces:
|
||||||
|
if i['cmd'] == line['cmd'] and i['args'] == line['args']:
|
||||||
|
i['found'] = True
|
||||||
|
|
||||||
|
assert all([x.get('found', False) == True for x in required_traces])
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
if(PYTHON_EXECUTABLE)
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${PYTHON_EXECUTABLE} "${RunCMake_SOURCE_DIR}/trace-json-v1-check.py" --expand "${RunCMake_BINARY_DIR}/json-v1-expand.trace"
|
||||||
|
RESULT_VARIABLE result
|
||||||
|
OUTPUT_VARIABLE output
|
||||||
|
ERROR_VARIABLE output
|
||||||
|
)
|
||||||
|
if(NOT result EQUAL 0)
|
||||||
|
set(RunCMake_TEST_FAILED "JSON trace validation failed:\n${output}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
include(trace-json-v1.cmake)
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
message(STATUS "JSON-V1 str" "spaces")
|
||||||
|
set(ASDF fff sss " SPACES !!! ")
|
||||||
|
set(FOO 42)
|
||||||
|
set(BAR " space in string!")
|
||||||
|
message(STATUS fff ${ASDF} " ${FOO} ${BAR}" " SPACES !!! ")
|
||||||
Reference in New Issue
Block a user