diff options
| -rw-r--r-- | README.md | 4 | ||||
| -rw-r--r-- | googlemock/include/gmock/gmock-actions.h | 3 | ||||
| -rw-r--r-- | googlemock/include/gmock/gmock-matchers.h | 85 | ||||
| -rw-r--r-- | googlemock/src/gmock_main.cc | 13 | ||||
| -rw-r--r-- | googlemock/test/gmock-matchers_test.cc | 13 | ||||
| -rw-r--r-- | googletest/docs/primer.md | 2 | ||||
| -rw-r--r-- | googletest/include/gtest/gtest-printers.h | 6 | ||||
| -rw-r--r-- | googletest/include/gtest/internal/gtest-port.h | 2 | ||||
| -rwxr-xr-x | googletest/scripts/gen_gtest_pred_impl.py | 5 | ||||
| -rw-r--r-- | googletest/src/gtest_main.cc | 11 | ||||
| -rwxr-xr-x | googletest/test/googletest-output-test.py | 2 | ||||
| -rw-r--r-- | googletest/test/gtest_pred_impl_unittest.cc | 27 | 
12 files changed, 75 insertions, 98 deletions
| @@ -102,6 +102,10 @@ runs tests from your binary in parallel to provide significant speed-up.  is a VS Code extension allowing to view Google Tests in a tree view, and  run/debug your tests. +[Catch2 and Google Test Explorer](https://github.com/matepek/vscode-catch2-test-adapter) +is a VS Code extension allowing to view Google Tests in a tree view, and +run/debug your tests. +  [Cornichon](https://pypi.org/project/cornichon/) is a small Gherkin DSL parser  that generates stub code for Google Test. diff --git a/googlemock/include/gmock/gmock-actions.h b/googlemock/include/gmock/gmock-actions.h index dcdbab5a..c08d97b9 100644 --- a/googlemock/include/gmock/gmock-actions.h +++ b/googlemock/include/gmock/gmock-actions.h @@ -916,7 +916,8 @@ struct WithArgsAction {    // We use the conversion operator to detect the signature of the inner Action.    template <typename R, typename... Args>    operator Action<R(Args...)>() const {  // NOLINT -    Action<R(typename std::tuple_element<I, std::tuple<Args...>>::type...)> +    using TupleType = std::tuple<Args...>; +    Action<R(typename std::tuple_element<I, TupleType>::type...)>          converted(action);      return [converted](Args... args) -> R { diff --git a/googlemock/include/gmock/gmock-matchers.h b/googlemock/include/gmock/gmock-matchers.h index e71570bc..99f1774a 100644 --- a/googlemock/include/gmock/gmock-matchers.h +++ b/googlemock/include/gmock/gmock-matchers.h @@ -247,56 +247,43 @@ inline Matcher<T> MatcherCast(const M& matcher) {    return internal::MatcherCastImpl<T, M>::Cast(matcher);  } -// Implements SafeMatcherCast(). -// -// FIXME: The intermediate SafeMatcherCastImpl class was introduced as a -// workaround for a compiler bug, and can now be removed. -template <typename T> -class SafeMatcherCastImpl { - public: -  // This overload handles polymorphic matchers and values only since -  // monomorphic matchers are handled by the next one. -  template <typename M> -  static inline Matcher<T> Cast(const M& polymorphic_matcher_or_value) { -    return internal::MatcherCastImpl<T, M>::Cast(polymorphic_matcher_or_value); -  } - -  // This overload handles monomorphic matchers. -  // -  // In general, if type T can be implicitly converted to type U, we can -  // safely convert a Matcher<U> to a Matcher<T> (i.e. Matcher is -  // contravariant): just keep a copy of the original Matcher<U>, convert the -  // argument from type T to U, and then pass it to the underlying Matcher<U>. -  // The only exception is when U is a reference and T is not, as the -  // underlying Matcher<U> may be interested in the argument's address, which -  // is not preserved in the conversion from T to U. -  template <typename U> -  static inline Matcher<T> Cast(const Matcher<U>& matcher) { -    // Enforce that T can be implicitly converted to U. -    GTEST_COMPILE_ASSERT_((std::is_convertible<T, U>::value), -                          "T must be implicitly convertible to U"); -    // Enforce that we are not converting a non-reference type T to a reference -    // type U. -    GTEST_COMPILE_ASSERT_( -        std::is_reference<T>::value || !std::is_reference<U>::value, -        cannot_convert_non_reference_arg_to_reference); -    // In case both T and U are arithmetic types, enforce that the -    // conversion is not lossy. -    typedef GTEST_REMOVE_REFERENCE_AND_CONST_(T) RawT; -    typedef GTEST_REMOVE_REFERENCE_AND_CONST_(U) RawU; -    const bool kTIsOther = GMOCK_KIND_OF_(RawT) == internal::kOther; -    const bool kUIsOther = GMOCK_KIND_OF_(RawU) == internal::kOther; -    GTEST_COMPILE_ASSERT_( -        kTIsOther || kUIsOther || -        (internal::LosslessArithmeticConvertible<RawT, RawU>::value), -        conversion_of_arithmetic_types_must_be_lossless); -    return MatcherCast<T>(matcher); -  } -}; - +// This overload handles polymorphic matchers and values only since +// monomorphic matchers are handled by the next one.  template <typename T, typename M> -inline Matcher<T> SafeMatcherCast(const M& polymorphic_matcher) { -  return SafeMatcherCastImpl<T>::Cast(polymorphic_matcher); +inline Matcher<T> SafeMatcherCast(const M& polymorphic_matcher_or_value) { +  return MatcherCast<T>(polymorphic_matcher_or_value); +} + +// This overload handles monomorphic matchers. +// +// In general, if type T can be implicitly converted to type U, we can +// safely convert a Matcher<U> to a Matcher<T> (i.e. Matcher is +// contravariant): just keep a copy of the original Matcher<U>, convert the +// argument from type T to U, and then pass it to the underlying Matcher<U>. +// The only exception is when U is a reference and T is not, as the +// underlying Matcher<U> may be interested in the argument's address, which +// is not preserved in the conversion from T to U. +template <typename T, typename U> +inline Matcher<T> SafeMatcherCast(const Matcher<U>& matcher) { +  // Enforce that T can be implicitly converted to U. +  GTEST_COMPILE_ASSERT_((std::is_convertible<T, U>::value), +                        "T must be implicitly convertible to U"); +  // Enforce that we are not converting a non-reference type T to a reference +  // type U. +  GTEST_COMPILE_ASSERT_( +      std::is_reference<T>::value || !std::is_reference<U>::value, +      cannot_convert_non_reference_arg_to_reference); +  // In case both T and U are arithmetic types, enforce that the +  // conversion is not lossy. +  typedef GTEST_REMOVE_REFERENCE_AND_CONST_(T) RawT; +  typedef GTEST_REMOVE_REFERENCE_AND_CONST_(U) RawU; +  constexpr bool kTIsOther = GMOCK_KIND_OF_(RawT) == internal::kOther; +  constexpr bool kUIsOther = GMOCK_KIND_OF_(RawU) == internal::kOther; +  GTEST_COMPILE_ASSERT_( +      kTIsOther || kUIsOther || +      (internal::LosslessArithmeticConvertible<RawT, RawU>::value), +      conversion_of_arithmetic_types_must_be_lossless); +  return MatcherCast<T>(matcher);  }  // A<T>() returns a matcher that matches any value of type T. diff --git a/googlemock/src/gmock_main.cc b/googlemock/src/gmock_main.cc index 18c500f6..d9e71700 100644 --- a/googlemock/src/gmock_main.cc +++ b/googlemock/src/gmock_main.cc @@ -48,21 +48,14 @@ void loop() { RUN_ALL_TESTS(); }  #endif  #else - -// MS C++ compiler/linker has a bug on Windows (not on Windows CE), which -// causes a link error when _tmain is defined in a static library and UNICODE -// is enabled. For this reason instead of _tmain, main function is used on -// Windows. See the following link to track the current status of this bug: -// https://web.archive.org/web/20170912203238/connect.microsoft.com/VisualStudio/feedback/details/394464/wmain-link-error-in-the-static-library -// // NOLINT -#if GTEST_OS_WINDOWS_MOBILE +#if __MSC_VER  # include <tchar.h>  // NOLINT  GTEST_API_ int _tmain(int argc, TCHAR** argv) {  #else  GTEST_API_ int main(int argc, char** argv) { -#endif  // GTEST_OS_WINDOWS_MOBILE -  std::cout << "Running main() from gmock_main.cc\n"; +#endif  // __MSC_VER +  std::cout << "Running main() from " << __FILE__ << '\n';    // Since Google Mock depends on Google Test, InitGoogleMock() is    // also responsible for initializing Google Test.  Therefore there's    // no need for calling testing::InitGoogleTest() separately. diff --git a/googlemock/test/gmock-matchers_test.cc b/googlemock/test/gmock-matchers_test.cc index c2c3abd9..e6e8c8f4 100644 --- a/googlemock/test/gmock-matchers_test.cc +++ b/googlemock/test/gmock-matchers_test.cc @@ -2988,18 +2988,13 @@ TEST(MatcherAssertionTest, WorksWhenMatcherIsNotSatisfied) {    static unsigned short n;  // NOLINT    n = 5; -  // VC++ prior to version 8.0 SP1 has a bug where it will not see any -  // functions declared in the namespace scope from within nested classes. -  // EXPECT/ASSERT_(NON)FATAL_FAILURE macros use nested classes so that all -  // namespace-level functions invoked inside them need to be explicitly -  // resolved. -  EXPECT_FATAL_FAILURE(ASSERT_THAT(n, ::testing::Gt(10)), +  EXPECT_FATAL_FAILURE(ASSERT_THAT(n, Gt(10)),                         "Value of: n\n"                         "Expected: is > 10\n"                         "  Actual: 5" + OfType("unsigned short"));    n = 0;    EXPECT_NONFATAL_FAILURE( -      EXPECT_THAT(n, ::testing::AllOf(::testing::Le(7), ::testing::Ge(5))), +      EXPECT_THAT(n, AllOf(Le(7), Ge(5))),        "Value of: n\n"        "Expected: (is <= 7) and (is >= 5)\n"        "  Actual: 0" + OfType("unsigned short")); @@ -3013,11 +3008,11 @@ TEST(MatcherAssertionTest, WorksForByRefArguments) {    static int n;    n = 0;    EXPECT_THAT(n, AllOf(Le(7), Ref(n))); -  EXPECT_FATAL_FAILURE(ASSERT_THAT(n, ::testing::Not(::testing::Ref(n))), +  EXPECT_FATAL_FAILURE(ASSERT_THAT(n, Not(Ref(n))),                         "Value of: n\n"                         "Expected: does not reference the variable @");    // Tests the "Actual" part. -  EXPECT_FATAL_FAILURE(ASSERT_THAT(n, ::testing::Not(::testing::Ref(n))), +  EXPECT_FATAL_FAILURE(ASSERT_THAT(n, Not(Ref(n))),                         "Actual: 0" + OfType("int") + ", which is located @");  } diff --git a/googletest/docs/primer.md b/googletest/docs/primer.md index 63f05168..f581d77a 100644 --- a/googletest/docs/primer.md +++ b/googletest/docs/primer.md @@ -261,7 +261,7 @@ TEST(TestSuiteName, TestName) {  `TEST()` arguments go from general to specific. The *first* argument is the name  of the test suite, and the *second* argument is the test's name within the test -case. Both names must be valid C++ identifiers, and they should not contain +suite. Both names must be valid C++ identifiers, and they should not contain  any underscores (`_`). A test's *full name* consists of its containing test suite and  its individual name. Tests from different test suites can have the same  individual name. diff --git a/googletest/include/gtest/gtest-printers.h b/googletest/include/gtest/gtest-printers.h index 56a05450..c443625f 100644 --- a/googletest/include/gtest/gtest-printers.h +++ b/googletest/include/gtest/gtest-printers.h @@ -266,10 +266,8 @@ void DefaultPrintNonContainerTo(const T& value, ::std::ostream* os) {    // 7.3.4-1 [namespace.udir].  This allows us to fall back onto    // testing::internal2::operator<< in case T doesn't come with a <<    // operator. -  // -  // We cannot write 'using ::testing::internal2::operator<<;', which -  // gcc 3.3 fails to compile due to a compiler bug. -  using namespace ::testing::internal2;  // NOLINT + +  using ::testing::internal2::operator<<;    // Assuming T is defined in namespace foo, in the next statement,    // the compiler will consider all of: diff --git a/googletest/include/gtest/internal/gtest-port.h b/googletest/include/gtest/internal/gtest-port.h index 1812908f..fcaac0bb 100644 --- a/googletest/include/gtest/internal/gtest-port.h +++ b/googletest/include/gtest/internal/gtest-port.h @@ -2088,7 +2088,7 @@ GTEST_DISABLE_MSC_DEPRECATED_POP_()  using BiggestInt = long long;  // NOLINT  // The maximum number a BiggestInt can represent. -constexpr BiggestInt kMaxBiggestInt = std::numeric_limits<BiggestInt>::max(); +constexpr BiggestInt kMaxBiggestInt = (std::numeric_limits<BiggestInt>::max)();  // This template class serves as a compile-time function from size to  // type.  It maps a size in bytes to a primitive type with that diff --git a/googletest/scripts/gen_gtest_pred_impl.py b/googletest/scripts/gen_gtest_pred_impl.py index e76fcb0b..e09a6e01 100755 --- a/googletest/scripts/gen_gtest_pred_impl.py +++ b/googletest/scripts/gen_gtest_pred_impl.py @@ -439,9 +439,8 @@ bool PredFunction%(n)s(%(tvs)s) {    return %(v_sum)s > 0;  } -// The following two functions are needed to circumvent a bug in -// gcc 2.95.3, which sometimes has problem with the above template -// function. +// The following two functions are needed because a compiler doesn't have +// a context yet to know which template function must be instantiated.  bool PredFunction%(n)sInt(%(int_vs)s) {    return %(v_sum)s > 0;  } diff --git a/googletest/src/gtest_main.cc b/googletest/src/gtest_main.cc index 46b27c3d..63b2cfd1 100644 --- a/googletest/src/gtest_main.cc +++ b/googletest/src/gtest_main.cc @@ -27,7 +27,7 @@  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#include <cstdio> +#include <iostream>  #include "gtest/gtest.h"  #if GTEST_OS_ESP8266 || GTEST_OS_ESP32 @@ -45,9 +45,14 @@ void loop() { RUN_ALL_TESTS(); }  #endif  #else +#if __MSC_VER +# include <tchar.h>  // NOLINT -GTEST_API_ int main(int argc, char **argv) { -  printf("Running main() from %s\n", __FILE__); +GTEST_API_ int _tmain(int argc, TCHAR** argv) { +#else +GTEST_API_ int main(int argc, char** argv) { +#endif  // __MSC_VER +  std::cout << "Running main() from " << __FILE__ << '\n';    testing::InitGoogleTest(&argc, argv);    return RUN_ALL_TESTS();  } diff --git a/googletest/test/googletest-output-test.py b/googletest/test/googletest-output-test.py index c727f17a..093f6f95 100755 --- a/googletest/test/googletest-output-test.py +++ b/googletest/test/googletest-output-test.py @@ -331,7 +331,7 @@ if __name__ == '__main__':      if CAN_GENERATE_GOLDEN_FILE:        output = GetOutputOfAllCommands()        golden_file = open(GOLDEN_PATH, 'wb') -      golden_file.write(output) +      golden_file.write(output.encode())        golden_file.close()      else:        message = ( diff --git a/googletest/test/gtest_pred_impl_unittest.cc b/googletest/test/gtest_pred_impl_unittest.cc index 1afe5e2d..bbef9947 100644 --- a/googletest/test/gtest_pred_impl_unittest.cc +++ b/googletest/test/gtest_pred_impl_unittest.cc @@ -27,7 +27,7 @@  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// This file is AUTOMATICALLY GENERATED on 01/02/2019 by command +// This file is AUTOMATICALLY GENERATED on 11/05/2019 by command  // 'gen_gtest_pred_impl.py 5'.  DO NOT EDIT BY HAND!  // Regression test for gtest_pred_impl.h @@ -78,9 +78,8 @@ bool PredFunction1(T1 v1) {    return v1 > 0;  } -// The following two functions are needed to circumvent a bug in -// gcc 2.95.3, which sometimes has problem with the above template -// function. +// The following two functions are needed because a compiler doesn't have +// a context yet to know which template function must be instantiated.  bool PredFunction1Int(int v1) {    return v1 > 0;  } @@ -465,9 +464,8 @@ bool PredFunction2(T1 v1, T2 v2) {    return v1 + v2 > 0;  } -// The following two functions are needed to circumvent a bug in -// gcc 2.95.3, which sometimes has problem with the above template -// function. +// The following two functions are needed because a compiler doesn't have +// a context yet to know which template function must be instantiated.  bool PredFunction2Int(int v1, int v2) {    return v1 + v2 > 0;  } @@ -894,9 +892,8 @@ bool PredFunction3(T1 v1, T2 v2, T3 v3) {    return v1 + v2 + v3 > 0;  } -// The following two functions are needed to circumvent a bug in -// gcc 2.95.3, which sometimes has problem with the above template -// function. +// The following two functions are needed because a compiler doesn't have +// a context yet to know which template function must be instantiated.  bool PredFunction3Int(int v1, int v2, int v3) {    return v1 + v2 + v3 > 0;  } @@ -1365,9 +1362,8 @@ bool PredFunction4(T1 v1, T2 v2, T3 v3, T4 v4) {    return v1 + v2 + v3 + v4 > 0;  } -// The following two functions are needed to circumvent a bug in -// gcc 2.95.3, which sometimes has problem with the above template -// function. +// The following two functions are needed because a compiler doesn't have +// a context yet to know which template function must be instantiated.  bool PredFunction4Int(int v1, int v2, int v3, int v4) {    return v1 + v2 + v3 + v4 > 0;  } @@ -1878,9 +1874,8 @@ bool PredFunction5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) {    return v1 + v2 + v3 + v4 + v5 > 0;  } -// The following two functions are needed to circumvent a bug in -// gcc 2.95.3, which sometimes has problem with the above template -// function. +// The following two functions are needed because a compiler doesn't have +// a context yet to know which template function must be instantiated.  bool PredFunction5Int(int v1, int v2, int v3, int v4, int v5) {    return v1 + v2 + v3 + v4 + v5 > 0;  } | 
