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  | 
