test: add build rule that runs all tests

This commit is contained in:
Bert Belder 2017-11-27 00:48:03 +01:00
parent 424898f518
commit 700f9f73a4
2 changed files with 53 additions and 0 deletions

View File

@ -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
View 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);
}