Googletest export
Add extra filtering so that the reported message differentiates between the case where INSTANTIATE_TEST_SUITE_P is missing vs. the case where TEST_P is missing. PiperOrigin-RevId: 290114508
This commit is contained in:
parent
8b4817e3df
commit
18b67bfc58
googletest
include/gtest/internal
src
test
|
@ -483,7 +483,7 @@ struct MarkAsIgnored {
|
||||||
};
|
};
|
||||||
|
|
||||||
GTEST_API_ void InsertSyntheticTestCase(const std::string& name,
|
GTEST_API_ void InsertSyntheticTestCase(const std::string& name,
|
||||||
CodeLocation location);
|
CodeLocation location, bool has_test_p);
|
||||||
|
|
||||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
|
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
|
||||||
//
|
//
|
||||||
|
@ -600,7 +600,8 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase {
|
||||||
|
|
||||||
if (!generated_instantiations) {
|
if (!generated_instantiations) {
|
||||||
// There are no generaotrs, or they all generate nothing ...
|
// There are no generaotrs, or they all generate nothing ...
|
||||||
InsertSyntheticTestCase(GetTestSuiteName(), code_location_);
|
InsertSyntheticTestCase(GetTestSuiteName(), code_location_,
|
||||||
|
!tests_.empty());
|
||||||
}
|
}
|
||||||
} // RegisterTests
|
} // RegisterTests
|
||||||
|
|
||||||
|
|
|
@ -455,19 +455,32 @@ MarkAsIgnored::MarkAsIgnored(const char* test_suite) {
|
||||||
|
|
||||||
// If this parameterized test suite has no instantiations (and that
|
// If this parameterized test suite has no instantiations (and that
|
||||||
// has not been marked as okay), emit a test case reporting that.
|
// has not been marked as okay), emit a test case reporting that.
|
||||||
void InsertSyntheticTestCase(const std::string &name, CodeLocation location) {
|
void InsertSyntheticTestCase(const std::string& name, CodeLocation location,
|
||||||
|
bool has_test_p) {
|
||||||
const auto& ignored = *GetIgnoredParameterizedTestSuites();
|
const auto& ignored = *GetIgnoredParameterizedTestSuites();
|
||||||
if (ignored.find(name) != ignored.end()) return;
|
if (ignored.find(name) != ignored.end()) return;
|
||||||
|
|
||||||
std::string message =
|
const char kMissingInstantiation[] = //
|
||||||
"Paramaterized test suite " + name +
|
|
||||||
" is defined via TEST_P, but never instantiated. None of the test cases "
|
" is defined via TEST_P, but never instantiated. None of the test cases "
|
||||||
"will run. Either no INSTANTIATE_TEST_SUITE_P is provided or the only "
|
"will run. Either no INSTANTIATE_TEST_SUITE_P is provided or the only "
|
||||||
"ones provided expand to nothing."
|
"ones provided expand to nothing."
|
||||||
"\n\n"
|
"\n\n"
|
||||||
"Ideally, TEST_P definitions should only ever be included as part of "
|
"Ideally, TEST_P definitions should only ever be included as part of "
|
||||||
"binaries that intend to use them. (As opposed to, for example, being "
|
"binaries that intend to use them. (As opposed to, for example, being "
|
||||||
"placed in a library that may be linked in to get other utilities.)"
|
"placed in a library that may be linked in to get other utilities.)";
|
||||||
|
|
||||||
|
const char kMissingTestCase[] = //
|
||||||
|
" is instantiated via INSTANTIATE_TEST_SUITE_P, but no tests are "
|
||||||
|
"defined via TEST_P . No test cases will run."
|
||||||
|
"\n\n"
|
||||||
|
"Ideally, INSTANTIATE_TEST_SUITE_P should only ever be invoked from "
|
||||||
|
"code that always depend on code that provides TEST_P. Failing to do "
|
||||||
|
"so is often an indication of dead code, e.g. the last TEST_P was "
|
||||||
|
"removed but the rest got left behind.";
|
||||||
|
|
||||||
|
std::string message =
|
||||||
|
"Paramaterized test suite " + name +
|
||||||
|
(has_test_p ? kMissingInstantiation : kMissingTestCase) +
|
||||||
"\n\n"
|
"\n\n"
|
||||||
"To suppress this error for this test suite, insert the following line "
|
"To suppress this error for this test suite, insert the following line "
|
||||||
"(in a non-header) in the namespace it is defined in:"
|
"(in a non-header) in the namespace it is defined in:"
|
||||||
|
|
|
@ -12,7 +12,7 @@ Expected equality of these values:
|
||||||
3
|
3
|
||||||
Stack trace: (omitted)
|
Stack trace: (omitted)
|
||||||
|
|
||||||
[0;32m[==========] [mRunning 87 tests from 41 test suites.
|
[0;32m[==========] [mRunning 88 tests from 41 test suites.
|
||||||
[0;32m[----------] [mGlobal test environment set-up.
|
[0;32m[----------] [mGlobal test environment set-up.
|
||||||
FooEnvironment::SetUp() called.
|
FooEnvironment::SetUp() called.
|
||||||
BarEnvironment::SetUp() called.
|
BarEnvironment::SetUp() called.
|
||||||
|
@ -982,7 +982,16 @@ Expected failure
|
||||||
Stack trace: (omitted)
|
Stack trace: (omitted)
|
||||||
|
|
||||||
[0;31m[ FAILED ] [mPrintingStrings/ParamTest.Failure/a, where GetParam() = "a"
|
[0;31m[ FAILED ] [mPrintingStrings/ParamTest.Failure/a, where GetParam() = "a"
|
||||||
[0;32m[----------] [m2 tests from GoogleTestVerification
|
[0;32m[----------] [m3 tests from GoogleTestVerification
|
||||||
|
[0;32m[ RUN ] [mGoogleTestVerification.UninstantiatedParamaterizedTestSuite<NoTests>
|
||||||
|
Paramaterized test suite NoTests is instantiated via INSTANTIATE_TEST_SUITE_P, but no tests are defined via TEST_P . No test cases will run.
|
||||||
|
|
||||||
|
Ideally, INSTANTIATE_TEST_SUITE_P should only ever be invoked from code that always depend on code that provides TEST_P. Failing to do so is often an indication of dead code, e.g. the last TEST_P was removed but the rest got left behind.
|
||||||
|
|
||||||
|
To suppress this error for this test suite, insert the following line (in a non-header) in the namespace it is defined in:
|
||||||
|
|
||||||
|
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(NoTests);
|
||||||
|
[0;32m[ OK ] [mGoogleTestVerification.UninstantiatedParamaterizedTestSuite<NoTests>
|
||||||
[0;32m[ RUN ] [mGoogleTestVerification.UninstantiatedParamaterizedTestSuite<DetectNotInstantiatedTest>
|
[0;32m[ RUN ] [mGoogleTestVerification.UninstantiatedParamaterizedTestSuite<DetectNotInstantiatedTest>
|
||||||
Paramaterized test suite DetectNotInstantiatedTest is defined via TEST_P, but never instantiated. None of the test cases will run. Either no INSTANTIATE_TEST_SUITE_P is provided or the only ones provided expand to nothing.
|
Paramaterized test suite DetectNotInstantiatedTest is defined via TEST_P, but never instantiated. None of the test cases will run. Either no INSTANTIATE_TEST_SUITE_P is provided or the only ones provided expand to nothing.
|
||||||
|
|
||||||
|
@ -1014,8 +1023,8 @@ Failed
|
||||||
Expected fatal failure.
|
Expected fatal failure.
|
||||||
Stack trace: (omitted)
|
Stack trace: (omitted)
|
||||||
|
|
||||||
[0;32m[==========] [m87 tests from 41 test suites ran.
|
[0;32m[==========] [m88 tests from 41 test suites ran.
|
||||||
[0;32m[ PASSED ] [m33 tests.
|
[0;32m[ PASSED ] [m34 tests.
|
||||||
[0;31m[ FAILED ] [m54 tests, listed below:
|
[0;31m[ FAILED ] [m54 tests, listed below:
|
||||||
[0;31m[ FAILED ] [mNonfatalFailureTest.EscapesStringOperands
|
[0;31m[ FAILED ] [mNonfatalFailureTest.EscapesStringOperands
|
||||||
[0;31m[ FAILED ] [mNonfatalFailureTest.DiffForLongStrings
|
[0;31m[ FAILED ] [mNonfatalFailureTest.DiffForLongStrings
|
||||||
|
|
|
@ -790,6 +790,10 @@ INSTANTIATE_TEST_SUITE_P(PrintingStrings,
|
||||||
testing::Values(std::string("a")),
|
testing::Values(std::string("a")),
|
||||||
ParamNameFunc);
|
ParamNameFunc);
|
||||||
|
|
||||||
|
// The case where a suite has INSTANTIATE_TEST_SUITE_P but not TEST_P.
|
||||||
|
using NoTests = ParamTest;
|
||||||
|
INSTANTIATE_TEST_SUITE_P(ThisIsOdd, NoTests, ::testing::Values("Hello"));
|
||||||
|
|
||||||
// fails under kErrorOnUninstantiatedParameterizedTest=true
|
// fails under kErrorOnUninstantiatedParameterizedTest=true
|
||||||
class DetectNotInstantiatedTest : public testing::TestWithParam<int> {};
|
class DetectNotInstantiatedTest : public testing::TestWithParam<int> {};
|
||||||
TEST_P(DetectNotInstantiatedTest, Used) { }
|
TEST_P(DetectNotInstantiatedTest, Used) { }
|
||||||
|
|
Loading…
Reference in New Issue
Block a user