test: add build rule that runs all tests
This commit is contained in:
parent
424898f518
commit
700f9f73a4
@ -30,8 +30,20 @@ foreach(TEST_SOURCE ${SOURCES_TEST})
|
||||
get_filename_component(TEST_NAME ${TEST_SOURCE} NAME_WE)
|
||||
add_executable(${TEST_NAME} ${TEST_SOURCE} ${SOURCES_SRC} ${SOURCES_SRC_REGULAR} ${SOURCES_TEST_SHARED})
|
||||
target_include_directories(${TEST_NAME} PUBLIC include src src/regular)
|
||||
list(APPEND TEST_TARGETS ${TEST_NAME})
|
||||
list(APPEND TEST_OUTPUTS $<TARGET_FILE:${TEST_NAME}>)
|
||||
endforeach(TEST_SOURCE ${SOURCES_TEST})
|
||||
|
||||
set(TEST_ALL_STAMP "test-all.stamp")
|
||||
set(TEST_RUNNER "tools/run-tests.js")
|
||||
add_custom_command(
|
||||
OUTPUT ${TEST_ALL_STAMP}
|
||||
COMMAND node ${TEST_RUNNER} ${TEST_OUTPUTS}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
DEPENDS ${TEST_RUNNER} ${TEST_TARGETS}
|
||||
)
|
||||
add_custom_target(test-all DEPENDS ${TEST_ALL_STAMP})
|
||||
|
||||
foreach(HEADER_SOURCE ${SOURCES_INCLUDE})
|
||||
get_filename_component(HEADER_NAME ${HEADER_SOURCE} NAME_WE)
|
||||
string(TOUPPER ${HEADER_NAME} HEADER_NAME_UC)
|
||||
|
||||
41
tools/run-tests.js
Normal file
41
tools/run-tests.js
Normal file
@ -0,0 +1,41 @@
|
||||
|
||||
const spawn = require('child_process').spawn;
|
||||
const basename = require('path').basename;
|
||||
|
||||
const test_exes = process.argv.slice(2);
|
||||
run_tests(test_exes);
|
||||
|
||||
function run_tests(test_exes, num = 0, fail_count = 0) {
|
||||
if (test_exes.length <= num)
|
||||
return done(test_exes, fail_count);
|
||||
|
||||
const test_exe = test_exes[num];
|
||||
const test_name = basename(test_exe, '.exe');
|
||||
|
||||
console.log('(%d/%d) %s...', (num + 1), test_exes.length, test_name);
|
||||
|
||||
const child = spawn(test_exe, [], { encoding: 'utf8' });
|
||||
|
||||
let out = '';
|
||||
child.stdout.on('data', (data) => out += data);
|
||||
child.stderr.on('data', (data) => out += data);
|
||||
|
||||
child.on('exit', (code) => {
|
||||
if (code === 0) {
|
||||
console.log(' PASS')
|
||||
} else {
|
||||
console.log(' FAIL\n' + out);
|
||||
fail_count++;
|
||||
}
|
||||
|
||||
run_tests(test_exes, num + 1, fail_count);
|
||||
});
|
||||
}
|
||||
|
||||
function done(test_exes, fail_count) {
|
||||
let pass_count = test_exes.length - fail_count;
|
||||
console.log(' DONE - %d PASSED, %d FAILED', pass_count, fail_count);
|
||||
|
||||
process.exit(fail_count == 0 ? 0 : 1);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user