Merge topic 'ctest-custom-output-size'

fd47df45 CTest: Add options to limit output of passed and failed tests
6e3151f6 CTest: Document and test custom output size settings
This commit is contained in:
Brad King 2015-09-21 09:25:24 -04:00 committed by CMake Topic Stage
commit 82a0c7be3f
16 changed files with 148 additions and 1 deletions

View File

@ -85,3 +85,6 @@ The options are:
been printed to the console. Output from the underlying test command is not
affected. Summary info detailing the percentage of passing tests is also
unaffected by the ``QUIET`` option.
See also the :variable:`CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE`
and :variable:`CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE` variables.

View File

@ -374,6 +374,8 @@ Variables for CTest
/variable/CTEST_COVERAGE_COMMAND
/variable/CTEST_COVERAGE_EXTRA_FLAGS
/variable/CTEST_CURL_OPTIONS
/variable/CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE
/variable/CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE
/variable/CTEST_CVS_CHECKOUT
/variable/CTEST_CVS_COMMAND
/variable/CTEST_CVS_UPDATE_OPTIONS

View File

@ -302,6 +302,12 @@ Options
``--test-command``
The test to run with the --build-and-test option.
``--test-output-size-passed <size>``
Limit the output for passed tests to <size> bytes.
``--test-output-size-failed <size>``
Limit the output for failed tests to <size> bytes.
``--test-timeout``
The time limit in seconds, internal use only.

View File

@ -0,0 +1,7 @@
ctest-custom-output-size
------------------------
* :manual:`ctest(1)` learned options
``--test-output-size-passed`` and ``--test-output-size-failed``
to customize the limit on test output size submitted when
running as a :ref:`Dashboard Client`.

View File

@ -0,0 +1,6 @@
CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE
--------------------------------------------
Specify the maximum amount of output from a failed test that will
be collected by the :command:`ctest_test` command. If not set,
the default is 300 KiB.

View File

@ -0,0 +1,6 @@
CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE
--------------------------------------------
Specify the maximum amount of output from a passed test that will
be collected by the :command:`ctest_test` command. If not set,
the default is 1 KiB.

View File

@ -65,6 +65,11 @@ public:
void SetMaxIndex(int n) {this->MaxIndex = n;}
int GetMaxIndex() {return this->MaxIndex;}
void SetTestOutputSizePassed(int n)
{ this->CustomMaximumPassedTestOutputSize = n; }
void SetTestOutputSizeFailed(int n)
{ this->CustomMaximumFailedTestOutputSize = n; }
///! pass the -I argument down
void SetTestsToRunInformation(const char*);

View File

@ -2165,7 +2165,46 @@ bool cmCTest::HandleCommandLineArguments(size_t &i,
{
this->OutputTestOutputOnTestFailure = true;
}
if (this->CheckArgument(arg, "--test-output-size-passed") &&
i < args.size() - 1)
{
i++;
long outputSize;
if (cmSystemTools::StringToLong(args[i].c_str(), &outputSize))
{
if (cmCTestTestHandler *pCTestTestHandler =
static_cast<cmCTestTestHandler*>(this->TestingHandlers["test"]))
{
pCTestTestHandler->SetTestOutputSizePassed(int(outputSize));
}
}
else
{
cmCTestLog(this, WARNING,
"Invalid value for '--test-output-size-passed': " <<
args[i] << "\n");
}
}
if (this->CheckArgument(arg, "--test-output-size-failed") &&
i < args.size() - 1)
{
i++;
long outputSize;
if (cmSystemTools::StringToLong(args[i].c_str(), &outputSize))
{
if (cmCTestTestHandler *pCTestTestHandler =
static_cast<cmCTestTestHandler*>(this->TestingHandlers["test"]))
{
pCTestTestHandler->SetTestOutputSizeFailed(int(outputSize));
}
}
else
{
cmCTestLog(this, WARNING,
"Invalid value for '--test-output-size-failed': " <<
args[i] << "\n");
}
}
if(this->CheckArgument(arg, "-N", "--show-only"))
{
this->ShowOnly = true;

View File

@ -46,6 +46,10 @@ static const char * cmDocumentationOptions[][2] =
{"--debug", "Displaying more verbose internals of CTest."},
{"--output-on-failure", "Output anything outputted by the test program "
"if the test should fail."},
{"--test-output-size-passed <size>", "Limit the output for passed tests "
"to <size> bytes"},
{"--test-output-size-failed <size>", "Limit the output for failed tests "
"to <size> bytes"},
{"-F", "Enable failover."},
{"-j <jobs>, --parallel <jobs>", "Run the tests in parallel using the "
"given number of jobs."},

View File

@ -108,3 +108,20 @@ run_TestLoad(test-load-invalid 'two')
run_TestLoad(test-load-pass 10)
unset(ENV{__CTEST_FAKE_LOAD_AVERAGE_FOR_TESTING})
function(run_TestOutputSize)
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/TestOutputSize)
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(PassingTest \"${CMAKE_COMMAND}\" -E echo PassingTestOutput)
add_test(FailingTest \"${CMAKE_COMMAND}\" -E no_such_command)
")
run_cmake_command(TestOutputSize
${CMAKE_CTEST_COMMAND} -M Experimental -T Test
--test-output-size-passed 10
--test-output-size-failed 12
)
endfunction()
run_TestOutputSize()

View File

@ -0,0 +1,17 @@
file(GLOB test_xml_file "${RunCMake_TEST_BINARY_DIR}/Testing/*/Test.xml")
if(test_xml_file)
file(READ "${test_xml_file}" test_xml LIMIT 4096)
if("${test_xml}" MATCHES [[(<Test Status="passed">.*</Test>).*(<Test Status="failed">.*</Test>)]])
set(test_passed "${CMAKE_MATCH_1}")
set(test_failed "${CMAKE_MATCH_2}")
else()
set(RunCMake_TEST_FAILED "Test.xml does not contain a passed then failed test:\n ${test_xml}")
endif()
if(NOT "${test_passed}" MATCHES [[<Value>PassingTes\.\.\..*10 bytes]])
set(RunCMake_TEST_FAILED "Test.xml passed test output not truncated at 10 bytes:\n ${test_passed}")
elseif(NOT "${test_failed}" MATCHES [[<Value>CMake Error:\.\.\..*12 bytes]])
set(RunCMake_TEST_FAILED "Test.xml failed test output not truncated at 12 bytes:\n ${test_failed}")
endif()
else()
set(RunCMake_TEST_FAILED "Test.xml not found")
endif()

View File

@ -0,0 +1 @@
.

View File

@ -0,0 +1 @@
Errors while running CTest

View File

@ -2,3 +2,4 @@ cmake_minimum_required(VERSION 3.1)
project(CTestTest@CASE_NAME@ NONE)
include(CTest)
add_test(NAME RunCMakeVersion COMMAND "${CMAKE_COMMAND}" --version)
@CASE_CMAKELISTS_SUFFIX_CODE@

View File

@ -59,3 +59,18 @@ function(run_TestChangeId)
run_ctest(TestChangeId)
endfunction()
run_TestChangeId()
function(run_TestOutputSize)
set(CASE_CTEST_TEST_ARGS EXCLUDE RunCMakeVersion)
set(CASE_TEST_PREFIX_CODE [[
set(CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE 10)
set(CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE 12)
]])
set(CASE_CMAKELISTS_SUFFIX_CODE [[
add_test(NAME PassingTest COMMAND ${CMAKE_COMMAND} -E echo PassingTestOutput)
add_test(NAME FailingTest COMMAND ${CMAKE_COMMAND} -E no_such_command)
]])
run_ctest(TestOutputSize)
endfunction()
run_TestOutputSize()

View File

@ -0,0 +1,17 @@
file(GLOB test_xml_file "${RunCMake_TEST_BINARY_DIR}/Testing/*/Test.xml")
if(test_xml_file)
file(READ "${test_xml_file}" test_xml LIMIT 4096)
if("${test_xml}" MATCHES [[(<Test Status="passed">.*</Test>).*(<Test Status="failed">.*</Test>)]])
set(test_passed "${CMAKE_MATCH_1}")
set(test_failed "${CMAKE_MATCH_2}")
else()
set(RunCMake_TEST_FAILED "Test.xml does not contain a passed then failed test:\n ${test_xml}")
endif()
if(NOT "${test_passed}" MATCHES [[<Value>PassingTes\.\.\..*10 bytes]])
set(RunCMake_TEST_FAILED "Test.xml passed test output not truncated at 10 bytes:\n ${test_passed}")
elseif(NOT "${test_failed}" MATCHES [[<Value>CMake Error:\.\.\..*12 bytes]])
set(RunCMake_TEST_FAILED "Test.xml failed test output not truncated at 12 bytes:\n ${test_failed}")
endif()
else()
set(RunCMake_TEST_FAILED "Test.xml not found")
endif()