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(
 | 
			
		||||
    name = "windows",
 | 
			
		||||
    values = { "cpu": "x64_windows" },
 | 
			
		||||
    values = {"cpu": "x64_windows"},
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
config_setting(
 | 
			
		||||
@@ -51,7 +51,6 @@ config_setting(
 | 
			
		||||
    values = {"define": "absl=1"},
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Google Test including Google Mock
 | 
			
		||||
cc_library(
 | 
			
		||||
    name = "gtest",
 | 
			
		||||
@@ -70,7 +69,7 @@ cc_library(
 | 
			
		||||
            "googlemock/src/gmock_main.cc",
 | 
			
		||||
        ],
 | 
			
		||||
    ),
 | 
			
		||||
    hdrs =glob([
 | 
			
		||||
    hdrs = glob([
 | 
			
		||||
        "googletest/include/gtest/*.h",
 | 
			
		||||
        "googlemock/include/gmock/*.h",
 | 
			
		||||
    ]),
 | 
			
		||||
@@ -81,6 +80,14 @@ cc_library(
 | 
			
		||||
            "//conditions:default": ["-pthread"],
 | 
			
		||||
        },
 | 
			
		||||
    ),
 | 
			
		||||
    defines = select(
 | 
			
		||||
        {
 | 
			
		||||
            ":has_absl": [
 | 
			
		||||
                "GTEST_HAS_ABSL=1",
 | 
			
		||||
            ],
 | 
			
		||||
            "//conditions:default": [],
 | 
			
		||||
        },
 | 
			
		||||
    ),
 | 
			
		||||
    includes = [
 | 
			
		||||
        "googlemock",
 | 
			
		||||
        "googlemock/include",
 | 
			
		||||
@@ -94,21 +101,16 @@ cc_library(
 | 
			
		||||
            "-pthread",
 | 
			
		||||
        ],
 | 
			
		||||
    }),
 | 
			
		||||
    defines = select ({
 | 
			
		||||
        ":has_absl": [
 | 
			
		||||
        "GTEST_HAS_ABSL=1",
 | 
			
		||||
        ],
 | 
			
		||||
        "//conditions:default": [],
 | 
			
		||||
    }
 | 
			
		||||
    deps = select(
 | 
			
		||||
        {
 | 
			
		||||
            ":has_absl": [
 | 
			
		||||
                "@com_google_absl//absl/types:optional",
 | 
			
		||||
                "@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(
 | 
			
		||||
 
 | 
			
		||||
@@ -114,6 +114,7 @@
 | 
			
		||||
#if GTEST_HAS_ABSL
 | 
			
		||||
#include "absl/strings/string_view.h"
 | 
			
		||||
#include "absl/types/optional.h"
 | 
			
		||||
#include "absl/types/variant.h"
 | 
			
		||||
#endif  // GTEST_HAS_ABSL
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
// UniversalPrintArray(begin, len, os) prints an array of 'len'
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user