aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzhanyong.wan <zhanyong.wan@8415998a-534a-0410-bf83-d39667b30386>2009-07-20 21:16:35 +0000
committerzhanyong.wan <zhanyong.wan@8415998a-534a-0410-bf83-d39667b30386>2009-07-20 21:16:35 +0000
commit387bdd551d4a88383246841ac3f70324b8d42772 (patch)
treec7dd4842fadddd0671feb380be95eeba6ca6070a
parentb5937dab6969ca4b1d8304cc8939ce16c1fb62e5 (diff)
downloadgoogletest-387bdd551d4a88383246841ac3f70324b8d42772.tar.gz
googletest-387bdd551d4a88383246841ac3f70324b8d42772.tar.bz2
googletest-387bdd551d4a88383246841ac3f70324b8d42772.zip
Makes ByRef(x) printable as a reference to x.
-rw-r--r--include/gmock/gmock-generated-actions.h11
-rw-r--r--include/gmock/gmock-generated-actions.h.pump11
-rwxr-xr-xscripts/gmock_doctor.py1
-rw-r--r--test/gmock-generated-actions_test.cc10
4 files changed, 32 insertions, 1 deletions
diff --git a/include/gmock/gmock-generated-actions.h b/include/gmock/gmock-generated-actions.h
index fa02faaa..c0097175 100644
--- a/include/gmock/gmock-generated-actions.h
+++ b/include/gmock/gmock-generated-actions.h
@@ -39,6 +39,7 @@
#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_
#include <gmock/gmock-actions.h>
+#include <gmock/gmock-printers.h>
#include <gmock/internal/gmock-port.h>
namespace testing {
@@ -321,6 +322,9 @@ class InvokeMethodAction {
const MethodPtr method_ptr_;
};
+// TODO(wan@google.com): ReferenceWrapper and ByRef() are neither
+// action-specific nor variadic. Move them to a better place.
+
// A ReferenceWrapper<T> object represents a reference to type T,
// which can be either const or not. It can be explicitly converted
// from, and implicitly converted to, a T&. Unlike a reference,
@@ -341,6 +345,13 @@ class ReferenceWrapper {
T* pointer_;
};
+// Allows the expression ByRef(x) to be printed as a reference to x.
+template <typename T>
+void PrintTo(const ReferenceWrapper<T>& ref, ::std::ostream* os) {
+ T& value = ref;
+ UniversalPrinter<T&>::Print(value, os);
+}
+
// CallableHelper has static methods for invoking "callables",
// i.e. function pointers and functors. It uses overloading to
// provide a uniform interface for invoking different kinds of
diff --git a/include/gmock/gmock-generated-actions.h.pump b/include/gmock/gmock-generated-actions.h.pump
index b5223a34..2a7e4ffd 100644
--- a/include/gmock/gmock-generated-actions.h.pump
+++ b/include/gmock/gmock-generated-actions.h.pump
@@ -43,6 +43,7 @@ $$}} This meta comment fixes auto-indentation in editors.
#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_
#include <gmock/gmock-actions.h>
+#include <gmock/gmock-printers.h>
#include <gmock/internal/gmock-port.h>
namespace testing {
@@ -123,6 +124,9 @@ class InvokeMethodAction {
const MethodPtr method_ptr_;
};
+// TODO(wan@google.com): ReferenceWrapper and ByRef() are neither
+// action-specific nor variadic. Move them to a better place.
+
// A ReferenceWrapper<T> object represents a reference to type T,
// which can be either const or not. It can be explicitly converted
// from, and implicitly converted to, a T&. Unlike a reference,
@@ -143,6 +147,13 @@ class ReferenceWrapper {
T* pointer_;
};
+// Allows the expression ByRef(x) to be printed as a reference to x.
+template <typename T>
+void PrintTo(const ReferenceWrapper<T>& ref, ::std::ostream* os) {
+ T& value = ref;
+ UniversalPrinter<T&>::Print(value, os);
+}
+
// CallableHelper has static methods for invoking "callables",
// i.e. function pointers and functors. It uses overloading to
// provide a uniform interface for invoking different kinds of
diff --git a/scripts/gmock_doctor.py b/scripts/gmock_doctor.py
index 05e42585..7b45fa17 100755
--- a/scripts/gmock_doctor.py
+++ b/scripts/gmock_doctor.py
@@ -71,7 +71,6 @@ _COMMON_GMOCK_SYMBOLS = [
'Not',
'NotNull',
'Pointee',
- 'PointeeIsInitializedProto',
'Property',
'Ref',
'ResultOf',
diff --git a/test/gmock-generated-actions_test.cc b/test/gmock-generated-actions_test.cc
index d0b2ddc9..cf3c7891 100644
--- a/test/gmock-generated-actions_test.cc
+++ b/test/gmock-generated-actions_test.cc
@@ -36,6 +36,7 @@
#include <gmock/gmock-generated-actions.h>
#include <functional>
+#include <sstream>
#include <string>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
@@ -546,6 +547,15 @@ TEST(ByRefTest, ExplicitType) {
// ByRef<Derived>(b);
}
+// Tests that Google Mock prints expression ByRef(x) as a reference to x.
+TEST(ByRefTest, PrintsCorrectly) {
+ int n = 42;
+ ::std::stringstream expected, actual;
+ testing::internal::UniversalPrinter<const int&>::Print(n, &expected);
+ testing::internal::UniversalPrint(ByRef(n), &actual);
+ EXPECT_EQ(expected.str(), actual.str());
+}
+
// Tests InvokeArgument<N>(...).
// Tests using InvokeArgument with a nullary function.