Skip to content

Commit 4e82500

Browse files
committed
Switching to ctest
1 parent 1ac2f05 commit 4e82500

3 files changed

Lines changed: 139 additions & 91 deletions

File tree

.github/workflows/test.yml

Lines changed: 48 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,11 @@ jobs:
174174
175175
if [[ '${{ matrix.os }}' == windows-* ]]; then
176176
if [[ '${{ matrix.compiler }}' != '' ]]; then
177+
VSROOT=`"/c/Program Files (x86)/Microsoft Visual Studio/Installer/vswhere.exe" -latest -property installationPath`
177178
if [[ '${{ matrix.arch }}' == "x64" ]]; then
178-
VCPREFIX="C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\Llvm\\x64\\bin"
179+
VCPREFIX="$VSROOT\\VC\\Tools\\Llvm\\x64\\bin"
179180
else
180-
VCPREFIX="C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\Llvm\\bin"
181+
VCPREFIX="$VSROOT\\VC\\Tools\\Llvm\\bin"
181182
fi
182183
echo "CC=$VCPREFIX\\${{ matrix.compiler }}" >> $GITHUB_ENV
183184
echo "CXX=$VCPREFIX\\${{ matrix.compiler }}" >> $GITHUB_ENV
@@ -206,9 +207,13 @@ jobs:
206207
fi
207208
fi
208209
209-
- name: Build and Test
210+
- name: Build
210211
shell: bash
211-
run: cmake --build out --config MinSizeRel --target run-test
212+
run: cmake --build out --config MinSizeRel --target tests
213+
214+
- name: Test
215+
shell: bash
216+
run: ctest --test-dir out -C MinSizeRel --output-on-failure -VV
212217

213218
container:
214219
needs: define-matrix
@@ -232,12 +237,15 @@ jobs:
232237
233238
- name: Configure
234239
shell: bash
235-
run: |
236-
cmake -GNinja -S . -B out -DCMAKE_BUILD_TYPE=MinSizeRel
240+
run: cmake -GNinja -S . -B out -DCMAKE_BUILD_TYPE=MinSizeRel
241+
242+
- name: Build
243+
shell: bash
244+
run: cmake --build out --config MinSizeRel --target tests
237245

238-
- name: Build and Test
246+
- name: Test
239247
shell: bash
240-
run: cmake --build out --config MinSizeRel --target run-test
248+
run: ctest --test-dir out -C MinSizeRel --output-on-failure -VV
241249

242250
gcc-10_2:
243251
runs-on: ubuntu-latest
@@ -265,9 +273,13 @@ jobs:
265273
run: |
266274
cmake -GNinja -S . -B out -DCMAKE_BUILD_TYPE=MinSizeRel
267275
268-
- name: Build and Test
276+
- name: Build
277+
shell: bash
278+
run: cmake --build out --config MinSizeRel --target tests
279+
280+
- name: Test
269281
shell: bash
270-
run: cmake --build out --config MinSizeRel --target run-test
282+
run: ctest --test-dir out -C MinSizeRel --output-on-failure -VV
271283

272284

273285
big-endian:
@@ -289,11 +301,17 @@ jobs:
289301
export QEMU_LD_PREFIX=/usr/powerpc-linux-gnu/
290302
cmake -S . -B out -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_SYSTEM_PROCESSOR=powerpc
291303
292-
- name: Build and Test
304+
- name: Build
293305
shell: bash
294306
run: |
295307
export QEMU_LD_PREFIX=/usr/powerpc-linux-gnu/
296-
cmake --build out --config MinSizeRel --target run-test
308+
cmake --build out --config MinSizeRel --target tests
309+
310+
- name: Test
311+
shell: bash
312+
run: |
313+
export QEMU_LD_PREFIX=/usr/powerpc-linux-gnu/
314+
ctest --test-dir out -C MinSizeRel --output-on-failure -VV
297315
298316
android:
299317
runs-on: ubuntu-latest
@@ -349,8 +367,11 @@ jobs:
349367
echo "::group::Configure"
350368
cmake -S . -B out -DCMAKE_BUILD_TYPE:STRING=MinSizeRel -DCMAKE_TOOLCHAIN_FILE:FILEPATH=$ANDROID_SDK_ROOT/ndk/${{ matrix.version }}/build/cmake/android.toolchain.cmake -DANDROID_ABI:STRING=${{ matrix.arch }} -DANDROID_PLATFORM:STRING=${{ matrix.version }} -DANDROID_STL:STRING=c++_static
351369
echo "::endgroup::"
352-
echo "::group::Build and Test"
353-
cmake --build out --config MinSizeRel --target run-test
370+
echo "::group::Build"
371+
cmake --build out --config MinSizeRel --target tests
372+
echo "::endgroup::"
373+
echo "::group::Test"
374+
ctest --test-dir out -C MinSizeRel --output-on-failure -VV
354375
echo "::endgroup::"
355376
356377
emscripten:
@@ -385,9 +406,13 @@ jobs:
385406
run: cmake -GNinja -S . -B out -DCMAKE_TOOLCHAIN_FILE=$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DCMAKE_BUILD_TYPE=MinSizeRel
386407

387408

388-
- name: Build and Test
409+
- name: Build
410+
shell: bash
411+
run: cmake --build out --config MinSizeRel --target tests
412+
413+
- name: Test
389414
shell: bash
390-
run: cmake --build out --config MinSizeRel --target run-test
415+
run: ctest --test-dir out -C MinSizeRel --output-on-failure -VV
391416

392417
pythons:
393418
runs-on: ubuntu-latest
@@ -410,14 +435,12 @@ jobs:
410435

411436
- name: Configure
412437
shell: bash
413-
run: |
414-
cmake -S . -B out -DCMAKE_BUILD_TYPE=MinSizeRel
438+
run: cmake -S . -B out -DCMAKE_BUILD_TYPE=MinSizeRel
415439

416-
- name: Build and Test
440+
- name: Build
417441
shell: bash
418-
run: |
419-
cmake --build out --config MinSizeRel --target test-20python test-23python
420-
echo Running test-20python
421-
out/test/test-20python -ni -fc
422-
echo Running test-23python
423-
out/test/test-23python -ni -fc
442+
run: cmake --build out --config MinSizeRel --target test-20python test-23python
443+
444+
- name: Test
445+
shell: bash
446+
run: ctest --test-dir out -C MinSizeRel --output-on-failure -VV -R '.*python'

CMakeLists.txt

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -26,45 +26,45 @@ if (PROJECT_IS_TOP_LEVEL)
2626

2727
include(lib/cmake/install.cmake)
2828

29-
endif()
30-
31-
if(${Python3_Interpreter_FOUND} AND "${Python3_VERSION}" VERSION_GREATER_EQUAL "3.9")
32-
33-
file(GLOB UNICODE_DATA ${CMAKE_CURRENT_LIST_DIR}/unicode/data/*.txt)
34-
file(GLOB UNICODE_SCRIPTS ${CMAKE_CURRENT_LIST_DIR}/unicode/scripts/*.py)
35-
36-
set(UNICODE_GENERATED_FILES
37-
${CMAKE_CURRENT_LIST_DIR}/lib/inc/sys_string/impl/unicode/mappings.h
38-
${CMAKE_CURRENT_LIST_DIR}/test/test_grapheme_data.h
39-
${CMAKE_CURRENT_LIST_DIR}/test/test_grapheme_data_15.h
40-
${CMAKE_CURRENT_LIST_DIR}/test/test_grapheme_data_16.h
41-
${CMAKE_CURRENT_LIST_DIR}/test/test_normalization_data.h
42-
)
43-
44-
add_custom_command(
45-
COMMENT "Generating Unicoode mappings"
46-
OUTPUT ${UNICODE_GENERATED_FILES}
47-
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/unicode/scripts/genmappings.py
48-
${CMAKE_CURRENT_LIST_DIR}/unicode/data
49-
${UNICODE_GENERATED_FILES}
50-
DEPENDS
51-
${UNICODE_DATA}
29+
if(${Python3_Interpreter_FOUND} AND "${Python3_VERSION}" VERSION_GREATER_EQUAL "3.9")
30+
31+
file(GLOB UNICODE_DATA ${CMAKE_CURRENT_LIST_DIR}/unicode/data/*.txt)
32+
file(GLOB UNICODE_SCRIPTS ${CMAKE_CURRENT_LIST_DIR}/unicode/scripts/*.py)
33+
34+
set(UNICODE_GENERATED_FILES
35+
${CMAKE_CURRENT_LIST_DIR}/lib/inc/sys_string/impl/unicode/mappings.h
36+
${CMAKE_CURRENT_LIST_DIR}/test/test_grapheme_data.h
37+
${CMAKE_CURRENT_LIST_DIR}/test/test_grapheme_data_15.h
38+
${CMAKE_CURRENT_LIST_DIR}/test/test_grapheme_data_16.h
39+
${CMAKE_CURRENT_LIST_DIR}/test/test_normalization_data.h
40+
)
41+
42+
add_custom_command(
43+
COMMENT "Generating Unicoode mappings"
44+
OUTPUT ${UNICODE_GENERATED_FILES}
45+
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/unicode/scripts/genmappings.py
46+
${CMAKE_CURRENT_LIST_DIR}/unicode/data
47+
${UNICODE_GENERATED_FILES}
48+
DEPENDS
49+
${UNICODE_DATA}
50+
${UNICODE_SCRIPTS}
51+
)
52+
53+
add_custom_target(generate_unicode_mappings
54+
DEPENDS
55+
${UNICODE_GENERATED_FILES}
56+
)
57+
58+
target_sources(generate_unicode_mappings
59+
PRIVATE
5260
${UNICODE_SCRIPTS}
53-
)
54-
55-
add_custom_target(generate_unicode_mappings
56-
DEPENDS
57-
${UNICODE_GENERATED_FILES}
58-
)
61+
)
5962

60-
target_sources(generate_unicode_mappings
61-
PRIVATE
62-
${UNICODE_SCRIPTS}
63-
)
63+
set_source_files_properties(${UNICODE_SCRIPTS} PROPERTIES XCODE_EXPLICIT_FILE_TYPE text.script.python)
6464

65-
set_source_files_properties(${UNICODE_SCRIPTS} PROPERTIES XCODE_EXPLICIT_FILE_TYPE text.script.python)
65+
add_dependencies(sys_string generate_unicode_mappings)
6666

67-
add_dependencies(sys_string generate_unicode_mappings)
67+
endif()
6868

6969
endif()
7070

test/CMakeLists.txt

Lines changed: 56 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -145,9 +145,6 @@ set(STORAGE_FLAG_andr "")
145145
set(STORAGE_FLAG_unix_gen SYS_STRING_USE_GENERIC=1)
146146
set(STORAGE_FLAG_python SYS_STRING_USE_PYTHON=1)
147147

148-
set(TEST_COMMAND "")
149-
set(TEST_DEPS "")
150-
151148
if (${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})
163159
endif()
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+
165209
set(LIB_TYPES " ")
166210
if (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

350379
endforeach()
351380
endforeach()
@@ -357,7 +386,3 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND ${Python3_Development_FOUND} AND ${
357386
)
358387
endif()
359388

360-
add_custom_target(run-test
361-
DEPENDS ${TEST_DEPS}
362-
${TEST_COMMAND}
363-
)

0 commit comments

Comments
 (0)