Merge pull request #1662 from derekmauro/variant
Adds the UniversalPrinter for absl::variant.
This commit is contained in:
		
							
								
								
									
										36
									
								
								BUILD.bazel
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								BUILD.bazel
									
									
									
									
									
								
							@@ -38,7 +38,7 @@ licenses(["notice"])
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
config_setting(
 | 
					config_setting(
 | 
				
			||||||
    name = "windows",
 | 
					    name = "windows",
 | 
				
			||||||
    values = { "cpu": "x64_windows" },
 | 
					    values = {"cpu": "x64_windows"},
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config_setting(
 | 
					config_setting(
 | 
				
			||||||
@@ -51,7 +51,6 @@ config_setting(
 | 
				
			|||||||
    values = {"define": "absl=1"},
 | 
					    values = {"define": "absl=1"},
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
# Google Test including Google Mock
 | 
					# Google Test including Google Mock
 | 
				
			||||||
cc_library(
 | 
					cc_library(
 | 
				
			||||||
    name = "gtest",
 | 
					    name = "gtest",
 | 
				
			||||||
@@ -70,7 +69,7 @@ cc_library(
 | 
				
			|||||||
            "googlemock/src/gmock_main.cc",
 | 
					            "googlemock/src/gmock_main.cc",
 | 
				
			||||||
        ],
 | 
					        ],
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    hdrs =glob([
 | 
					    hdrs = glob([
 | 
				
			||||||
        "googletest/include/gtest/*.h",
 | 
					        "googletest/include/gtest/*.h",
 | 
				
			||||||
        "googlemock/include/gmock/*.h",
 | 
					        "googlemock/include/gmock/*.h",
 | 
				
			||||||
    ]),
 | 
					    ]),
 | 
				
			||||||
@@ -81,6 +80,14 @@ cc_library(
 | 
				
			|||||||
            "//conditions:default": ["-pthread"],
 | 
					            "//conditions:default": ["-pthread"],
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
 | 
					    defines = select(
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ":has_absl": [
 | 
				
			||||||
 | 
					                "GTEST_HAS_ABSL=1",
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "//conditions:default": [],
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
    includes = [
 | 
					    includes = [
 | 
				
			||||||
        "googlemock",
 | 
					        "googlemock",
 | 
				
			||||||
        "googlemock/include",
 | 
					        "googlemock/include",
 | 
				
			||||||
@@ -94,21 +101,16 @@ cc_library(
 | 
				
			|||||||
            "-pthread",
 | 
					            "-pthread",
 | 
				
			||||||
        ],
 | 
					        ],
 | 
				
			||||||
    }),
 | 
					    }),
 | 
				
			||||||
    defines = select ({
 | 
					    deps = select(
 | 
				
			||||||
        ":has_absl": [
 | 
					        {
 | 
				
			||||||
        "GTEST_HAS_ABSL=1",
 | 
					            ":has_absl": [
 | 
				
			||||||
        ],
 | 
					                "@com_google_absl//absl/types:optional",
 | 
				
			||||||
        "//conditions:default": [],
 | 
					                "@com_google_absl//absl/types:variant",
 | 
				
			||||||
    }
 | 
					                "@com_google_absl//absl/strings",
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "//conditions:default": [],
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    deps = select ({
 | 
					 | 
				
			||||||
        ":has_absl": [
 | 
					 | 
				
			||||||
        "@com_google_absl//absl/types:optional",
 | 
					 | 
				
			||||||
        "@com_google_absl//absl/strings"
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
        "//conditions:default": [],
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cc_library(
 | 
					cc_library(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -114,6 +114,7 @@
 | 
				
			|||||||
#if GTEST_HAS_ABSL
 | 
					#if GTEST_HAS_ABSL
 | 
				
			||||||
#include "absl/strings/string_view.h"
 | 
					#include "absl/strings/string_view.h"
 | 
				
			||||||
#include "absl/types/optional.h"
 | 
					#include "absl/types/optional.h"
 | 
				
			||||||
 | 
					#include "absl/types/variant.h"
 | 
				
			||||||
#endif  // GTEST_HAS_ABSL
 | 
					#endif  // GTEST_HAS_ABSL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace testing {
 | 
					namespace testing {
 | 
				
			||||||
@@ -787,6 +788,28 @@ class UniversalPrinter<::absl::optional<T>> {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Printer for absl::variant
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template <typename... T>
 | 
				
			||||||
 | 
					class UniversalPrinter<::absl::variant<T...>> {
 | 
				
			||||||
 | 
					 public:
 | 
				
			||||||
 | 
					  static void Print(const ::absl::variant<T...>& value, ::std::ostream* os) {
 | 
				
			||||||
 | 
					    *os << '(';
 | 
				
			||||||
 | 
					    absl::visit(Visitor{os}, value);
 | 
				
			||||||
 | 
					    *os << ')';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 private:
 | 
				
			||||||
 | 
					  struct Visitor {
 | 
				
			||||||
 | 
					    template <typename U>
 | 
				
			||||||
 | 
					    void operator()(const U& u) const {
 | 
				
			||||||
 | 
					      *os << "'" << GetTypeName<U>() << "' with value ";
 | 
				
			||||||
 | 
					      UniversalPrint(u, os);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    ::std::ostream* os;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif  // GTEST_HAS_ABSL
 | 
					#endif  // GTEST_HAS_ABSL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// UniversalPrintArray(begin, len, os) prints an array of 'len'
 | 
					// UniversalPrintArray(begin, len, os) prints an array of 'len'
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user