Fix gmock_output_test when using MSVC
std::pair is printed as "struct std::pair<int,bool>" when using MSVC vs "std::pair<int,bool>" with other compilers. Switch to "std::tuple", which is the same for all compilers. See https://learn.microsoft.com/en-us/cpp/standard-library/pair-structure https://learn.microsoft.com/en-us/cpp/standard-library/tuple-class PiperOrigin-RevId: 506340295 Change-Id: Ib4ce2f74d54888a4e4173f42da1b55cc5583f7d4
This commit is contained in:
		
				
					committed by
					
						
						Copybara-Service
					
				
			
			
				
	
			
			
			
						parent
						
							d9251171f5
						
					
				
				
					commit
					0a3b403fe0
				
			@@ -33,6 +33,7 @@
 | 
				
			|||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <string>
 | 
					#include <string>
 | 
				
			||||||
 | 
					#include <tuple>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "gmock/gmock.h"
 | 
					#include "gmock/gmock.h"
 | 
				
			||||||
#include "gtest/gtest.h"
 | 
					#include "gtest/gtest.h"
 | 
				
			||||||
@@ -254,12 +255,16 @@ TEST_F(GMockOutputTest, CatchesLeakedMocks) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MATCHER_P2(IsPair, first, second, "") {
 | 
					MATCHER_P2(IsPair, first, second, "") {
 | 
				
			||||||
  return Value(arg.first, first) && Value(arg.second, second);
 | 
					  return Value(std::get<0>(arg), first) && Value(std::get<1>(arg), second);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEST_F(GMockOutputTest, PrintsMatcher) {
 | 
					TEST_F(GMockOutputTest, PrintsMatcher) {
 | 
				
			||||||
  const testing::Matcher<int> m1 = Ge(48);
 | 
					  const testing::Matcher<int> m1 = Ge(48);
 | 
				
			||||||
  EXPECT_THAT((std::pair<int, bool>(42, true)), IsPair(m1, true));
 | 
					  // Explicitly using std::tuple instead of std::pair due to differences between
 | 
				
			||||||
 | 
					  // MSVC and other compilers. std::pair is printed as
 | 
				
			||||||
 | 
					  // "struct std::pair<int,bool>" when using MSVC vs "std::pair<int,bool>" with
 | 
				
			||||||
 | 
					  // other compilers.
 | 
				
			||||||
 | 
					  EXPECT_THAT((std::tuple<int, bool>(42, true)), IsPair(m1, true));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TestCatchesLeakedMocksInAdHocTests() {
 | 
					void TestCatchesLeakedMocksInAdHocTests() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -290,9 +290,9 @@ Stack trace:
 | 
				
			|||||||
[       OK ] GMockOutputTest.CatchesLeakedMocks
 | 
					[       OK ] GMockOutputTest.CatchesLeakedMocks
 | 
				
			||||||
[ RUN      ] GMockOutputTest.PrintsMatcher
 | 
					[ RUN      ] GMockOutputTest.PrintsMatcher
 | 
				
			||||||
FILE:#: Failure
 | 
					FILE:#: Failure
 | 
				
			||||||
Value of: (std::pair<int, bool>(42, true))
 | 
					Value of: (std::tuple<int, bool>(42, true))
 | 
				
			||||||
Expected: is pair (first: is >= 48, second: true)
 | 
					Expected: is pair (first: is >= 48, second: true)
 | 
				
			||||||
  Actual: (42, true) (of type std::pair<int, bool>)
 | 
					  Actual: (42, true)
 | 
				
			||||||
[  FAILED  ] GMockOutputTest.PrintsMatcher
 | 
					[  FAILED  ] GMockOutputTest.PrintsMatcher
 | 
				
			||||||
[  FAILED  ] GMockOutputTest.UnexpectedCall
 | 
					[  FAILED  ] GMockOutputTest.UnexpectedCall
 | 
				
			||||||
[  FAILED  ] GMockOutputTest.UnexpectedCallToVoidFunction
 | 
					[  FAILED  ] GMockOutputTest.UnexpectedCallToVoidFunction
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user