mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-01 19:30:13 -06: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(CheckModules)
|
||||
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)
|
||||
|
||||
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)
|
||||
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)
|
||||
run_cmake(warn-uninitialized)
|
||||
unset(RunCMake_TEST_OPTIONS)
|
||||
|
||||
11
Tests/RunCMake/CommandLine/trace-json-v1-check.cmake
Normal file
11
Tests/RunCMake/CommandLine/trace-json-v1-check.cmake
Normal file
@@ -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
Tests/RunCMake/CommandLine/trace-json-v1-check.py
Executable file
67
Tests/RunCMake/CommandLine/trace-json-v1-check.py
Executable file
@@ -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])
|
||||
11
Tests/RunCMake/CommandLine/trace-json-v1-expand-check.cmake
Normal file
11
Tests/RunCMake/CommandLine/trace-json-v1-expand-check.cmake
Normal file
@@ -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()
|
||||
1
Tests/RunCMake/CommandLine/trace-json-v1-expand.cmake
Normal file
1
Tests/RunCMake/CommandLine/trace-json-v1-expand.cmake
Normal file
@@ -0,0 +1 @@
|
||||
include(trace-json-v1.cmake)
|
||||
5
Tests/RunCMake/CommandLine/trace-json-v1.cmake
Normal file
5
Tests/RunCMake/CommandLine/trace-json-v1.cmake
Normal file
@@ -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