diff options
| author | Abseil Team <absl-team@google.com> | 2019-12-19 12:36:47 -0500 | 
|---|---|---|
| committer | Andy Soffer <asoffer@google.com> | 2020-01-02 16:48:59 -0500 | 
| commit | a13a0626188b4e7d22d63a4c9fcfe9f441c81e4a (patch) | |
| tree | 29e7ba132b7ec3acf8943cf3195cadb5c287a703 /googletest/test | |
| parent | 008629ae2163035dabd428d581379fa5aac4b7bb (diff) | |
| download | googletest-a13a0626188b4e7d22d63a4c9fcfe9f441c81e4a.tar.gz googletest-a13a0626188b4e7d22d63a4c9fcfe9f441c81e4a.tar.bz2 googletest-a13a0626188b4e7d22d63a4c9fcfe9f441c81e4a.zip | |
Googletest export
Add option (default to disabled) to make C++ type parameterized tests (TYPED_TEST_P) fail when they're not instantiated.
When an un-instantiated TYPED_TEST_P is found, a new test will be inserted that emits a suitable message. For now, that is just a notice, but the hope it to flip the bit to make it fail by default.
PiperOrigin-RevId: 286408038
Diffstat (limited to 'googletest/test')
| -rw-r--r-- | googletest/test/googletest-output-test-golden-lin.txt | 13 | ||||
| -rw-r--r-- | googletest/test/googletest-output-test_.cc | 15 | ||||
| -rw-r--r-- | googletest/test/googletest-param-test-test.cc | 5 | ||||
| -rw-r--r-- | googletest/test/gtest-typed-test_test.cc | 12 | 
4 files changed, 35 insertions, 10 deletions
| diff --git a/googletest/test/googletest-output-test-golden-lin.txt b/googletest/test/googletest-output-test-golden-lin.txt index a08140e1..c1db004c 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 86 tests from 41 test suites. +[0;32m[==========] [mRunning 87 tests from 41 test suites.  [0;32m[----------] [mGlobal test environment set-up.  FooEnvironment::SetUp() called.  BarEnvironment::SetUp() called. @@ -982,12 +982,17 @@ Expected failure  Stack trace: (omitted)  [0;31m[  FAILED  ] [mPrintingStrings/ParamTest.Failure/a, where GetParam() = "a" -[0;32m[----------] [m1 test from GoogleTestVerification +[0;32m[----------] [m2 tests from GoogleTestVerification  [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.  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.)  [0;32m[       OK ] [mGoogleTestVerification.UninstantiatedParamaterizedTestSuite<DetectNotInstantiatedTest> +[0;32m[ RUN      ] [mGoogleTestVerification.UninstantiatedTypeParamaterizedTestSuite<DetectNotInstantiatedTypesTest> +Type paramaterized test suite DetectNotInstantiatedTypesTest is defined via REGISTER_TYPED_TEST_SUITE_P, but never instantiated via INSTANTIATE_TYPED_TEST_SUITE_P. None of the test cases will run. + +Ideally, TYPED_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.) +[0;32m[       OK ] [mGoogleTestVerification.UninstantiatedTypeParamaterizedTestSuite<DetectNotInstantiatedTypesTest>  [0;32m[----------] [mGlobal test environment tear-down  BarEnvironment::TearDown() called.  googletest-output-test_.cc:#: Failure @@ -1001,8 +1006,8 @@ Failed  Expected fatal failure.  Stack trace: (omitted) -[0;32m[==========] [m86 tests from 41 test suites ran. -[0;32m[  PASSED  ] [m32 tests. +[0;32m[==========] [m87 tests from 41 test suites ran. +[0;32m[  PASSED  ] [m33 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 1c7943c3..b1d66f9f 100644 --- a/googletest/test/googletest-output-test_.cc +++ b/googletest/test/googletest-output-test_.cc @@ -876,6 +876,21 @@ class TypedTestPNames {  INSTANTIATE_TYPED_TEST_SUITE_P(UnsignedCustomName, TypedTestP, UnsignedTypes,                                TypedTestPNames); +template <typename T> +class DetectNotInstantiatedTypesTest : public testing::Test {}; +TYPED_TEST_SUITE_P(DetectNotInstantiatedTypesTest); +TYPED_TEST_P(DetectNotInstantiatedTypesTest, Used) { +  TypeParam instantiate; +  (void)instantiate; +} +REGISTER_TYPED_TEST_SUITE_P(DetectNotInstantiatedTypesTest, Used); + +// kErrorOnUninstantiatedTypeParameterizedTest=true would make the above fail. +// Adding the following would make that test failure go away. +// +// typedef ::testing::Types<char, int, unsigned int> MyTypes; +// INSTANTIATE_TYPED_TEST_SUITE_P(All, DetectNotInstantiatedTypesTest, MyTypes); +  #endif  // GTEST_HAS_TYPED_TEST_P  #if GTEST_HAS_DEATH_TEST diff --git a/googletest/test/googletest-param-test-test.cc b/googletest/test/googletest-param-test-test.cc index 85c76c34..f92eb316 100644 --- a/googletest/test/googletest-param-test-test.cc +++ b/googletest/test/googletest-param-test-test.cc @@ -1072,6 +1072,11 @@ namespace works_here {  // Never used not instantiated, this should work.  class NotUsedTest : public testing::TestWithParam<int> {}; +/////// +// Never used not instantiated, this should work. +template <typename T> +class NotUsedTypeTest : public testing::Test {}; +TYPED_TEST_SUITE_P(NotUsedTypeTest);  }  // namespace works_here  int main(int argc, char **argv) { diff --git a/googletest/test/gtest-typed-test_test.cc b/googletest/test/gtest-typed-test_test.cc index 5411832a..0c1f660f 100644 --- a/googletest/test/gtest-typed-test_test.cc +++ b/googletest/test/gtest-typed-test_test.cc @@ -228,7 +228,7 @@ class TypedTestSuitePStateTest : public Test {  TEST_F(TypedTestSuitePStateTest, SucceedsForMatchingList) {    const char* tests = "A, B, C";    EXPECT_EQ(tests, -            state_.VerifyRegisteredTestNames("foo.cc", 1, tests)); +            state_.VerifyRegisteredTestNames("Suite", "foo.cc", 1, tests));  }  // Makes sure that the order of the tests and spaces around the names @@ -236,33 +236,33 @@ TEST_F(TypedTestSuitePStateTest, SucceedsForMatchingList) {  TEST_F(TypedTestSuitePStateTest, IgnoresOrderAndSpaces) {    const char* tests = "A,C,   B";    EXPECT_EQ(tests, -            state_.VerifyRegisteredTestNames("foo.cc", 1, tests)); +            state_.VerifyRegisteredTestNames("Suite", "foo.cc", 1, tests));  }  using TypedTestSuitePStateDeathTest = TypedTestSuitePStateTest;  TEST_F(TypedTestSuitePStateDeathTest, DetectsDuplicates) {    EXPECT_DEATH_IF_SUPPORTED( -      state_.VerifyRegisteredTestNames("foo.cc", 1, "A, B, A, C"), +      state_.VerifyRegisteredTestNames("Suite", "foo.cc", 1, "A, B, A, C"),        "foo\\.cc.1.?: Test A is listed more than once\\.");  }  TEST_F(TypedTestSuitePStateDeathTest, DetectsExtraTest) {    EXPECT_DEATH_IF_SUPPORTED( -      state_.VerifyRegisteredTestNames("foo.cc", 1, "A, B, C, D"), +      state_.VerifyRegisteredTestNames("Suite", "foo.cc", 1, "A, B, C, D"),        "foo\\.cc.1.?: No test named D can be found in this test suite\\.");  }  TEST_F(TypedTestSuitePStateDeathTest, DetectsMissedTest) {    EXPECT_DEATH_IF_SUPPORTED( -      state_.VerifyRegisteredTestNames("foo.cc", 1, "A, C"), +      state_.VerifyRegisteredTestNames("Suite", "foo.cc", 1, "A, C"),        "foo\\.cc.1.?: You forgot to list test B\\.");  }  // Tests that defining a test for a parameterized test case generates  // a run-time error if the test case has been registered.  TEST_F(TypedTestSuitePStateDeathTest, DetectsTestAfterRegistration) { -  state_.VerifyRegisteredTestNames("foo.cc", 1, "A, B, C"); +  state_.VerifyRegisteredTestNames("Suite", "foo.cc", 1, "A, B, C");    EXPECT_DEATH_IF_SUPPORTED(        state_.AddTestName("foo.cc", 2, "FooTest", "D"),        "foo\\.cc.2.?: Test D must be defined before REGISTER_TYPED_TEST_SUITE_P" | 
