@@ -145,9 +145,6 @@ set(STORAGE_FLAG_andr "")
145145set (STORAGE_FLAG_unix_gen SYS_STRING_USE_GENERIC=1)
146146set (STORAGE_FLAG_python SYS_STRING_USE_PYTHON=1)
147147
148- set (TEST_COMMAND "" )
149- set (TEST_DEPS "" )
150-
151148if (${CMAKE_SYSTEM_NAME } STREQUAL Android )
152149 set (ANDROID_TEST_DIR /data/local/tmp/sys_string_test)
153150 set (ANDROID_SDK_DIR ${CMAKE_ANDROID_NDK} /../..)
@@ -159,9 +156,56 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL Android)
159156 set (ANDROID_LD_LIBRARY_PATH /apex/com.android .art/lib64:/apex/com.android .runtime/lib64)
160157 endif ()
161158
162- list (APPEND TEST_COMMAND COMMAND ${ADB} shell mkdir -p ${ANDROID_TEST_DIR} )
163159endif ()
164160
161+
162+ add_custom_target (tests ALL )
163+
164+ set (TEST_SRCIPT
165+ "
166+ cmake_path(GET EXECUTABLE FILENAME exefilename)
167+
168+ macro(run)
169+ execute_process(COMMAND \$ {ARGV} RESULT_VARIABLE CMD_RESULT)
170+ if(CMD_RESULT)
171+ message(FATAL_ERROR \" Error running \$ {ARGV}\" )
172+ endif()
173+ endmacro()
174+ " )
175+
176+ if (${CMAKE_SYSTEM_NAME } STREQUAL Android )
177+ string (APPEND TEST_SRCIPT "
178+ run(${ADB} shell mkdir -p ${ANDROID_TEST_DIR} )
179+ run(${ADB} push \$ {EXECUTABLE} ${ANDROID_TEST_DIR} )
180+ run(${ADB} shell LD_LIBRARY_PATH=${ANDROID_LD_LIBRARY_PATH} ${ANDROID_TEST_DIR} /\$ {exefilename} -ni -fc)
181+ " )
182+ elseif (DEFINED EMSCRIPTEN)
183+ string (APPEND TEST_SRCIPT "
184+ run(${NODE_JS_EXECUTABLE} \$ {EXECUTABLE} -ni -fc)
185+ " )
186+ elseif (SYS_STRING_COLLECT_COVERAGE AND ${CMAKE_SYSTEM_NAME } STREQUAL Darwin AND CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" )
187+ string (APPEND TEST_SRCIPT "
188+ run(${CMAKE_COMMAND } -E env LLVM_PROFILE_FILE=${CMAKE_CURRENT_BINARY_DIR } /coverage/\$ {exefilename}.profraw \$ {EXECUTABLE} -ni -fc)
189+ run(xcrun llvm-profdata merge -sparse ${CMAKE_CURRENT_BINARY_DIR } /coverage/\$ {exefilename}.profraw -o ${CMAKE_CURRENT_BINARY_DIR } /coverage/\$ {exefilename}.profdata)
190+ run(xcrun llvm-cov show -format=html
191+ -Xdemangler=c++filt -Xdemangler -n
192+ -show-regions=1
193+ -show-instantiations=0
194+ #-show-branches=count
195+ #-show-instantiation-summary=1
196+ -ignore-filename-regex=test/.\\ *
197+ -output-dir=${CMAKE_CURRENT_BINARY_DIR } /coverage/\$ {exefilename}
198+ -instr-profile=${CMAKE_CURRENT_BINARY_DIR } /coverage/\$ {exefilename}.profdata
199+ \$ {EXECUTABLE})
200+ " )
201+ else ()
202+ string (APPEND TEST_SRCIPT "
203+ run(\$ {EXECUTABLE} -ni -fc)
204+ " )
205+ endif ()
206+
207+ file (WRITE ${CMAKE_CURRENT_BINARY_DIR } /${CMAKE_CFG_INTDIR}/run-test.cmake ${TEST_SRCIPT} )
208+
165209set (LIB_TYPES " " )
166210if (ICU_FOUND AND ICU_UC_FOUND)
167211 list (APPEND LIB_TYPES _icu)
@@ -321,31 +365,16 @@ foreach(LIB_SUFFIX ${LIB_TYPES})
321365 "$<$<PLATFORM_ID :Linux >:test_linux .cpp >"
322366 "$<$<PLATFORM_ID :Emscripten >:test_javascript .cpp >"
323367 )
368+
324369
325- list (APPEND TEST_COMMAND COMMAND echo "Running test-${TEST_SUFFIX} " )
326- if (${CMAKE_SYSTEM_NAME } STREQUAL Android )
327- list (APPEND TEST_COMMAND COMMAND ${ADB} push test-${TEST_SUFFIX} ${ANDROID_TEST_DIR} )
328- list (APPEND TEST_COMMAND COMMAND ${ADB} shell LD_LIBRARY_PATH=${ANDROID_LD_LIBRARY_PATH} ${ANDROID_TEST_DIR} /test-${TEST_SUFFIX} -ni)
329- elseif (DEFINED EMSCRIPTEN)
330- list (APPEND TEST_COMMAND COMMAND ${NODE_JS_EXECUTABLE} test-${TEST_SUFFIX} -ni)
331- elseif (SYS_STRING_COLLECT_COVERAGE AND ${CMAKE_SYSTEM_NAME } STREQUAL Darwin AND CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" )
332- list (APPEND TEST_COMMAND COMMAND ${CMAKE_COMMAND } -E env LLVM_PROFILE_FILE=${CMAKE_CURRENT_BINARY_DIR } /coverage/test-${TEST_SUFFIX} .profraw $<TARGET_FILE :test -${TEST_SUFFIX} >)
333- list (APPEND TEST_COMMAND COMMAND xcrun llvm-profdata merge -sparse ${CMAKE_CURRENT_BINARY_DIR } /coverage/test-${TEST_SUFFIX} .profraw -o ${CMAKE_CURRENT_BINARY_DIR } /coverage/test-${TEST_SUFFIX} .profdata)
334- list (APPEND TEST_COMMAND COMMAND xcrun llvm-cov show -format=html
335- -Xdemangler=c++filt -Xdemangler -n
336- -show-regions=1
337- -show-instantiations=0
338- #-show-branches=count
339- #-show-instantiation-summary=1
340- -ignore-filename-regex =test/.\\*
341- -output-dir=${CMAKE_CURRENT_BINARY_DIR } /coverage/report-${TEST_SUFFIX}
342- -instr-profile=${CMAKE_CURRENT_BINARY_DIR } /coverage/test-${TEST_SUFFIX} .profdata
343- $<TARGET_FILE :test -${TEST_SUFFIX} >)
344- else ()
345- list (APPEND TEST_COMMAND COMMAND test-${TEST_SUFFIX} -ni)
346- endif ()
370+ add_dependencies (tests test -${TEST_SUFFIX} )
347371
348- list (APPEND TEST_DEPS test-${TEST_SUFFIX} )
372+ add_test (
373+ NAME "test-${TEST_SUFFIX} "
374+ COMMAND ${CMAKE_COMMAND }
375+ -DEXECUTABLE=$<TARGET_FILE:test-${TEST_SUFFIX}>
376+ -P ${CMAKE_CURRENT_BINARY_DIR } /run-test.cmake
377+ )
349378
350379endforeach ()
351380endforeach ()
@@ -357,7 +386,3 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND ${Python3_Development_FOUND} AND ${
357386 )
358387endif ()
359388
360- add_custom_target (run-test
361- DEPENDS ${TEST_DEPS}
362- ${TEST_COMMAND}
363- )
0 commit comments