mirror of
https://github.com/reactos/CMake.git
synced 2024-11-24 12:09:48 +00:00
CTest: Restore inheritance of stdin by test processes
Since commit v3.11.0-rc1~117^2 (CTest: Re-implement test process handling using libuv, 2017-12-10) we do not give the child test processes any stdin. Prior to that change we let the child test processes inherit stdin from ctest itself. Tests that run serially might be able to use the real stdin meaningfully, so restore that behavior and add a test case. Fixes: #18591
This commit is contained in:
parent
bdec3bd896
commit
86e8315482
@ -127,7 +127,8 @@ bool cmProcess::StartProcess(uv_loop_t& loop, std::vector<size_t>* affinity)
|
||||
uv_pipe_open(pipe_writer, fds[1]);
|
||||
|
||||
uv_stdio_container_t stdio[3];
|
||||
stdio[0].flags = UV_IGNORE;
|
||||
stdio[0].flags = UV_INHERIT_FD;
|
||||
stdio[0].data.fd = 0;
|
||||
stdio[1].flags = UV_INHERIT_STREAM;
|
||||
stdio[1].data.stream = pipe_writer;
|
||||
stdio[2] = stdio[1];
|
||||
|
@ -368,7 +368,8 @@ add_RunCMake_test(FetchContent)
|
||||
if(NOT CMake_TEST_EXTERNAL_CMAKE)
|
||||
set(CTestCommandLine_ARGS -DTEST_AFFINITY=$<TARGET_FILE:testAffinity>)
|
||||
endif()
|
||||
add_RunCMake_test(CTestCommandLine)
|
||||
add_executable(print_stdin print_stdin.c)
|
||||
add_RunCMake_test(CTestCommandLine -DTEST_PRINT_STDIN=$<TARGET_FILE:print_stdin>)
|
||||
add_RunCMake_test(CacheNewline)
|
||||
# Only run this test on unix platforms that support
|
||||
# symbolic links
|
||||
|
@ -161,3 +161,15 @@ endfunction()
|
||||
if(TEST_AFFINITY)
|
||||
run_TestAffinity()
|
||||
endif()
|
||||
|
||||
function(run_TestStdin)
|
||||
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/TestStdin)
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
|
||||
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
|
||||
file(WRITE "${RunCMake_TEST_BINARY_DIR}/CTestTestfile.cmake" "
|
||||
add_test(TestStdin \"${TEST_PRINT_STDIN}\")
|
||||
")
|
||||
run_cmake_command(TestStdin ${CMAKE_CTEST_COMMAND} -V)
|
||||
endfunction()
|
||||
run_TestStdin()
|
||||
|
1
Tests/RunCMake/CTestCommandLine/TestStdin-stdin.txt
Normal file
1
Tests/RunCMake/CTestCommandLine/TestStdin-stdin.txt
Normal file
@ -0,0 +1 @@
|
||||
Content for TestStdin
|
1
Tests/RunCMake/CTestCommandLine/TestStdin-stdout.txt
Normal file
1
Tests/RunCMake/CTestCommandLine/TestStdin-stdout.txt
Normal file
@ -0,0 +1 @@
|
||||
Content for TestStdin
|
18
Tests/RunCMake/print_stdin.c
Normal file
18
Tests/RunCMake/print_stdin.c
Normal file
@ -0,0 +1,18 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
char buf[1024];
|
||||
size_t nIn = sizeof(buf);
|
||||
while (nIn == sizeof(buf)) {
|
||||
nIn = fread(buf, 1, sizeof(buf), stdin);
|
||||
if (nIn > 0) {
|
||||
size_t nOut;
|
||||
nOut = fwrite(buf, 1, nIn, stdout);
|
||||
if (nOut != nIn) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user