Parse the XML file Test.xml from `ctest -D`

... eventually, that will help move from our testsuite scripts to
CTest testsuite, plus CDash.
This commit is contained in:
Laurent Rineau 2017-10-20 00:15:04 +02:00
parent a4c29ed9aa
commit a63cfa9612
3 changed files with 61 additions and 13 deletions

View File

@ -46,9 +46,11 @@ function(expand_list_with_globbing list_name)
endfunction() endfunction()
function(cgal_add_test exe_name) function(cgal_add_test exe_name)
add_test(NAME "compilation_of__${exe_name}"
COMMAND ${TIME_COMMAND} "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target "${exe_name}")
set(cin_file "${CGAL_CURRENT_SOURCE_DIR}/${exe_name}.cin") set(cin_file "${CGAL_CURRENT_SOURCE_DIR}/${exe_name}.cin")
if(EXISTS ${cin_file}) if(EXISTS ${cin_file})
add_test(NAME ${exe_name} add_test(NAME execution___of__${exe_name}
COMMAND ${CMAKE_COMMAND} COMMAND ${CMAKE_COMMAND}
-DCMD:STRING=$<TARGET_FILE:${exe_name}> -DCMD:STRING=$<TARGET_FILE:${exe_name}>
-DCIN:STRING=${cin_file} -DCIN:STRING=${cin_file}
@ -77,19 +79,17 @@ function(cgal_add_test exe_name)
expand_list_with_globbing(ARGS) expand_list_with_globbing(ARGS)
endif() endif()
# message(STATUS "add test: ${exe_name} ${ARGS}") # message(STATUS "add test: ${exe_name} ${ARGS}")
add_test(NAME ${exe_name} COMMAND ${exe_name} ${ARGS}) add_test(NAME execution___of__${exe_name} COMMAND $<TARGET_FILE:${exe_name}> ${ARGS})
endif() endif()
set_property(TEST "${exe_name}" set_property(TEST "execution___of__${exe_name}"
APPEND PROPERTY LABELS "${PROJECT_NAME}") APPEND PROPERTY LABELS "${PROJECT_NAME}")
# message(STATUS " working dir: ${CGAL_CURRENT_SOURCE_DIR}") # message(STATUS " working dir: ${CGAL_CURRENT_SOURCE_DIR}")
set_property(TEST "${exe_name}" set_property(TEST "execution___of__${exe_name}"
PROPERTY WORKING_DIRECTORY ${CGAL_CURRENT_SOURCE_DIR}) PROPERTY WORKING_DIRECTORY ${CGAL_CURRENT_SOURCE_DIR})
add_test(NAME "build_target_${exe_name}" set_property(TEST "compilation_of__${exe_name}"
COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target "${exe_name}")
set_property(TEST "build_target_${exe_name}"
APPEND PROPERTY LABELS "${PROJECT_NAME}") APPEND PROPERTY LABELS "${PROJECT_NAME}")
set_property(TEST "${exe_name}" set_property(TEST "execution___of__${exe_name}"
APPEND PROPERTY DEPENDS "build_target_${exe_name}") APPEND PROPERTY DEPENDS "compilation_of__${exe_name}")
return() return()
@ -108,9 +108,9 @@ function(cgal_add_test exe_name)
# see https://github.com/CGAL/cgal/pull/1295/files/c65d3abe17bb3e677b8077996cdaf8672f9c4c6f#r71705451 # see https://github.com/CGAL/cgal/pull/1295/files/c65d3abe17bb3e677b8077996cdaf8672f9c4c6f#r71705451
endif() endif()
string(REPLACE ";" " " args_str "${ARGS}") string(REPLACE ";" " " args_str "${ARGS}")
add_test(NAME ${exe_name} add_test(NAME execution___of__${exe_name}
COMMAND ${exe_name} ${ARGS} COMMAND $<TARGET_FILE:${exe_name}> ${ARGS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
set_property(TEST "${exe_name}" set_property(TEST "execution___of__${exe_name}"
APPEND PROPERTY LABELS "${PROJECT_NAME}") APPEND PROPERTY LABELS "${PROJECT_NAME}")
endfunction() endfunction()

View File

@ -42,7 +42,7 @@ if ( CGAL_FOUND )
create_single_source_cgal_program( will_fail.cpp will_fail_aux.cpp ) create_single_source_cgal_program( will_fail.cpp will_fail_aux.cpp )
if(BUILD_TESTING) if(BUILD_TESTING)
set_property(TEST will_fail PROPERTY WILL_FAIL TRUE) set_property(TEST execution___of__will_fail PROPERTY WILL_FAIL TRUE)
endif() endif()
find_package( TBB QUIET ) find_package( TBB QUIET )

View File

@ -0,0 +1,48 @@
from __future__ import print_function
from collections import defaultdict
import xml.etree.ElementTree as ET
import os
import errno
xml = open("Test.xml", 'rb').read();
def open_file_create_dir(filename, mode):
if not os.path.exists(os.path.dirname(filename)):
try:
os.makedirs(os.path.dirname(filename))
except OSError as exc: # Guard against race condition
if exc.errno != errno.EEXIST:
raise
return open(filename, mode)
root=ET.fromstring(xml)
testing = root.find('Testing')
testlist = testing.find('TestList')
nb = 0
tests_ids = {}
for t in testlist:
tests_ids[t.text] = nb
nb += 1
tests = {}
for t in testing.findall('Test'):
tests[tests_ids[t.find('FullName').text]] = \
{ \
"Name": t.find('Name').text, \
"Status": t.attrib['Status'], \
"Output": t.find('Results').find('Measurement').find('Value').text, \
"Labels": [l.text for l in t.find('Labels').findall('Label')], \
}
tests_per_label = defaultdict(list)
for t_id in range(0, len(tests)):
t = tests[t_id]
for label in t['Labels']:
tests_per_label[label].append(t)
for label, tests in tests_per_label.items():
with open_file_create_dir("{}/error.txt".format(label), 'w') as error:
for t in tests:
print(" {} of {}".format("successful " if (t['Status'] == 'passed') else "ERROR: ", t['Name']), file=error)
with open("{}/ProgramOutput.{}".format(label, t['Name']), 'w') as f:
f.write(t['Output'] if t['Output'] != None else "")