Merge branch 'master' into master
This commit is contained in:
		
						commit
						2d200a7b35
					
				| @ -38,6 +38,7 @@ install: | |||||||
| - ps: | | - ps: | | ||||||
|     Write-Output "Compiler: $env:compiler" |     Write-Output "Compiler: $env:compiler" | ||||||
|     Write-Output "Generator: $env:generator" |     Write-Output "Generator: $env:generator" | ||||||
|  |     Write-Output "Env:Configuation: $env:configuration" | ||||||
|     if (-not (Test-Path env:APPVEYOR_PULL_REQUEST_NUMBER)) { |     if (-not (Test-Path env:APPVEYOR_PULL_REQUEST_NUMBER)) { | ||||||
|       Write-Output "This is *NOT* a pull request build" |       Write-Output "This is *NOT* a pull request build" | ||||||
|     } else { |     } else { | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| AC_INIT([Google C++ Mocking and Testing Frameworks], | AC_INIT([Google C++ Mocking and Testing Frameworks], | ||||||
|         [1.8.0], |         [1.9.0], | ||||||
|         [googlemock@googlegroups.com], |         [googlemock@googlegroups.com], | ||||||
|         [googletest]) |         [googletest]) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -246,35 +246,6 @@ We list the most frequently used macros below.  For a complete list, | |||||||
| see file [${GTEST\_DIR}/include/gtest/internal/gtest-port.h]( | see file [${GTEST\_DIR}/include/gtest/internal/gtest-port.h]( | ||||||
| ../googletest/include/gtest/internal/gtest-port.h). | ../googletest/include/gtest/internal/gtest-port.h). | ||||||
| 
 | 
 | ||||||
| ### Choosing a TR1 Tuple Library ### |  | ||||||
| 
 |  | ||||||
| Google Mock uses the C++ Technical Report 1 (TR1) tuple library |  | ||||||
| heavily.  Unfortunately TR1 tuple is not yet widely available with all |  | ||||||
| compilers.  The good news is that Google Test 1.4.0+ implements a |  | ||||||
| subset of TR1 tuple that's enough for Google Mock's need.  Google Mock |  | ||||||
| will automatically use that implementation when the compiler doesn't |  | ||||||
| provide TR1 tuple. |  | ||||||
| 
 |  | ||||||
| Usually you don't need to care about which tuple library Google Test |  | ||||||
| and Google Mock use.  However, if your project already uses TR1 tuple, |  | ||||||
| you need to tell Google Test and Google Mock to use the same TR1 tuple |  | ||||||
| library the rest of your project uses, or the two tuple |  | ||||||
| implementations will clash.  To do that, add |  | ||||||
| 
 |  | ||||||
|     -DGTEST_USE_OWN_TR1_TUPLE=0 |  | ||||||
| 
 |  | ||||||
| to the compiler flags while compiling Google Test, Google Mock, and |  | ||||||
| your tests.  If you want to force Google Test and Google Mock to use |  | ||||||
| their own tuple library, just add |  | ||||||
| 
 |  | ||||||
|     -DGTEST_USE_OWN_TR1_TUPLE=1 |  | ||||||
| 
 |  | ||||||
| to the compiler flags instead. |  | ||||||
| 
 |  | ||||||
| If you want to use Boost's TR1 tuple library with Google Mock, please |  | ||||||
| refer to the Boost website (http://www.boost.org/) for how to obtain |  | ||||||
| it and set it up. |  | ||||||
| 
 |  | ||||||
| ### As a Shared Library (DLL) ### | ### As a Shared Library (DLL) ### | ||||||
| 
 | 
 | ||||||
| Google Mock is compact, so most users can build and link it as a static | Google Mock is compact, so most users can build and link it as a static | ||||||
|  | |||||||
| @ -1405,8 +1405,9 @@ AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { | |||||||
|      private:\ |      private:\ | ||||||
|       ::std::string FormatDescription(bool negation) const {\ |       ::std::string FormatDescription(bool negation) const {\ | ||||||
|         ::std::string gmock_description = (description);\ |         ::std::string gmock_description = (description);\ | ||||||
|         if (!gmock_description.empty())\ |         if (!gmock_description.empty()) {\ | ||||||
|           return gmock_description;\ |           return gmock_description;\ | ||||||
|  |         }\ | ||||||
|         return ::testing::internal::FormatMatcherDescription(\ |         return ::testing::internal::FormatMatcherDescription(\ | ||||||
|             negation, #name, \ |             negation, #name, \ | ||||||
|             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ |             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ | ||||||
| @ -1454,8 +1455,9 @@ AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { | |||||||
|      private:\ |      private:\ | ||||||
|       ::std::string FormatDescription(bool negation) const {\ |       ::std::string FormatDescription(bool negation) const {\ | ||||||
|         ::std::string gmock_description = (description);\ |         ::std::string gmock_description = (description);\ | ||||||
|         if (!gmock_description.empty())\ |         if (!gmock_description.empty()) {\ | ||||||
|           return gmock_description;\ |           return gmock_description;\ | ||||||
|  |         }\ | ||||||
|         return ::testing::internal::FormatMatcherDescription(\ |         return ::testing::internal::FormatMatcherDescription(\ | ||||||
|             negation, #name, \ |             negation, #name, \ | ||||||
|             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ |             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ | ||||||
| @ -1509,8 +1511,9 @@ AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { | |||||||
|      private:\ |      private:\ | ||||||
|       ::std::string FormatDescription(bool negation) const {\ |       ::std::string FormatDescription(bool negation) const {\ | ||||||
|         ::std::string gmock_description = (description);\ |         ::std::string gmock_description = (description);\ | ||||||
|         if (!gmock_description.empty())\ |         if (!gmock_description.empty()) {\ | ||||||
|           return gmock_description;\ |           return gmock_description;\ | ||||||
|  |         }\ | ||||||
|         return ::testing::internal::FormatMatcherDescription(\ |         return ::testing::internal::FormatMatcherDescription(\ | ||||||
|             negation, #name, \ |             negation, #name, \ | ||||||
|             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ |             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ | ||||||
| @ -1570,8 +1573,9 @@ AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { | |||||||
|      private:\ |      private:\ | ||||||
|       ::std::string FormatDescription(bool negation) const {\ |       ::std::string FormatDescription(bool negation) const {\ | ||||||
|         ::std::string gmock_description = (description);\ |         ::std::string gmock_description = (description);\ | ||||||
|         if (!gmock_description.empty())\ |         if (!gmock_description.empty()) {\ | ||||||
|           return gmock_description;\ |           return gmock_description;\ | ||||||
|  |         }\ | ||||||
|         return ::testing::internal::FormatMatcherDescription(\ |         return ::testing::internal::FormatMatcherDescription(\ | ||||||
|             negation, #name, \ |             negation, #name, \ | ||||||
|             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ |             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ | ||||||
| @ -1638,8 +1642,9 @@ AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { | |||||||
|      private:\ |      private:\ | ||||||
|       ::std::string FormatDescription(bool negation) const {\ |       ::std::string FormatDescription(bool negation) const {\ | ||||||
|         ::std::string gmock_description = (description);\ |         ::std::string gmock_description = (description);\ | ||||||
|         if (!gmock_description.empty())\ |         if (!gmock_description.empty()) {\ | ||||||
|           return gmock_description;\ |           return gmock_description;\ | ||||||
|  |         }\ | ||||||
|         return ::testing::internal::FormatMatcherDescription(\ |         return ::testing::internal::FormatMatcherDescription(\ | ||||||
|             negation, #name, \ |             negation, #name, \ | ||||||
|             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ |             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ | ||||||
| @ -1715,8 +1720,9 @@ AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { | |||||||
|      private:\ |      private:\ | ||||||
|       ::std::string FormatDescription(bool negation) const {\ |       ::std::string FormatDescription(bool negation) const {\ | ||||||
|         ::std::string gmock_description = (description);\ |         ::std::string gmock_description = (description);\ | ||||||
|         if (!gmock_description.empty())\ |         if (!gmock_description.empty()) {\ | ||||||
|           return gmock_description;\ |           return gmock_description;\ | ||||||
|  |         }\ | ||||||
|         return ::testing::internal::FormatMatcherDescription(\ |         return ::testing::internal::FormatMatcherDescription(\ | ||||||
|             negation, #name, \ |             negation, #name, \ | ||||||
|             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ |             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ | ||||||
| @ -1796,8 +1802,9 @@ AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { | |||||||
|      private:\ |      private:\ | ||||||
|       ::std::string FormatDescription(bool negation) const {\ |       ::std::string FormatDescription(bool negation) const {\ | ||||||
|         ::std::string gmock_description = (description);\ |         ::std::string gmock_description = (description);\ | ||||||
|         if (!gmock_description.empty())\ |         if (!gmock_description.empty()) {\ | ||||||
|           return gmock_description;\ |           return gmock_description;\ | ||||||
|  |         }\ | ||||||
|         return ::testing::internal::FormatMatcherDescription(\ |         return ::testing::internal::FormatMatcherDescription(\ | ||||||
|             negation, #name, \ |             negation, #name, \ | ||||||
|             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ |             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ | ||||||
| @ -1883,8 +1890,9 @@ AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { | |||||||
|      private:\ |      private:\ | ||||||
|       ::std::string FormatDescription(bool negation) const {\ |       ::std::string FormatDescription(bool negation) const {\ | ||||||
|         ::std::string gmock_description = (description);\ |         ::std::string gmock_description = (description);\ | ||||||
|         if (!gmock_description.empty())\ |         if (!gmock_description.empty()) {\ | ||||||
|           return gmock_description;\ |           return gmock_description;\ | ||||||
|  |         }\ | ||||||
|         return ::testing::internal::FormatMatcherDescription(\ |         return ::testing::internal::FormatMatcherDescription(\ | ||||||
|             negation, #name, \ |             negation, #name, \ | ||||||
|             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ |             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ | ||||||
| @ -1979,8 +1987,9 @@ AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { | |||||||
|      private:\ |      private:\ | ||||||
|       ::std::string FormatDescription(bool negation) const {\ |       ::std::string FormatDescription(bool negation) const {\ | ||||||
|         ::std::string gmock_description = (description);\ |         ::std::string gmock_description = (description);\ | ||||||
|         if (!gmock_description.empty())\ |         if (!gmock_description.empty()) {\ | ||||||
|           return gmock_description;\ |           return gmock_description;\ | ||||||
|  |         }\ | ||||||
|         return ::testing::internal::FormatMatcherDescription(\ |         return ::testing::internal::FormatMatcherDescription(\ | ||||||
|             negation, #name, \ |             negation, #name, \ | ||||||
|             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ |             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ | ||||||
| @ -2081,8 +2090,9 @@ AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { | |||||||
|      private:\ |      private:\ | ||||||
|       ::std::string FormatDescription(bool negation) const {\ |       ::std::string FormatDescription(bool negation) const {\ | ||||||
|         ::std::string gmock_description = (description);\ |         ::std::string gmock_description = (description);\ | ||||||
|         if (!gmock_description.empty())\ |         if (!gmock_description.empty()) {\ | ||||||
|           return gmock_description;\ |           return gmock_description;\ | ||||||
|  |         }\ | ||||||
|         return ::testing::internal::FormatMatcherDescription(\ |         return ::testing::internal::FormatMatcherDescription(\ | ||||||
|             negation, #name, \ |             negation, #name, \ | ||||||
|             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ |             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ | ||||||
| @ -2190,8 +2200,9 @@ AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { | |||||||
|      private:\ |      private:\ | ||||||
|       ::std::string FormatDescription(bool negation) const {\ |       ::std::string FormatDescription(bool negation) const {\ | ||||||
|         ::std::string gmock_description = (description);\ |         ::std::string gmock_description = (description);\ | ||||||
|         if (!gmock_description.empty())\ |         if (!gmock_description.empty()) {\ | ||||||
|           return gmock_description;\ |           return gmock_description;\ | ||||||
|  |         }\ | ||||||
|         return ::testing::internal::FormatMatcherDescription(\ |         return ::testing::internal::FormatMatcherDescription(\ | ||||||
|             negation, #name, \ |             negation, #name, \ | ||||||
|             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ |             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ | ||||||
|  | |||||||
| @ -647,8 +647,9 @@ $var param_field_decls2 = [[$for j | |||||||
|      private:\ |      private:\ | ||||||
|       ::std::string FormatDescription(bool negation) const {\ |       ::std::string FormatDescription(bool negation) const {\ | ||||||
|         ::std::string gmock_description = (description);\ |         ::std::string gmock_description = (description);\ | ||||||
|         if (!gmock_description.empty())\ |         if (!gmock_description.empty()) {\ | ||||||
|           return gmock_description;\ |           return gmock_description;\ | ||||||
|  |         }\ | ||||||
|         return ::testing::internal::FormatMatcherDescription(\ |         return ::testing::internal::FormatMatcherDescription(\ | ||||||
|             negation, #name, \ |             negation, #name, \ | ||||||
|             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ |             ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ | ||||||
|  | |||||||
| @ -1307,9 +1307,6 @@ class StrEqualityMatcher { | |||||||
| #if GTEST_HAS_ABSL | #if GTEST_HAS_ABSL | ||||||
|   bool MatchAndExplain(const absl::string_view& s, |   bool MatchAndExplain(const absl::string_view& s, | ||||||
|                        MatchResultListener* listener) const { |                        MatchResultListener* listener) const { | ||||||
|     if (s.data() == NULL) { |  | ||||||
|       return !expect_eq_; |  | ||||||
|     } |  | ||||||
|     // This should fail to compile if absl::string_view is used with wide
 |     // This should fail to compile if absl::string_view is used with wide
 | ||||||
|     // strings.
 |     // strings.
 | ||||||
|     const StringType& str = string(s); |     const StringType& str = string(s); | ||||||
| @ -1380,9 +1377,6 @@ class HasSubstrMatcher { | |||||||
| #if GTEST_HAS_ABSL | #if GTEST_HAS_ABSL | ||||||
|   bool MatchAndExplain(const absl::string_view& s, |   bool MatchAndExplain(const absl::string_view& s, | ||||||
|                        MatchResultListener* listener) const { |                        MatchResultListener* listener) const { | ||||||
|     if (s.data() == NULL) { |  | ||||||
|       return false; |  | ||||||
|     } |  | ||||||
|     // This should fail to compile if absl::string_view is used with wide
 |     // This should fail to compile if absl::string_view is used with wide
 | ||||||
|     // strings.
 |     // strings.
 | ||||||
|     const StringType& str = string(s); |     const StringType& str = string(s); | ||||||
| @ -1440,9 +1434,6 @@ class StartsWithMatcher { | |||||||
| #if GTEST_HAS_ABSL | #if GTEST_HAS_ABSL | ||||||
|   bool MatchAndExplain(const absl::string_view& s, |   bool MatchAndExplain(const absl::string_view& s, | ||||||
|                        MatchResultListener* listener) const { |                        MatchResultListener* listener) const { | ||||||
|     if (s.data() == NULL) { |  | ||||||
|       return false; |  | ||||||
|     } |  | ||||||
|     // This should fail to compile if absl::string_view is used with wide
 |     // This should fail to compile if absl::string_view is used with wide
 | ||||||
|     // strings.
 |     // strings.
 | ||||||
|     const StringType& str = string(s); |     const StringType& str = string(s); | ||||||
| @ -1499,9 +1490,6 @@ class EndsWithMatcher { | |||||||
| #if GTEST_HAS_ABSL | #if GTEST_HAS_ABSL | ||||||
|   bool MatchAndExplain(const absl::string_view& s, |   bool MatchAndExplain(const absl::string_view& s, | ||||||
|                        MatchResultListener* listener) const { |                        MatchResultListener* listener) const { | ||||||
|     if (s.data() == NULL) { |  | ||||||
|       return false; |  | ||||||
|     } |  | ||||||
|     // This should fail to compile if absl::string_view is used with wide
 |     // This should fail to compile if absl::string_view is used with wide
 | ||||||
|     // strings.
 |     // strings.
 | ||||||
|     const StringType& str = string(s); |     const StringType& str = string(s); | ||||||
| @ -1558,7 +1546,7 @@ class MatchesRegexMatcher { | |||||||
| #if GTEST_HAS_ABSL | #if GTEST_HAS_ABSL | ||||||
|   bool MatchAndExplain(const absl::string_view& s, |   bool MatchAndExplain(const absl::string_view& s, | ||||||
|                        MatchResultListener* listener) const { |                        MatchResultListener* listener) const { | ||||||
|     return s.data() && MatchAndExplain(string(s), listener); |     return MatchAndExplain(string(s), listener); | ||||||
|   } |   } | ||||||
| #endif  // GTEST_HAS_ABSL
 | #endif  // GTEST_HAS_ABSL
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1335,6 +1335,11 @@ TEST(StrEqTest, MatchesEqualString) { | |||||||
|   EXPECT_TRUE(m3.Matches(absl::string_view("Hello"))); |   EXPECT_TRUE(m3.Matches(absl::string_view("Hello"))); | ||||||
|   EXPECT_FALSE(m3.Matches(absl::string_view("hello"))); |   EXPECT_FALSE(m3.Matches(absl::string_view("hello"))); | ||||||
|   EXPECT_FALSE(m3.Matches(absl::string_view())); |   EXPECT_FALSE(m3.Matches(absl::string_view())); | ||||||
|  | 
 | ||||||
|  |   Matcher<const absl::string_view&> m_empty = StrEq(""); | ||||||
|  |   EXPECT_TRUE(m_empty.Matches(absl::string_view(""))); | ||||||
|  |   EXPECT_TRUE(m_empty.Matches(absl::string_view())); | ||||||
|  |   EXPECT_FALSE(m_empty.Matches(absl::string_view("hello"))); | ||||||
| #endif  // GTEST_HAS_ABSL
 | #endif  // GTEST_HAS_ABSL
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -1459,6 +1464,10 @@ TEST(HasSubstrTest, WorksForStringClasses) { | |||||||
|   const Matcher<const std::string&> m2 = HasSubstr("foo"); |   const Matcher<const std::string&> m2 = HasSubstr("foo"); | ||||||
|   EXPECT_TRUE(m2.Matches(std::string("I love food."))); |   EXPECT_TRUE(m2.Matches(std::string("I love food."))); | ||||||
|   EXPECT_FALSE(m2.Matches(std::string("tofo"))); |   EXPECT_FALSE(m2.Matches(std::string("tofo"))); | ||||||
|  | 
 | ||||||
|  |   const Matcher<std::string> m_empty = HasSubstr(""); | ||||||
|  |   EXPECT_TRUE(m_empty.Matches(std::string())); | ||||||
|  |   EXPECT_TRUE(m_empty.Matches(std::string("not empty"))); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Tests that HasSubstr() works for matching C-string-typed values.
 | // Tests that HasSubstr() works for matching C-string-typed values.
 | ||||||
| @ -1472,6 +1481,11 @@ TEST(HasSubstrTest, WorksForCStrings) { | |||||||
|   EXPECT_TRUE(m2.Matches("I love food.")); |   EXPECT_TRUE(m2.Matches("I love food.")); | ||||||
|   EXPECT_FALSE(m2.Matches("tofo")); |   EXPECT_FALSE(m2.Matches("tofo")); | ||||||
|   EXPECT_FALSE(m2.Matches(NULL)); |   EXPECT_FALSE(m2.Matches(NULL)); | ||||||
|  | 
 | ||||||
|  |   const Matcher<const char*> m_empty = HasSubstr(""); | ||||||
|  |   EXPECT_TRUE(m_empty.Matches("not empty")); | ||||||
|  |   EXPECT_TRUE(m_empty.Matches("")); | ||||||
|  |   EXPECT_FALSE(m_empty.Matches(NULL)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #if GTEST_HAS_ABSL | #if GTEST_HAS_ABSL | ||||||
| @ -1489,7 +1503,8 @@ TEST(HasSubstrTest, WorksForStringViewClasses) { | |||||||
| 
 | 
 | ||||||
|   const Matcher<const absl::string_view&> m3 = HasSubstr(""); |   const Matcher<const absl::string_view&> m3 = HasSubstr(""); | ||||||
|   EXPECT_TRUE(m3.Matches(absl::string_view("foo"))); |   EXPECT_TRUE(m3.Matches(absl::string_view("foo"))); | ||||||
|   EXPECT_FALSE(m3.Matches(absl::string_view())); |   EXPECT_TRUE(m3.Matches(absl::string_view(""))); | ||||||
|  |   EXPECT_TRUE(m3.Matches(absl::string_view())); | ||||||
| } | } | ||||||
| #endif  // GTEST_HAS_ABSL
 | #endif  // GTEST_HAS_ABSL
 | ||||||
| 
 | 
 | ||||||
| @ -1713,6 +1728,13 @@ TEST(StartsWithTest, MatchesStringWithGivenPrefix) { | |||||||
|   EXPECT_TRUE(m2.Matches("High")); |   EXPECT_TRUE(m2.Matches("High")); | ||||||
|   EXPECT_FALSE(m2.Matches("H")); |   EXPECT_FALSE(m2.Matches("H")); | ||||||
|   EXPECT_FALSE(m2.Matches(" Hi")); |   EXPECT_FALSE(m2.Matches(" Hi")); | ||||||
|  | 
 | ||||||
|  | #if GTEST_HAS_ABSL | ||||||
|  |   const Matcher<absl::string_view> m_empty = StartsWith(""); | ||||||
|  |   EXPECT_TRUE(m_empty.Matches(absl::string_view())); | ||||||
|  |   EXPECT_TRUE(m_empty.Matches(absl::string_view(""))); | ||||||
|  |   EXPECT_TRUE(m_empty.Matches(absl::string_view("not empty"))); | ||||||
|  | #endif  // GTEST_HAS_ABSL
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| TEST(StartsWithTest, CanDescribeSelf) { | TEST(StartsWithTest, CanDescribeSelf) { | ||||||
| @ -1748,9 +1770,8 @@ TEST(EndsWithTest, MatchesStringWithGivenSuffix) { | |||||||
|   const Matcher<const absl::string_view&> m4 = EndsWith(""); |   const Matcher<const absl::string_view&> m4 = EndsWith(""); | ||||||
|   EXPECT_TRUE(m4.Matches("Hi")); |   EXPECT_TRUE(m4.Matches("Hi")); | ||||||
|   EXPECT_TRUE(m4.Matches("")); |   EXPECT_TRUE(m4.Matches("")); | ||||||
|   // Default-constructed absl::string_view should not match anything, in order
 |   EXPECT_TRUE(m4.Matches(absl::string_view())); | ||||||
|   // to distinguish it from an empty string.
 |   EXPECT_TRUE(m4.Matches(absl::string_view(""))); | ||||||
|   EXPECT_FALSE(m4.Matches(absl::string_view())); |  | ||||||
| #endif  // GTEST_HAS_ABSL
 | #endif  // GTEST_HAS_ABSL
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -1777,11 +1798,10 @@ TEST(MatchesRegexTest, MatchesStringMatchingGivenRegex) { | |||||||
|   EXPECT_TRUE(m3.Matches(absl::string_view("az"))); |   EXPECT_TRUE(m3.Matches(absl::string_view("az"))); | ||||||
|   EXPECT_TRUE(m3.Matches(absl::string_view("abcz"))); |   EXPECT_TRUE(m3.Matches(absl::string_view("abcz"))); | ||||||
|   EXPECT_FALSE(m3.Matches(absl::string_view("1az"))); |   EXPECT_FALSE(m3.Matches(absl::string_view("1az"))); | ||||||
|   // Default-constructed absl::string_view should not match anything, in order
 |  | ||||||
|   // to distinguish it from an empty string.
 |  | ||||||
|   EXPECT_FALSE(m3.Matches(absl::string_view())); |   EXPECT_FALSE(m3.Matches(absl::string_view())); | ||||||
|   const Matcher<const absl::string_view&> m4 = MatchesRegex(""); |   const Matcher<const absl::string_view&> m4 = MatchesRegex(""); | ||||||
|   EXPECT_FALSE(m4.Matches(absl::string_view())); |   EXPECT_TRUE(m4.Matches(absl::string_view(""))); | ||||||
|  |   EXPECT_TRUE(m4.Matches(absl::string_view())); | ||||||
| #endif  // GTEST_HAS_ABSL
 | #endif  // GTEST_HAS_ABSL
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -1816,11 +1836,10 @@ TEST(ContainsRegexTest, MatchesStringContainingGivenRegex) { | |||||||
|   EXPECT_TRUE(m3.Matches(absl::string_view("azbz"))); |   EXPECT_TRUE(m3.Matches(absl::string_view("azbz"))); | ||||||
|   EXPECT_TRUE(m3.Matches(absl::string_view("az1"))); |   EXPECT_TRUE(m3.Matches(absl::string_view("az1"))); | ||||||
|   EXPECT_FALSE(m3.Matches(absl::string_view("1a"))); |   EXPECT_FALSE(m3.Matches(absl::string_view("1a"))); | ||||||
|   // Default-constructed absl::string_view should not match anything, in order
 |  | ||||||
|   // to distinguish it from an empty string.
 |  | ||||||
|   EXPECT_FALSE(m3.Matches(absl::string_view())); |   EXPECT_FALSE(m3.Matches(absl::string_view())); | ||||||
|   const Matcher<const absl::string_view&> m4 = ContainsRegex(""); |   const Matcher<const absl::string_view&> m4 = ContainsRegex(""); | ||||||
|   EXPECT_FALSE(m4.Matches(absl::string_view())); |   EXPECT_TRUE(m4.Matches(absl::string_view(""))); | ||||||
|  |   EXPECT_TRUE(m4.Matches(absl::string_view())); | ||||||
| #endif  // GTEST_HAS_ABSL
 | #endif  // GTEST_HAS_ABSL
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -245,33 +245,6 @@ them to either 1 or 0 to enable or disable a certain feature. | |||||||
| We list the most frequently used macros below. For a complete list, see file | We list the most frequently used macros below. For a complete list, see file | ||||||
| [include/gtest/internal/gtest-port.h](https://github.com/google/googletest/blob/master/include/gtest/internal/gtest-port.h). | [include/gtest/internal/gtest-port.h](https://github.com/google/googletest/blob/master/include/gtest/internal/gtest-port.h). | ||||||
| 
 | 
 | ||||||
| ### Choosing a TR1 Tuple Library |  | ||||||
| 
 |  | ||||||
| Some Google Test features require the C++ Technical Report 1 (TR1) tuple |  | ||||||
| library, which is not yet available with all compilers. The good news is that |  | ||||||
| Google Test implements a subset of TR1 tuple that's enough for its own need, and |  | ||||||
| will automatically use this when the compiler doesn't provide TR1 tuple. |  | ||||||
| 
 |  | ||||||
| Usually you don't need to care about which tuple library Google Test uses. |  | ||||||
| However, if your project already uses TR1 tuple, you need to tell Google Test to |  | ||||||
| use the same TR1 tuple library the rest of your project uses, or the two tuple |  | ||||||
| implementations will clash. To do that, add |  | ||||||
| 
 |  | ||||||
|     -DGTEST_USE_OWN_TR1_TUPLE=0 |  | ||||||
| 
 |  | ||||||
| to the compiler flags while compiling Google Test and your tests. If you want to |  | ||||||
| force Google Test to use its own tuple library, just add |  | ||||||
| 
 |  | ||||||
|     -DGTEST_USE_OWN_TR1_TUPLE=1 |  | ||||||
| 
 |  | ||||||
| to the compiler flags instead. |  | ||||||
| 
 |  | ||||||
| If you don't want Google Test to use tuple at all, add |  | ||||||
| 
 |  | ||||||
|     -DGTEST_HAS_TR1_TUPLE=0 |  | ||||||
| 
 |  | ||||||
| and all features using tuple will be disabled. |  | ||||||
| 
 |  | ||||||
| ### Multi-threaded Tests | ### Multi-threaded Tests | ||||||
| 
 | 
 | ||||||
| Google Test is thread-safe where the pthread library is available. After | Google Test is thread-safe where the pthread library is available. After | ||||||
|  | |||||||
| @ -2117,7 +2117,7 @@ class UnitTestRecordPropertyTestEnvironment : public Environment { | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // This will test property recording outside of any test or test case.
 | // This will test property recording outside of any test or test case.
 | ||||||
| static Environment* record_property_env = | static Environment* record_property_env GTEST_ATTRIBUTE_UNUSED_ = | ||||||
|     AddGlobalTestEnvironment(new UnitTestRecordPropertyTestEnvironment); |     AddGlobalTestEnvironment(new UnitTestRecordPropertyTestEnvironment); | ||||||
| 
 | 
 | ||||||
| // This group of tests is for predicate assertions (ASSERT_PRED*, etc)
 | // This group of tests is for predicate assertions (ASSERT_PRED*, etc)
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user