diff options
-rw-r--r-- | .travis.yml | 3 | ||||
-rwxr-xr-x | ci/travis.sh | 10 | ||||
-rw-r--r-- | googlemock/cmake/gmock.pc.in | 2 | ||||
-rw-r--r-- | googlemock/cmake/gmock_main.pc.in | 2 | ||||
-rw-r--r-- | googlemock/docs/cook_book.md | 4 | ||||
-rw-r--r-- | googlemock/include/gmock/gmock-matchers.h | 2 | ||||
-rw-r--r-- | googletest/cmake/gtest_main.pc.in | 2 | ||||
-rw-r--r-- | googletest/docs/advanced.md | 14 | ||||
-rw-r--r-- | googletest/include/gtest/gtest-death-test.h | 5 | ||||
-rw-r--r-- | googletest/include/gtest/internal/gtest-internal.h | 8 | ||||
-rw-r--r-- | googletest/src/gtest-port.cc | 2 | ||||
-rw-r--r-- | googletest/src/gtest.cc | 2 | ||||
-rw-r--r-- | googletest/test/googletest-death-test-test.cc | 12 | ||||
-rw-r--r-- | googletest/test/googletest-death-test_ex_test.cc | 2 | ||||
-rw-r--r-- | googletest/test/googletest-param-test-test.cc | 10 | ||||
-rw-r--r-- | googletest/test/gtest-unittest-api_test.cc | 8 | ||||
-rw-r--r-- | googletest/test/gtest_unittest.cc | 4 |
17 files changed, 52 insertions, 40 deletions
diff --git a/.travis.yml b/.travis.yml index 04b51dde..27c725c0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,9 +28,6 @@ matrix: env: BUILD_TYPE=Debug VERBOSE=1 CXX_FLAGS=-std=c++11 - os: linux compiler: clang - env: BUILD_TYPE=Release VERBOSE=1 CXX_FLAGS=-std=c++11 -Wgnu-zero-variadic-macro-arguments - - os: linux - compiler: clang env: BUILD_TYPE=Release VERBOSE=1 CXX_FLAGS=-std=c++11 NO_EXCEPTION=ON NO_RTTI=ON COMPILER_IS_GNUCXX=ON - os: osx compiler: gcc diff --git a/ci/travis.sh b/ci/travis.sh index 5e935077..a2488229 100755 --- a/ci/travis.sh +++ b/ci/travis.sh @@ -19,11 +19,11 @@ cd build cmake -Dgtest_build_samples=ON \ -Dgtest_build_tests=ON \ -Dgmock_build_tests=ON \ - -Dcxx_no_exception=$NO_EXCEPTION \ - -Dcxx_no_rtti=$NO_RTTI \ - -DCMAKE_COMPILER_IS_GNUCXX=$COMPILER_IS_GNUCXX \ - -DCMAKE_CXX_FLAGS=$CXX_FLAGS \ - -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ + -Dcxx_no_exception="$NO_EXCEPTION" \ + -Dcxx_no_rtti="$NO_RTTI" \ + -DCMAKE_COMPILER_IS_GNUCXX="$COMPILER_IS_GNUCXX" \ + -DCMAKE_CXX_FLAGS="$CXX_FLAGS" \ + -DCMAKE_BUILD_TYPE="$BUILD_TYPE" \ .. make CTEST_OUTPUT_ON_FAILURE=1 make test diff --git a/googlemock/cmake/gmock.pc.in b/googlemock/cmake/gmock.pc.in index 5780fcaa..23c67b5c 100644 --- a/googlemock/cmake/gmock.pc.in +++ b/googlemock/cmake/gmock.pc.in @@ -5,6 +5,6 @@ Name: gmock Description: GoogleMock (without main() function) Version: @PROJECT_VERSION@ URL: https://github.com/google/googletest -Requires: gtest +Requires: gtest = @PROJECT_VERSION@ Libs: -L${libdir} -lgmock @CMAKE_THREAD_LIBS_INIT@ Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ diff --git a/googlemock/cmake/gmock_main.pc.in b/googlemock/cmake/gmock_main.pc.in index f2dfe69e..66ffea7f 100644 --- a/googlemock/cmake/gmock_main.pc.in +++ b/googlemock/cmake/gmock_main.pc.in @@ -5,6 +5,6 @@ Name: gmock_main Description: GoogleMock (with main() function) Version: @PROJECT_VERSION@ URL: https://github.com/google/googletest -Requires: gmock +Requires: gmock = @PROJECT_VERSION@ Libs: -L${libdir} -lgmock_main @CMAKE_THREAD_LIBS_INIT@ Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ diff --git a/googlemock/docs/cook_book.md b/googlemock/docs/cook_book.md index 51eb94a9..4dbfbe09 100644 --- a/googlemock/docs/cook_book.md +++ b/googlemock/docs/cook_book.md @@ -1712,8 +1712,8 @@ brittle tests. For example, we may care about `A` occurring before both `B` and the test should reflect our real intent, instead of being overly constraining. gMock allows you to impose an arbitrary DAG (directed acyclic graph) on the -calls. One way to express the DAG is to use the [After](#AfterClause) clause of -`EXPECT_CALL`. +calls. One way to express the DAG is to use the +[After](cheat_sheet.md#AfterClause) clause of `EXPECT_CALL`. Another way is via the `InSequence()` clause (not the same as the `InSequence` class), which we borrowed from jMock 2. It's less flexible than `After()`, but diff --git a/googlemock/include/gmock/gmock-matchers.h b/googlemock/include/gmock/gmock-matchers.h index fe88a7c7..b048fa90 100644 --- a/googlemock/include/gmock/gmock-matchers.h +++ b/googlemock/include/gmock/gmock-matchers.h @@ -4784,7 +4784,7 @@ inline InnerMatcher AllArgs(const InnerMatcher& matcher) { return matcher; } // and is printable using 'PrintToString'. It is compatible with // std::optional/std::experimental::optional. // Note that to compare an optional type variable against nullopt you should -// use Eq(nullopt) and not Optional(Eq(nullopt)). The latter implies that the +// use Eq(nullopt) and not Eq(Optional(nullopt)). The latter implies that the // optional value contains an optional itself. template <typename ValueMatcher> inline internal::OptionalMatcher<ValueMatcher> Optional( diff --git a/googletest/cmake/gtest_main.pc.in b/googletest/cmake/gtest_main.pc.in index 1e01bd19..38c88c54 100644 --- a/googletest/cmake/gtest_main.pc.in +++ b/googletest/cmake/gtest_main.pc.in @@ -5,6 +5,6 @@ Name: gtest_main Description: GoogleTest (with main() function) Version: @PROJECT_VERSION@ URL: https://github.com/google/googletest -Requires: gtest +Requires: gtest = @PROJECT_VERSION@ Libs: -L${libdir} -lgtest_main @CMAKE_THREAD_LIBS_INIT@ Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ diff --git a/googletest/docs/advanced.md b/googletest/docs/advanced.md index 1295c9dd..b782e99f 100644 --- a/googletest/docs/advanced.md +++ b/googletest/docs/advanced.md @@ -401,7 +401,7 @@ alone with them. For a list of matchers gMock provides, read your [own matchers](../../googlemock/docs/cook_book.md#NewMatchers) too. gMock is bundled with googletest, so you don't need to add any build dependency -in order to take advantage of this. Just include `"testing/base/public/gmock.h"` +in order to take advantage of this. Just include `"gmock/gmock.h"` and you're ready to go. ### More String Assertions @@ -2562,6 +2562,18 @@ IMPORTANT: The exact format of the JSON document is subject to change. ### Controlling How Failures Are Reported +#### Detecting Test Premature Exit + +Google Test implements the _premature-exit-file_ protocol for test runners +to catch any kind of unexpected exits of test programs. Upon start, +Google Test creates the file which will be automatically deleted after +all work has been finished. Then, the test runner can check if this file +exists. In case the file remains undeleted, the inspected test has exited +prematurely. + +This feature is enabled only if the `TEST_PREMATURE_EXIT_FILE` environment +variable has been set. + #### Turning Assertion Failures into Break-Points When running test programs under a debugger, it's very convenient if the diff --git a/googletest/include/gtest/gtest-death-test.h b/googletest/include/gtest/gtest-death-test.h index dc878ffb..2bd41cf3 100644 --- a/googletest/include/gtest/gtest-death-test.h +++ b/googletest/include/gtest/gtest-death-test.h @@ -190,11 +190,10 @@ GTEST_API_ bool InDeathTestChild(); class GTEST_API_ ExitedWithCode { public: explicit ExitedWithCode(int exit_code); + ExitedWithCode(const ExitedWithCode&) = default; + void operator=(const ExitedWithCode& other) = delete; bool operator()(int exit_status) const; private: - // No implementation - assignment is unsupported. - void operator=(const ExitedWithCode& other); - const int exit_code_; }; diff --git a/googletest/include/gtest/internal/gtest-internal.h b/googletest/include/gtest/internal/gtest-internal.h index 6bad8780..7f1a5b00 100644 --- a/googletest/include/gtest/internal/gtest-internal.h +++ b/googletest/include/gtest/internal/gtest-internal.h @@ -90,7 +90,9 @@ #define GTEST_STRINGIFY_HELPER_(name, ...) #name #define GTEST_STRINGIFY_(...) GTEST_STRINGIFY_HELPER_(__VA_ARGS__, ) -namespace proto2 { class Message; } +namespace proto2 { +class MessageLite; +} namespace testing { @@ -879,10 +881,10 @@ class GTEST_API_ Random { typename std::remove_const<typename std::remove_reference<T>::type>::type // IsAProtocolMessage<T>::value is a compile-time bool constant that's -// true if and only if T is type proto2::Message or a subclass of it. +// true if and only if T is type proto2::MessageLite or a subclass of it. template <typename T> struct IsAProtocolMessage - : public std::is_convertible<const T*, const ::proto2::Message*> {}; + : public std::is_convertible<const T*, const ::proto2::MessageLite*> {}; // When the compiler sees expression IsContainerTest<C>(0), if C is an // STL-style container class, the first overload of IsContainerTest diff --git a/googletest/src/gtest-port.cc b/googletest/src/gtest-port.cc index a05c50a3..c1802337 100644 --- a/googletest/src/gtest-port.cc +++ b/googletest/src/gtest-port.cc @@ -208,7 +208,7 @@ size_t GetThreadCount() { // exclude empty members int nthreads = 0; - for (int i = 0; i < size / mib[4]; i++) { + for (size_t i = 0; i < size / mib[4]; i++) { if (info[i].p_tid != -1) nthreads++; } diff --git a/googletest/src/gtest.cc b/googletest/src/gtest.cc index 4c8b42f9..53246746 100644 --- a/googletest/src/gtest.cc +++ b/googletest/src/gtest.cc @@ -4091,7 +4091,7 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream, part.line_number()); const std::string summary = location + "\n" + part.summary(); *stream << " <failure message=\"" - << EscapeXmlAttribute(summary.c_str()) + << EscapeXmlAttribute(summary) << "\" type=\"\">"; const std::string detail = location + "\n" + part.message(); OutputXmlCDataSection(stream, RemoveInvalidXmlCharacters(detail).c_str()); diff --git a/googletest/test/googletest-death-test-test.cc b/googletest/test/googletest-death-test-test.cc index cba906cc..b0dda27f 100644 --- a/googletest/test/googletest-death-test-test.cc +++ b/googletest/test/googletest-death-test-test.cc @@ -391,17 +391,19 @@ void SigprofAction(int, siginfo_t*, void*) { /* no op */ } // Sets SIGPROF action and ITIMER_PROF timer (interval: 1ms). void SetSigprofActionAndTimer() { - struct itimerval timer; - timer.it_interval.tv_sec = 0; - timer.it_interval.tv_usec = 1; - timer.it_value = timer.it_interval; - ASSERT_EQ(0, setitimer(ITIMER_PROF, &timer, nullptr)); struct sigaction signal_action; memset(&signal_action, 0, sizeof(signal_action)); sigemptyset(&signal_action.sa_mask); signal_action.sa_sigaction = SigprofAction; signal_action.sa_flags = SA_RESTART | SA_SIGINFO; ASSERT_EQ(0, sigaction(SIGPROF, &signal_action, nullptr)); + // timer comes second, to avoid SIGPROF premature delivery, as suggested at + // https://www.gnu.org/software/libc/manual/html_node/Setting-an-Alarm.html + struct itimerval timer; + timer.it_interval.tv_sec = 0; + timer.it_interval.tv_usec = 1; + timer.it_value = timer.it_interval; + ASSERT_EQ(0, setitimer(ITIMER_PROF, &timer, nullptr)); } // Disables ITIMER_PROF timer and ignores SIGPROF signal. diff --git a/googletest/test/googletest-death-test_ex_test.cc b/googletest/test/googletest-death-test_ex_test.cc index 7ea5b946..7219680d 100644 --- a/googletest/test/googletest-death-test_ex_test.cc +++ b/googletest/test/googletest-death-test_ex_test.cc @@ -59,7 +59,7 @@ TEST(CxxExceptionDeathTest, ExceptionIsFailure) { class TestException : public std::exception { public: - const char* what() const throw() override { return "exceptional message"; } + const char* what() const noexcept override { return "exceptional message"; } }; TEST(CxxExceptionDeathTest, PrintsMessageForStdExceptions) { diff --git a/googletest/test/googletest-param-test-test.cc b/googletest/test/googletest-param-test-test.cc index 6ba89654..0ab0d6f3 100644 --- a/googletest/test/googletest-param-test-test.cc +++ b/googletest/test/googletest-param-test-test.cc @@ -490,16 +490,16 @@ TEST(CombineTest, CombineWithMaxNumberOfParameters) { class NonDefaultConstructAssignString { public: NonDefaultConstructAssignString(const std::string& s) : str_(s) {} + NonDefaultConstructAssignString(const NonDefaultConstructAssignString&) = + default; + + NonDefaultConstructAssignString() = delete; + void operator=(const NonDefaultConstructAssignString&) = delete; const std::string& str() const { return str_; } private: std::string str_; - - // Not default constructible - NonDefaultConstructAssignString(); - // Not assignable - void operator=(const NonDefaultConstructAssignString&); }; TEST(CombineTest, NonDefaultConstructAssign) { diff --git a/googletest/test/gtest-unittest-api_test.cc b/googletest/test/gtest-unittest-api_test.cc index 7d2d8cc9..25a8afb2 100644 --- a/googletest/test/gtest-unittest-api_test.cc +++ b/googletest/test/gtest-unittest-api_test.cc @@ -55,8 +55,8 @@ class UnitTestHelper { // name. The caller is responsible for deleting the array. static TestSuite const** GetSortedTestSuites() { UnitTest& unit_test = *UnitTest::GetInstance(); - auto const** const test_suites = - new const TestSuite*[unit_test.total_test_suite_count()]; + auto const** const test_suites = new const TestSuite*[static_cast<size_t>( + unit_test.total_test_suite_count())]; for (int i = 0; i < unit_test.total_test_suite_count(); ++i) test_suites[i] = unit_test.GetTestSuite(i); @@ -83,8 +83,8 @@ class UnitTestHelper { // sorted by the test name. The caller is responsible for deleting the // array. static TestInfo const** GetSortedTests(const TestSuite* test_suite) { - TestInfo const** const tests = - new const TestInfo*[test_suite->total_test_count()]; + TestInfo const** const tests = new const TestInfo*[static_cast<size_t>( + test_suite->total_test_count())]; for (int i = 0; i < test_suite->total_test_count(); ++i) tests[i] = test_suite->GetTestInfo(i); diff --git a/googletest/test/gtest_unittest.cc b/googletest/test/gtest_unittest.cc index f3b72169..005a2d40 100644 --- a/googletest/test/gtest_unittest.cc +++ b/googletest/test/gtest_unittest.cc @@ -7104,7 +7104,7 @@ class ConversionHelperDerived : public ConversionHelperBase {}; // Tests that IsAProtocolMessage<T>::value is a compile-time constant. TEST(IsAProtocolMessageTest, ValueIsCompileTimeConstant) { - GTEST_COMPILE_ASSERT_(IsAProtocolMessage<::proto2::Message>::value, + GTEST_COMPILE_ASSERT_(IsAProtocolMessage<::proto2::MessageLite>::value, const_true); GTEST_COMPILE_ASSERT_(!IsAProtocolMessage<int>::value, const_false); } @@ -7112,7 +7112,7 @@ TEST(IsAProtocolMessageTest, ValueIsCompileTimeConstant) { // Tests that IsAProtocolMessage<T>::value is true when T is // proto2::Message or a sub-class of it. TEST(IsAProtocolMessageTest, ValueIsTrueWhenTypeIsAProtocolMessage) { - EXPECT_TRUE(IsAProtocolMessage< ::proto2::Message>::value); + EXPECT_TRUE(IsAProtocolMessage<::proto2::MessageLite>::value); } // Tests that IsAProtocolMessage<T>::value is false when T is neither |