Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(369)

Side by Side Diff: testing/gmock-support.h

Issue 881653003: Don't use internal gmock helper classes. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_TESTING_GMOCK_SUPPORT_H_ 5 #ifndef V8_TESTING_GMOCK_SUPPORT_H_
6 #define V8_TESTING_GMOCK_SUPPORT_H_ 6 #define V8_TESTING_GMOCK_SUPPORT_H_
7 7
8 #include <cmath> 8 #include <cmath>
9 #include <cstring> 9 #include <cstring>
10 #include <string>
10 11
11 #include "testing/gmock/include/gmock/gmock.h" 12 #include "testing/gmock/include/gmock/gmock.h"
12 13
13 namespace testing { 14 namespace testing {
14 15
15 template <typename T> 16 template <typename T>
16 class Capture { 17 class Capture {
17 public: 18 public:
18 Capture() : value_(), has_value_(false) {} 19 Capture() : value_(), has_value_(false) {}
19 20
20 const T& value() const { return value_; } 21 const T& value() const { return value_; }
21 bool has_value() const { return has_value_; } 22 bool has_value() const { return has_value_; }
22 23
23 void SetValue(const T& value) { 24 void SetValue(const T& value) {
24 DCHECK(!has_value()); 25 DCHECK(!has_value());
25 value_ = value; 26 value_ = value;
26 has_value_ = true; 27 has_value_ = true;
27 } 28 }
28 29
29 private: 30 private:
30 T value_; 31 T value_;
31 bool has_value_; 32 bool has_value_;
32 }; 33 };
33 34
34 35
35 namespace internal { 36 namespace internal {
36 37
37 struct AnyBitEq {
38 template <typename A, typename B>
39 bool operator()(A const& a, B const& b) const {
40 if (sizeof(A) != sizeof(B)) return false;
41 return std::memcmp(&a, &b, sizeof(A)) == 0;
42 }
43 };
44
45
46 template <typename Rhs>
47 class BitEqMatcher : public ComparisonBase<BitEqMatcher<Rhs>, Rhs, AnyBitEq> {
48 public:
49 explicit BitEqMatcher(Rhs const& rhs)
50 : ComparisonBase<BitEqMatcher<Rhs>, Rhs, AnyBitEq>(rhs) {}
51 static const char* Desc() { return "is bitwise equal to"; }
52 static const char* NegatedDesc() { return "isn't bitwise equal to"; }
53 };
54
55
56 template <typename T> 38 template <typename T>
57 class CaptureEqMatcher : public MatcherInterface<T> { 39 class CaptureEqMatcher : public MatcherInterface<T> {
58 public: 40 public:
59 explicit CaptureEqMatcher(Capture<T>* capture) : capture_(capture) {} 41 explicit CaptureEqMatcher(Capture<T>* capture) : capture_(capture) {}
60 42
61 virtual void DescribeTo(std::ostream* os) const { 43 virtual void DescribeTo(std::ostream* os) const {
62 *os << "captured by " << static_cast<const void*>(capture_); 44 *os << "captured by " << static_cast<const void*>(capture_);
63 if (capture_->has_value()) *os << " which has value " << capture_->value(); 45 if (capture_->has_value()) *os << " which has value " << capture_->value();
64 } 46 }
65 47
(...skipping 10 matching lines...) Expand all
76 } 58 }
77 59
78 private: 60 private:
79 Capture<T>* capture_; 61 Capture<T>* capture_;
80 }; 62 };
81 63
82 } // namespace internal 64 } // namespace internal
83 65
84 66
85 // Creates a polymorphic matcher that matches anything whose bit representation 67 // Creates a polymorphic matcher that matches anything whose bit representation
86 // is equal to that of x. 68 // is equal to that of {x}.
87 template <typename T> 69 MATCHER_P(BitEq, x, std::string(negation ? "isn't" : "is") +
88 inline internal::BitEqMatcher<T> BitEq(T const& x) { 70 " bitwise equal to " + PrintToString(x)) {
89 return internal::BitEqMatcher<T>(x); 71 static_assert(sizeof(x) == sizeof(arg), "Size mismatch");
72 return std::memcmp(&arg, &x, sizeof(x)) == 0;
90 } 73 }
91 74
92 75
93 // CaptureEq(capture) captures the value passed in during matching as long as it 76 // CaptureEq(capture) captures the value passed in during matching as long as it
94 // is unset, and once set, compares the value for equality with the argument. 77 // is unset, and once set, compares the value for equality with the argument.
95 template <typename T> 78 template <typename T>
96 inline Matcher<T> CaptureEq(Capture<T>* capture) { 79 inline Matcher<T> CaptureEq(Capture<T>* capture) {
97 return MakeMatcher(new internal::CaptureEqMatcher<T>(capture)); 80 return MakeMatcher(new internal::CaptureEqMatcher<T>(capture));
98 } 81 }
99 82
100 83
101 // Creates a polymorphic matcher that matches any floating point NaN value. 84 // Creates a polymorphic matcher that matches any floating point NaN value.
102 MATCHER(IsNaN, std::string(negation ? "isn't" : "is") + " not a number") { 85 MATCHER(IsNaN, std::string(negation ? "isn't" : "is") + " not a number") {
103 return std::isnan(arg); 86 return std::isnan(arg);
104 } 87 }
105 88
106 } // namespace testing 89 } // namespace testing
107 90
108 #endif // V8_TESTING_GMOCK_SUPPORT_H_ 91 #endif // V8_TESTING_GMOCK_SUPPORT_H_
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698