diff options
author | Abseil Team <absl-team@google.com> | 2020-01-16 19:58:28 (GMT) |
---|---|---|
committer | Xiaoyi Zhang <zhangxy@google.com> | 2020-01-21 21:26:08 (GMT) |
commit | 18b67bfc58b1c5657198e5d7e5cc9a99049b154e (patch) | |
tree | 9f5554aeb77e4dfae8d697b4714d9f0f84eff903 /googletest | |
parent | 8b4817e3df3746a20502a84580f661ac448821be (diff) | |
download | googletest-18b67bfc58b1c5657198e5d7e5cc9a99049b154e.zip googletest-18b67bfc58b1c5657198e5d7e5cc9a99049b154e.tar.gz googletest-18b67bfc58b1c5657198e5d7e5cc9a99049b154e.tar.bz2 |
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
Diffstat (limited to 'googletest')
-rw-r--r-- | googletest/include/gtest/internal/gtest-param-util.h | 5 | ||||
-rw-r--r-- | googletest/src/gtest.cc | 21 | ||||
-rw-r--r-- | googletest/test/googletest-output-test-golden-lin.txt | 17 | ||||
-rw-r--r-- | googletest/test/googletest-output-test_.cc | 4 |
4 files changed, 37 insertions, 10 deletions
diff --git a/googletest/include/gtest/internal/gtest-param-util.h b/googletest/include/gtest/internal/gtest-param-util.h index 65aa956..7f7a13b 100644 --- a/googletest/include/gtest/internal/gtest-param-util.h +++ b/googletest/include/gtest/internal/gtest-param-util.h @@ -483,7 +483,7 @@ struct MarkAsIgnored { }; GTEST_API_ void InsertSyntheticTestCase(const std::string& name, - CodeLocation location); + CodeLocation location, bool has_test_p); // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // @@ -600,7 +600,8 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase { if (!generated_instantiations) { // There are no generaotrs, or they all generate nothing ... - InsertSyntheticTestCase(GetTestSuiteName(), code_location_); + InsertSyntheticTestCase(GetTestSuiteName(), code_location_, + !tests_.empty()); } } // RegisterTests diff --git a/googletest/src/gtest.cc b/googletest/src/gtest.cc index 1f8a68e..095778e 100644 --- a/googletest/src/gtest.cc +++ b/googletest/src/gtest.cc @@ -455,19 +455,32 @@ MarkAsIgnored::MarkAsIgnored(const char* test_suite) { // If this parameterized test suite has no instantiations (and 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(); if (ignored.find(name) != ignored.end()) return; - std::string message = - "Paramaterized test suite " + name + + const char kMissingInstantiation[] = // " 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." "\n\n" "Ideally, TEST_P definitions should only ever be included as part of " "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" "To suppress this error for this test suite, insert the following line " "(in a non-header) in the namespace it is defined in:" diff --git a/googletest/test/googletest-output-test-golden-lin.txt b/googletest/test/googletest-output-test-golden-lin.txt index 2b34aad..8bc4580 100644 --- a/googletest/test/googletest-output-test-golden-lin.txt +++ b/googletest/test/googletest-output-test-golden-lin.txt @@ -12,7 +12,7 @@ Expected equality of these values: 3 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. FooEnvironment::SetUp() called. BarEnvironment::SetUp() called. @@ -982,7 +982,16 @@ Expected failure Stack trace: (omitted) [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> 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. Stack trace: (omitted) -[0;32m[==========] [m87 tests from 41 test suites ran. -[0;32m[ PASSED ] [m33 tests. +[0;32m[==========] [m88 tests from 41 test suites ran. +[0;32m[ PASSED ] [m34 tests. [0;31m[ FAILED ] [m54 tests, listed below: [0;31m[ FAILED ] [mNonfatalFailureTest.EscapesStringOperands [0;31m[ FAILED ] [mNonfatalFailureTest.DiffForLongStrings diff --git a/googletest/test/googletest-output-test_.cc b/googletest/test/googletest-output-test_.cc index b1d66f9..76af5bc 100644 --- a/googletest/test/googletest-output-test_.cc +++ b/googletest/test/googletest-output-test_.cc @@ -790,6 +790,10 @@ INSTANTIATE_TEST_SUITE_P(PrintingStrings, testing::Values(std::string("a")), 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 class DetectNotInstantiatedTest : public testing::TestWithParam<int> {}; TEST_P(DetectNotInstantiatedTest, Used) { } |