uia 0.0.5 → 0.0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/ChangeLog +5 -1
  2. data/lib/uia/version.rb +1 -1
  3. data/uia.gemspec +3 -1
  4. metadata +1 -48
  5. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-actions.h +0 -1078
  6. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-cardinalities.h +0 -147
  7. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-generated-actions.h +0 -2415
  8. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-generated-actions.h.pump +0 -821
  9. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-generated-function-mockers.h +0 -991
  10. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-generated-function-mockers.h.pump +0 -265
  11. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-generated-matchers.h +0 -2190
  12. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-generated-matchers.h.pump +0 -674
  13. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-generated-nice-strict.h +0 -397
  14. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-generated-nice-strict.h.pump +0 -161
  15. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-matchers.h +0 -3986
  16. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-more-actions.h +0 -233
  17. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-more-matchers.h +0 -58
  18. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-spec-builders.h +0 -1791
  19. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock.h +0 -94
  20. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/internal/gmock-generated-internal-utils.h +0 -279
  21. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/internal/gmock-generated-internal-utils.h.pump +0 -136
  22. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/internal/gmock-internal-utils.h +0 -498
  23. data/ext/UiaDll/UiaDll.Test/gmock/include/gmock/internal/gmock-port.h +0 -78
  24. data/ext/UiaDll/UiaDll.Test/gmock/lib/gmock.lib +0 -0
  25. data/ext/UiaDll/UiaDll.Test/gmock/lib/gmockd.lib +0 -0
  26. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest-death-test.h +0 -294
  27. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest-message.h +0 -250
  28. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest-param-test.h +0 -1421
  29. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest-param-test.h.pump +0 -487
  30. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest-printers.h +0 -855
  31. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest-spi.h +0 -232
  32. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest-test-part.h +0 -179
  33. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest-typed-test.h +0 -259
  34. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest.h +0 -2291
  35. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest_pred_impl.h +0 -358
  36. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest_prod.h +0 -58
  37. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-death-test-internal.h +0 -319
  38. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-filepath.h +0 -206
  39. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-internal.h +0 -1158
  40. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-linked_ptr.h +0 -233
  41. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-param-util-generated.h +0 -5143
  42. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-param-util-generated.h.pump +0 -301
  43. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-param-util.h +0 -619
  44. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-port.h +0 -1947
  45. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-string.h +0 -167
  46. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-tuple.h +0 -1012
  47. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-tuple.h.pump +0 -339
  48. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-type-util.h +0 -3331
  49. data/ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-type-util.h.pump +0 -297
  50. data/ext/UiaDll/UiaDll.Test/gtest/lib/gtest.lib +0 -0
  51. data/ext/UiaDll/UiaDll.Test/gtest/lib/gtestd.lib +0 -0
data/ChangeLog CHANGED
@@ -1,4 +1,8 @@
1
- === Verions 0.0.5 / 2012-10-16
1
+ === Version 0.0.5.1 / 2012-10-16
2
+ * Enhancements
3
+ * reduced the size of the gem package by excluding gmock and gtest
4
+
5
+ === Version 0.0.5 / 2012-10-16
2
6
 
3
7
  * Enhancements
4
8
  * Pushed #find_element into the Uia module
data/lib/uia/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Uia
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.5.1'
3
3
  end
data/uia.gemspec CHANGED
@@ -18,7 +18,9 @@ Gem::Specification.new do |spec|
18
18
  'ext/UiaDll/Release/UIA.Helper.dll'
19
19
  ]
20
20
 
21
- spec.files = `git ls-files`.split($/) + binaries
21
+ exclude = lambda {|p| p =~ /(gtest)|(gmock)/i }
22
+
23
+ spec.files = `git ls-files`.split($/).reject(&exclude) + binaries
22
24
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
23
25
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
24
26
  spec.require_paths = ['lib']
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.5.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -140,53 +140,6 @@ files:
140
140
  - ext/UiaDll/UiaDll.Test/UiaDll.Test.vcxproj.filters
141
141
  - ext/UiaDll/UiaDll.Test/app.ico
142
142
  - ext/UiaDll/UiaDll.Test/app.rc
143
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-actions.h
144
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-cardinalities.h
145
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-generated-actions.h
146
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-generated-actions.h.pump
147
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-generated-function-mockers.h
148
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-generated-function-mockers.h.pump
149
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-generated-matchers.h
150
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-generated-matchers.h.pump
151
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-generated-nice-strict.h
152
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-generated-nice-strict.h.pump
153
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-matchers.h
154
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-more-actions.h
155
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-more-matchers.h
156
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock-spec-builders.h
157
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/gmock.h
158
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/internal/gmock-generated-internal-utils.h
159
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/internal/gmock-generated-internal-utils.h.pump
160
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/internal/gmock-internal-utils.h
161
- - ext/UiaDll/UiaDll.Test/gmock/include/gmock/internal/gmock-port.h
162
- - ext/UiaDll/UiaDll.Test/gmock/lib/gmock.lib
163
- - ext/UiaDll/UiaDll.Test/gmock/lib/gmockd.lib
164
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest-death-test.h
165
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest-message.h
166
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest-param-test.h
167
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest-param-test.h.pump
168
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest-printers.h
169
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest-spi.h
170
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest-test-part.h
171
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest-typed-test.h
172
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest.h
173
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest_pred_impl.h
174
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/gtest_prod.h
175
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-death-test-internal.h
176
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-filepath.h
177
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-internal.h
178
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-linked_ptr.h
179
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-param-util-generated.h
180
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-param-util-generated.h.pump
181
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-param-util.h
182
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-port.h
183
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-string.h
184
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-tuple.h
185
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-tuple.h.pump
186
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-type-util.h
187
- - ext/UiaDll/UiaDll.Test/gtest/include/gtest/internal/gtest-type-util.h.pump
188
- - ext/UiaDll/UiaDll.Test/gtest/lib/gtest.lib
189
- - ext/UiaDll/UiaDll.Test/gtest/lib/gtestd.lib
190
143
  - ext/UiaDll/UiaDll.Test/resource.h
191
144
  - ext/UiaDll/UiaDll.Test/stdafx.cpp
192
145
  - ext/UiaDll/UiaDll.Test/stdafx.h
@@ -1,1078 +0,0 @@
1
- // Copyright 2007, Google Inc.
2
- // All rights reserved.
3
- //
4
- // Redistribution and use in source and binary forms, with or without
5
- // modification, are permitted provided that the following conditions are
6
- // met:
7
- //
8
- // * Redistributions of source code must retain the above copyright
9
- // notice, this list of conditions and the following disclaimer.
10
- // * Redistributions in binary form must reproduce the above
11
- // copyright notice, this list of conditions and the following disclaimer
12
- // in the documentation and/or other materials provided with the
13
- // distribution.
14
- // * Neither the name of Google Inc. nor the names of its
15
- // contributors may be used to endorse or promote products derived from
16
- // this software without specific prior written permission.
17
- //
18
- // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
- // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
- // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
- // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
- // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
- // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
- // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
- // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
- // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
- // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
- // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
- //
30
- // Author: wan@google.com (Zhanyong Wan)
31
-
32
- // Google Mock - a framework for writing C++ mock classes.
33
- //
34
- // This file implements some commonly used actions.
35
-
36
- #ifndef GMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_
37
- #define GMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_
38
-
39
- #ifndef _WIN32_WCE
40
- # include <errno.h>
41
- #endif
42
-
43
- #include <algorithm>
44
- #include <string>
45
-
46
- #include "gmock/internal/gmock-internal-utils.h"
47
- #include "gmock/internal/gmock-port.h"
48
-
49
- namespace testing {
50
-
51
- // To implement an action Foo, define:
52
- // 1. a class FooAction that implements the ActionInterface interface, and
53
- // 2. a factory function that creates an Action object from a
54
- // const FooAction*.
55
- //
56
- // The two-level delegation design follows that of Matcher, providing
57
- // consistency for extension developers. It also eases ownership
58
- // management as Action objects can now be copied like plain values.
59
-
60
- namespace internal {
61
-
62
- template <typename F1, typename F2>
63
- class ActionAdaptor;
64
-
65
- // BuiltInDefaultValue<T>::Get() returns the "built-in" default
66
- // value for type T, which is NULL when T is a pointer type, 0 when T
67
- // is a numeric type, false when T is bool, or "" when T is string or
68
- // std::string. For any other type T, this value is undefined and the
69
- // function will abort the process.
70
- template <typename T>
71
- class BuiltInDefaultValue {
72
- public:
73
- // This function returns true iff type T has a built-in default value.
74
- static bool Exists() { return false; }
75
- static T Get() {
76
- Assert(false, __FILE__, __LINE__,
77
- "Default action undefined for the function return type.");
78
- return internal::Invalid<T>();
79
- // The above statement will never be reached, but is required in
80
- // order for this function to compile.
81
- }
82
- };
83
-
84
- // This partial specialization says that we use the same built-in
85
- // default value for T and const T.
86
- template <typename T>
87
- class BuiltInDefaultValue<const T> {
88
- public:
89
- static bool Exists() { return BuiltInDefaultValue<T>::Exists(); }
90
- static T Get() { return BuiltInDefaultValue<T>::Get(); }
91
- };
92
-
93
- // This partial specialization defines the default values for pointer
94
- // types.
95
- template <typename T>
96
- class BuiltInDefaultValue<T*> {
97
- public:
98
- static bool Exists() { return true; }
99
- static T* Get() { return NULL; }
100
- };
101
-
102
- // The following specializations define the default values for
103
- // specific types we care about.
104
- #define GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(type, value) \
105
- template <> \
106
- class BuiltInDefaultValue<type> { \
107
- public: \
108
- static bool Exists() { return true; } \
109
- static type Get() { return value; } \
110
- }
111
-
112
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(void, ); // NOLINT
113
- #if GTEST_HAS_GLOBAL_STRING
114
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(::string, "");
115
- #endif // GTEST_HAS_GLOBAL_STRING
116
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(::std::string, "");
117
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(bool, false);
118
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned char, '\0');
119
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed char, '\0');
120
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(char, '\0');
121
-
122
- // There's no need for a default action for signed wchar_t, as that
123
- // type is the same as wchar_t for gcc, and invalid for MSVC.
124
- //
125
- // There's also no need for a default action for unsigned wchar_t, as
126
- // that type is the same as unsigned int for gcc, and invalid for
127
- // MSVC.
128
- #if GMOCK_WCHAR_T_IS_NATIVE_
129
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(wchar_t, 0U); // NOLINT
130
- #endif
131
-
132
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned short, 0U); // NOLINT
133
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed short, 0); // NOLINT
134
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned int, 0U);
135
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed int, 0);
136
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned long, 0UL); // NOLINT
137
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed long, 0L); // NOLINT
138
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(UInt64, 0);
139
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(Int64, 0);
140
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(float, 0);
141
- GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(double, 0);
142
-
143
- #undef GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
144
-
145
- } // namespace internal
146
-
147
- // When an unexpected function call is encountered, Google Mock will
148
- // let it return a default value if the user has specified one for its
149
- // return type, or if the return type has a built-in default value;
150
- // otherwise Google Mock won't know what value to return and will have
151
- // to abort the process.
152
- //
153
- // The DefaultValue<T> class allows a user to specify the
154
- // default value for a type T that is both copyable and publicly
155
- // destructible (i.e. anything that can be used as a function return
156
- // type). The usage is:
157
- //
158
- // // Sets the default value for type T to be foo.
159
- // DefaultValue<T>::Set(foo);
160
- template <typename T>
161
- class DefaultValue {
162
- public:
163
- // Sets the default value for type T; requires T to be
164
- // copy-constructable and have a public destructor.
165
- static void Set(T x) {
166
- delete value_;
167
- value_ = new T(x);
168
- }
169
-
170
- // Unsets the default value for type T.
171
- static void Clear() {
172
- delete value_;
173
- value_ = NULL;
174
- }
175
-
176
- // Returns true iff the user has set the default value for type T.
177
- static bool IsSet() { return value_ != NULL; }
178
-
179
- // Returns true if T has a default return value set by the user or there
180
- // exists a built-in default value.
181
- static bool Exists() {
182
- return IsSet() || internal::BuiltInDefaultValue<T>::Exists();
183
- }
184
-
185
- // Returns the default value for type T if the user has set one;
186
- // otherwise returns the built-in default value if there is one;
187
- // otherwise aborts the process.
188
- static T Get() {
189
- return value_ == NULL ?
190
- internal::BuiltInDefaultValue<T>::Get() : *value_;
191
- }
192
-
193
- private:
194
- static const T* value_;
195
- };
196
-
197
- // This partial specialization allows a user to set default values for
198
- // reference types.
199
- template <typename T>
200
- class DefaultValue<T&> {
201
- public:
202
- // Sets the default value for type T&.
203
- static void Set(T& x) { // NOLINT
204
- address_ = &x;
205
- }
206
-
207
- // Unsets the default value for type T&.
208
- static void Clear() {
209
- address_ = NULL;
210
- }
211
-
212
- // Returns true iff the user has set the default value for type T&.
213
- static bool IsSet() { return address_ != NULL; }
214
-
215
- // Returns true if T has a default return value set by the user or there
216
- // exists a built-in default value.
217
- static bool Exists() {
218
- return IsSet() || internal::BuiltInDefaultValue<T&>::Exists();
219
- }
220
-
221
- // Returns the default value for type T& if the user has set one;
222
- // otherwise returns the built-in default value if there is one;
223
- // otherwise aborts the process.
224
- static T& Get() {
225
- return address_ == NULL ?
226
- internal::BuiltInDefaultValue<T&>::Get() : *address_;
227
- }
228
-
229
- private:
230
- static T* address_;
231
- };
232
-
233
- // This specialization allows DefaultValue<void>::Get() to
234
- // compile.
235
- template <>
236
- class DefaultValue<void> {
237
- public:
238
- static bool Exists() { return true; }
239
- static void Get() {}
240
- };
241
-
242
- // Points to the user-set default value for type T.
243
- template <typename T>
244
- const T* DefaultValue<T>::value_ = NULL;
245
-
246
- // Points to the user-set default value for type T&.
247
- template <typename T>
248
- T* DefaultValue<T&>::address_ = NULL;
249
-
250
- // Implement this interface to define an action for function type F.
251
- template <typename F>
252
- class ActionInterface {
253
- public:
254
- typedef typename internal::Function<F>::Result Result;
255
- typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple;
256
-
257
- ActionInterface() {}
258
- virtual ~ActionInterface() {}
259
-
260
- // Performs the action. This method is not const, as in general an
261
- // action can have side effects and be stateful. For example, a
262
- // get-the-next-element-from-the-collection action will need to
263
- // remember the current element.
264
- virtual Result Perform(const ArgumentTuple& args) = 0;
265
-
266
- private:
267
- GTEST_DISALLOW_COPY_AND_ASSIGN_(ActionInterface);
268
- };
269
-
270
- // An Action<F> is a copyable and IMMUTABLE (except by assignment)
271
- // object that represents an action to be taken when a mock function
272
- // of type F is called. The implementation of Action<T> is just a
273
- // linked_ptr to const ActionInterface<T>, so copying is fairly cheap.
274
- // Don't inherit from Action!
275
- //
276
- // You can view an object implementing ActionInterface<F> as a
277
- // concrete action (including its current state), and an Action<F>
278
- // object as a handle to it.
279
- template <typename F>
280
- class Action {
281
- public:
282
- typedef typename internal::Function<F>::Result Result;
283
- typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple;
284
-
285
- // Constructs a null Action. Needed for storing Action objects in
286
- // STL containers.
287
- Action() : impl_(NULL) {}
288
-
289
- // Constructs an Action from its implementation. A NULL impl is
290
- // used to represent the "do-default" action.
291
- explicit Action(ActionInterface<F>* impl) : impl_(impl) {}
292
-
293
- // Copy constructor.
294
- Action(const Action& action) : impl_(action.impl_) {}
295
-
296
- // This constructor allows us to turn an Action<Func> object into an
297
- // Action<F>, as long as F's arguments can be implicitly converted
298
- // to Func's and Func's return type can be implicitly converted to
299
- // F's.
300
- template <typename Func>
301
- explicit Action(const Action<Func>& action);
302
-
303
- // Returns true iff this is the DoDefault() action.
304
- bool IsDoDefault() const { return impl_.get() == NULL; }
305
-
306
- // Performs the action. Note that this method is const even though
307
- // the corresponding method in ActionInterface is not. The reason
308
- // is that a const Action<F> means that it cannot be re-bound to
309
- // another concrete action, not that the concrete action it binds to
310
- // cannot change state. (Think of the difference between a const
311
- // pointer and a pointer to const.)
312
- Result Perform(const ArgumentTuple& args) const {
313
- internal::Assert(
314
- !IsDoDefault(), __FILE__, __LINE__,
315
- "You are using DoDefault() inside a composite action like "
316
- "DoAll() or WithArgs(). This is not supported for technical "
317
- "reasons. Please instead spell out the default action, or "
318
- "assign the default action to an Action variable and use "
319
- "the variable in various places.");
320
- return impl_->Perform(args);
321
- }
322
-
323
- private:
324
- template <typename F1, typename F2>
325
- friend class internal::ActionAdaptor;
326
-
327
- internal::linked_ptr<ActionInterface<F> > impl_;
328
- };
329
-
330
- // The PolymorphicAction class template makes it easy to implement a
331
- // polymorphic action (i.e. an action that can be used in mock
332
- // functions of than one type, e.g. Return()).
333
- //
334
- // To define a polymorphic action, a user first provides a COPYABLE
335
- // implementation class that has a Perform() method template:
336
- //
337
- // class FooAction {
338
- // public:
339
- // template <typename Result, typename ArgumentTuple>
340
- // Result Perform(const ArgumentTuple& args) const {
341
- // // Processes the arguments and returns a result, using
342
- // // tr1::get<N>(args) to get the N-th (0-based) argument in the tuple.
343
- // }
344
- // ...
345
- // };
346
- //
347
- // Then the user creates the polymorphic action using
348
- // MakePolymorphicAction(object) where object has type FooAction. See
349
- // the definition of Return(void) and SetArgumentPointee<N>(value) for
350
- // complete examples.
351
- template <typename Impl>
352
- class PolymorphicAction {
353
- public:
354
- explicit PolymorphicAction(const Impl& impl) : impl_(impl) {}
355
-
356
- template <typename F>
357
- operator Action<F>() const {
358
- return Action<F>(new MonomorphicImpl<F>(impl_));
359
- }
360
-
361
- private:
362
- template <typename F>
363
- class MonomorphicImpl : public ActionInterface<F> {
364
- public:
365
- typedef typename internal::Function<F>::Result Result;
366
- typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple;
367
-
368
- explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {}
369
-
370
- virtual Result Perform(const ArgumentTuple& args) {
371
- return impl_.template Perform<Result>(args);
372
- }
373
-
374
- private:
375
- Impl impl_;
376
-
377
- GTEST_DISALLOW_ASSIGN_(MonomorphicImpl);
378
- };
379
-
380
- Impl impl_;
381
-
382
- GTEST_DISALLOW_ASSIGN_(PolymorphicAction);
383
- };
384
-
385
- // Creates an Action from its implementation and returns it. The
386
- // created Action object owns the implementation.
387
- template <typename F>
388
- Action<F> MakeAction(ActionInterface<F>* impl) {
389
- return Action<F>(impl);
390
- }
391
-
392
- // Creates a polymorphic action from its implementation. This is
393
- // easier to use than the PolymorphicAction<Impl> constructor as it
394
- // doesn't require you to explicitly write the template argument, e.g.
395
- //
396
- // MakePolymorphicAction(foo);
397
- // vs
398
- // PolymorphicAction<TypeOfFoo>(foo);
399
- template <typename Impl>
400
- inline PolymorphicAction<Impl> MakePolymorphicAction(const Impl& impl) {
401
- return PolymorphicAction<Impl>(impl);
402
- }
403
-
404
- namespace internal {
405
-
406
- // Allows an Action<F2> object to pose as an Action<F1>, as long as F2
407
- // and F1 are compatible.
408
- template <typename F1, typename F2>
409
- class ActionAdaptor : public ActionInterface<F1> {
410
- public:
411
- typedef typename internal::Function<F1>::Result Result;
412
- typedef typename internal::Function<F1>::ArgumentTuple ArgumentTuple;
413
-
414
- explicit ActionAdaptor(const Action<F2>& from) : impl_(from.impl_) {}
415
-
416
- virtual Result Perform(const ArgumentTuple& args) {
417
- return impl_->Perform(args);
418
- }
419
-
420
- private:
421
- const internal::linked_ptr<ActionInterface<F2> > impl_;
422
-
423
- GTEST_DISALLOW_ASSIGN_(ActionAdaptor);
424
- };
425
-
426
- // Implements the polymorphic Return(x) action, which can be used in
427
- // any function that returns the type of x, regardless of the argument
428
- // types.
429
- //
430
- // Note: The value passed into Return must be converted into
431
- // Function<F>::Result when this action is cast to Action<F> rather than
432
- // when that action is performed. This is important in scenarios like
433
- //
434
- // MOCK_METHOD1(Method, T(U));
435
- // ...
436
- // {
437
- // Foo foo;
438
- // X x(&foo);
439
- // EXPECT_CALL(mock, Method(_)).WillOnce(Return(x));
440
- // }
441
- //
442
- // In the example above the variable x holds reference to foo which leaves
443
- // scope and gets destroyed. If copying X just copies a reference to foo,
444
- // that copy will be left with a hanging reference. If conversion to T
445
- // makes a copy of foo, the above code is safe. To support that scenario, we
446
- // need to make sure that the type conversion happens inside the EXPECT_CALL
447
- // statement, and conversion of the result of Return to Action<T(U)> is a
448
- // good place for that.
449
- //
450
- template <typename R>
451
- class ReturnAction {
452
- public:
453
- // Constructs a ReturnAction object from the value to be returned.
454
- // 'value' is passed by value instead of by const reference in order
455
- // to allow Return("string literal") to compile.
456
- explicit ReturnAction(R value) : value_(value) {}
457
-
458
- // This template type conversion operator allows Return(x) to be
459
- // used in ANY function that returns x's type.
460
- template <typename F>
461
- operator Action<F>() const {
462
- // Assert statement belongs here because this is the best place to verify
463
- // conditions on F. It produces the clearest error messages
464
- // in most compilers.
465
- // Impl really belongs in this scope as a local class but can't
466
- // because MSVC produces duplicate symbols in different translation units
467
- // in this case. Until MS fixes that bug we put Impl into the class scope
468
- // and put the typedef both here (for use in assert statement) and
469
- // in the Impl class. But both definitions must be the same.
470
- typedef typename Function<F>::Result Result;
471
- GTEST_COMPILE_ASSERT_(
472
- !internal::is_reference<Result>::value,
473
- use_ReturnRef_instead_of_Return_to_return_a_reference);
474
- return Action<F>(new Impl<F>(value_));
475
- }
476
-
477
- private:
478
- // Implements the Return(x) action for a particular function type F.
479
- template <typename F>
480
- class Impl : public ActionInterface<F> {
481
- public:
482
- typedef typename Function<F>::Result Result;
483
- typedef typename Function<F>::ArgumentTuple ArgumentTuple;
484
-
485
- // The implicit cast is necessary when Result has more than one
486
- // single-argument constructor (e.g. Result is std::vector<int>) and R
487
- // has a type conversion operator template. In that case, value_(value)
488
- // won't compile as the compiler doesn't known which constructor of
489
- // Result to call. ImplicitCast_ forces the compiler to convert R to
490
- // Result without considering explicit constructors, thus resolving the
491
- // ambiguity. value_ is then initialized using its copy constructor.
492
- explicit Impl(R value)
493
- : value_(::testing::internal::ImplicitCast_<Result>(value)) {}
494
-
495
- virtual Result Perform(const ArgumentTuple&) { return value_; }
496
-
497
- private:
498
- GTEST_COMPILE_ASSERT_(!internal::is_reference<Result>::value,
499
- Result_cannot_be_a_reference_type);
500
- Result value_;
501
-
502
- GTEST_DISALLOW_ASSIGN_(Impl);
503
- };
504
-
505
- R value_;
506
-
507
- GTEST_DISALLOW_ASSIGN_(ReturnAction);
508
- };
509
-
510
- // Implements the ReturnNull() action.
511
- class ReturnNullAction {
512
- public:
513
- // Allows ReturnNull() to be used in any pointer-returning function.
514
- template <typename Result, typename ArgumentTuple>
515
- static Result Perform(const ArgumentTuple&) {
516
- GTEST_COMPILE_ASSERT_(internal::is_pointer<Result>::value,
517
- ReturnNull_can_be_used_to_return_a_pointer_only);
518
- return NULL;
519
- }
520
- };
521
-
522
- // Implements the Return() action.
523
- class ReturnVoidAction {
524
- public:
525
- // Allows Return() to be used in any void-returning function.
526
- template <typename Result, typename ArgumentTuple>
527
- static void Perform(const ArgumentTuple&) {
528
- CompileAssertTypesEqual<void, Result>();
529
- }
530
- };
531
-
532
- // Implements the polymorphic ReturnRef(x) action, which can be used
533
- // in any function that returns a reference to the type of x,
534
- // regardless of the argument types.
535
- template <typename T>
536
- class ReturnRefAction {
537
- public:
538
- // Constructs a ReturnRefAction object from the reference to be returned.
539
- explicit ReturnRefAction(T& ref) : ref_(ref) {} // NOLINT
540
-
541
- // This template type conversion operator allows ReturnRef(x) to be
542
- // used in ANY function that returns a reference to x's type.
543
- template <typename F>
544
- operator Action<F>() const {
545
- typedef typename Function<F>::Result Result;
546
- // Asserts that the function return type is a reference. This
547
- // catches the user error of using ReturnRef(x) when Return(x)
548
- // should be used, and generates some helpful error message.
549
- GTEST_COMPILE_ASSERT_(internal::is_reference<Result>::value,
550
- use_Return_instead_of_ReturnRef_to_return_a_value);
551
- return Action<F>(new Impl<F>(ref_));
552
- }
553
-
554
- private:
555
- // Implements the ReturnRef(x) action for a particular function type F.
556
- template <typename F>
557
- class Impl : public ActionInterface<F> {
558
- public:
559
- typedef typename Function<F>::Result Result;
560
- typedef typename Function<F>::ArgumentTuple ArgumentTuple;
561
-
562
- explicit Impl(T& ref) : ref_(ref) {} // NOLINT
563
-
564
- virtual Result Perform(const ArgumentTuple&) {
565
- return ref_;
566
- }
567
-
568
- private:
569
- T& ref_;
570
-
571
- GTEST_DISALLOW_ASSIGN_(Impl);
572
- };
573
-
574
- T& ref_;
575
-
576
- GTEST_DISALLOW_ASSIGN_(ReturnRefAction);
577
- };
578
-
579
- // Implements the polymorphic ReturnRefOfCopy(x) action, which can be
580
- // used in any function that returns a reference to the type of x,
581
- // regardless of the argument types.
582
- template <typename T>
583
- class ReturnRefOfCopyAction {
584
- public:
585
- // Constructs a ReturnRefOfCopyAction object from the reference to
586
- // be returned.
587
- explicit ReturnRefOfCopyAction(const T& value) : value_(value) {} // NOLINT
588
-
589
- // This template type conversion operator allows ReturnRefOfCopy(x) to be
590
- // used in ANY function that returns a reference to x's type.
591
- template <typename F>
592
- operator Action<F>() const {
593
- typedef typename Function<F>::Result Result;
594
- // Asserts that the function return type is a reference. This
595
- // catches the user error of using ReturnRefOfCopy(x) when Return(x)
596
- // should be used, and generates some helpful error message.
597
- GTEST_COMPILE_ASSERT_(
598
- internal::is_reference<Result>::value,
599
- use_Return_instead_of_ReturnRefOfCopy_to_return_a_value);
600
- return Action<F>(new Impl<F>(value_));
601
- }
602
-
603
- private:
604
- // Implements the ReturnRefOfCopy(x) action for a particular function type F.
605
- template <typename F>
606
- class Impl : public ActionInterface<F> {
607
- public:
608
- typedef typename Function<F>::Result Result;
609
- typedef typename Function<F>::ArgumentTuple ArgumentTuple;
610
-
611
- explicit Impl(const T& value) : value_(value) {} // NOLINT
612
-
613
- virtual Result Perform(const ArgumentTuple&) {
614
- return value_;
615
- }
616
-
617
- private:
618
- T value_;
619
-
620
- GTEST_DISALLOW_ASSIGN_(Impl);
621
- };
622
-
623
- const T value_;
624
-
625
- GTEST_DISALLOW_ASSIGN_(ReturnRefOfCopyAction);
626
- };
627
-
628
- // Implements the polymorphic DoDefault() action.
629
- class DoDefaultAction {
630
- public:
631
- // This template type conversion operator allows DoDefault() to be
632
- // used in any function.
633
- template <typename F>
634
- operator Action<F>() const { return Action<F>(NULL); }
635
- };
636
-
637
- // Implements the Assign action to set a given pointer referent to a
638
- // particular value.
639
- template <typename T1, typename T2>
640
- class AssignAction {
641
- public:
642
- AssignAction(T1* ptr, T2 value) : ptr_(ptr), value_(value) {}
643
-
644
- template <typename Result, typename ArgumentTuple>
645
- void Perform(const ArgumentTuple& /* args */) const {
646
- *ptr_ = value_;
647
- }
648
-
649
- private:
650
- T1* const ptr_;
651
- const T2 value_;
652
-
653
- GTEST_DISALLOW_ASSIGN_(AssignAction);
654
- };
655
-
656
- #if !GTEST_OS_WINDOWS_MOBILE
657
-
658
- // Implements the SetErrnoAndReturn action to simulate return from
659
- // various system calls and libc functions.
660
- template <typename T>
661
- class SetErrnoAndReturnAction {
662
- public:
663
- SetErrnoAndReturnAction(int errno_value, T result)
664
- : errno_(errno_value),
665
- result_(result) {}
666
- template <typename Result, typename ArgumentTuple>
667
- Result Perform(const ArgumentTuple& /* args */) const {
668
- errno = errno_;
669
- return result_;
670
- }
671
-
672
- private:
673
- const int errno_;
674
- const T result_;
675
-
676
- GTEST_DISALLOW_ASSIGN_(SetErrnoAndReturnAction);
677
- };
678
-
679
- #endif // !GTEST_OS_WINDOWS_MOBILE
680
-
681
- // Implements the SetArgumentPointee<N>(x) action for any function
682
- // whose N-th argument (0-based) is a pointer to x's type. The
683
- // template parameter kIsProto is true iff type A is ProtocolMessage,
684
- // proto2::Message, or a sub-class of those.
685
- template <size_t N, typename A, bool kIsProto>
686
- class SetArgumentPointeeAction {
687
- public:
688
- // Constructs an action that sets the variable pointed to by the
689
- // N-th function argument to 'value'.
690
- explicit SetArgumentPointeeAction(const A& value) : value_(value) {}
691
-
692
- template <typename Result, typename ArgumentTuple>
693
- void Perform(const ArgumentTuple& args) const {
694
- CompileAssertTypesEqual<void, Result>();
695
- *::std::tr1::get<N>(args) = value_;
696
- }
697
-
698
- private:
699
- const A value_;
700
-
701
- GTEST_DISALLOW_ASSIGN_(SetArgumentPointeeAction);
702
- };
703
-
704
- template <size_t N, typename Proto>
705
- class SetArgumentPointeeAction<N, Proto, true> {
706
- public:
707
- // Constructs an action that sets the variable pointed to by the
708
- // N-th function argument to 'proto'. Both ProtocolMessage and
709
- // proto2::Message have the CopyFrom() method, so the same
710
- // implementation works for both.
711
- explicit SetArgumentPointeeAction(const Proto& proto) : proto_(new Proto) {
712
- proto_->CopyFrom(proto);
713
- }
714
-
715
- template <typename Result, typename ArgumentTuple>
716
- void Perform(const ArgumentTuple& args) const {
717
- CompileAssertTypesEqual<void, Result>();
718
- ::std::tr1::get<N>(args)->CopyFrom(*proto_);
719
- }
720
-
721
- private:
722
- const internal::linked_ptr<Proto> proto_;
723
-
724
- GTEST_DISALLOW_ASSIGN_(SetArgumentPointeeAction);
725
- };
726
-
727
- // Implements the InvokeWithoutArgs(f) action. The template argument
728
- // FunctionImpl is the implementation type of f, which can be either a
729
- // function pointer or a functor. InvokeWithoutArgs(f) can be used as an
730
- // Action<F> as long as f's type is compatible with F (i.e. f can be
731
- // assigned to a tr1::function<F>).
732
- template <typename FunctionImpl>
733
- class InvokeWithoutArgsAction {
734
- public:
735
- // The c'tor makes a copy of function_impl (either a function
736
- // pointer or a functor).
737
- explicit InvokeWithoutArgsAction(FunctionImpl function_impl)
738
- : function_impl_(function_impl) {}
739
-
740
- // Allows InvokeWithoutArgs(f) to be used as any action whose type is
741
- // compatible with f.
742
- template <typename Result, typename ArgumentTuple>
743
- Result Perform(const ArgumentTuple&) { return function_impl_(); }
744
-
745
- private:
746
- FunctionImpl function_impl_;
747
-
748
- GTEST_DISALLOW_ASSIGN_(InvokeWithoutArgsAction);
749
- };
750
-
751
- // Implements the InvokeWithoutArgs(object_ptr, &Class::Method) action.
752
- template <class Class, typename MethodPtr>
753
- class InvokeMethodWithoutArgsAction {
754
- public:
755
- InvokeMethodWithoutArgsAction(Class* obj_ptr, MethodPtr method_ptr)
756
- : obj_ptr_(obj_ptr), method_ptr_(method_ptr) {}
757
-
758
- template <typename Result, typename ArgumentTuple>
759
- Result Perform(const ArgumentTuple&) const {
760
- return (obj_ptr_->*method_ptr_)();
761
- }
762
-
763
- private:
764
- Class* const obj_ptr_;
765
- const MethodPtr method_ptr_;
766
-
767
- GTEST_DISALLOW_ASSIGN_(InvokeMethodWithoutArgsAction);
768
- };
769
-
770
- // Implements the IgnoreResult(action) action.
771
- template <typename A>
772
- class IgnoreResultAction {
773
- public:
774
- explicit IgnoreResultAction(const A& action) : action_(action) {}
775
-
776
- template <typename F>
777
- operator Action<F>() const {
778
- // Assert statement belongs here because this is the best place to verify
779
- // conditions on F. It produces the clearest error messages
780
- // in most compilers.
781
- // Impl really belongs in this scope as a local class but can't
782
- // because MSVC produces duplicate symbols in different translation units
783
- // in this case. Until MS fixes that bug we put Impl into the class scope
784
- // and put the typedef both here (for use in assert statement) and
785
- // in the Impl class. But both definitions must be the same.
786
- typedef typename internal::Function<F>::Result Result;
787
-
788
- // Asserts at compile time that F returns void.
789
- CompileAssertTypesEqual<void, Result>();
790
-
791
- return Action<F>(new Impl<F>(action_));
792
- }
793
-
794
- private:
795
- template <typename F>
796
- class Impl : public ActionInterface<F> {
797
- public:
798
- typedef typename internal::Function<F>::Result Result;
799
- typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple;
800
-
801
- explicit Impl(const A& action) : action_(action) {}
802
-
803
- virtual void Perform(const ArgumentTuple& args) {
804
- // Performs the action and ignores its result.
805
- action_.Perform(args);
806
- }
807
-
808
- private:
809
- // Type OriginalFunction is the same as F except that its return
810
- // type is IgnoredValue.
811
- typedef typename internal::Function<F>::MakeResultIgnoredValue
812
- OriginalFunction;
813
-
814
- const Action<OriginalFunction> action_;
815
-
816
- GTEST_DISALLOW_ASSIGN_(Impl);
817
- };
818
-
819
- const A action_;
820
-
821
- GTEST_DISALLOW_ASSIGN_(IgnoreResultAction);
822
- };
823
-
824
- // A ReferenceWrapper<T> object represents a reference to type T,
825
- // which can be either const or not. It can be explicitly converted
826
- // from, and implicitly converted to, a T&. Unlike a reference,
827
- // ReferenceWrapper<T> can be copied and can survive template type
828
- // inference. This is used to support by-reference arguments in the
829
- // InvokeArgument<N>(...) action. The idea was from "reference
830
- // wrappers" in tr1, which we don't have in our source tree yet.
831
- template <typename T>
832
- class ReferenceWrapper {
833
- public:
834
- // Constructs a ReferenceWrapper<T> object from a T&.
835
- explicit ReferenceWrapper(T& l_value) : pointer_(&l_value) {} // NOLINT
836
-
837
- // Allows a ReferenceWrapper<T> object to be implicitly converted to
838
- // a T&.
839
- operator T&() const { return *pointer_; }
840
- private:
841
- T* pointer_;
842
- };
843
-
844
- // Allows the expression ByRef(x) to be printed as a reference to x.
845
- template <typename T>
846
- void PrintTo(const ReferenceWrapper<T>& ref, ::std::ostream* os) {
847
- T& value = ref;
848
- UniversalPrinter<T&>::Print(value, os);
849
- }
850
-
851
- // Does two actions sequentially. Used for implementing the DoAll(a1,
852
- // a2, ...) action.
853
- template <typename Action1, typename Action2>
854
- class DoBothAction {
855
- public:
856
- DoBothAction(Action1 action1, Action2 action2)
857
- : action1_(action1), action2_(action2) {}
858
-
859
- // This template type conversion operator allows DoAll(a1, ..., a_n)
860
- // to be used in ANY function of compatible type.
861
- template <typename F>
862
- operator Action<F>() const {
863
- return Action<F>(new Impl<F>(action1_, action2_));
864
- }
865
-
866
- private:
867
- // Implements the DoAll(...) action for a particular function type F.
868
- template <typename F>
869
- class Impl : public ActionInterface<F> {
870
- public:
871
- typedef typename Function<F>::Result Result;
872
- typedef typename Function<F>::ArgumentTuple ArgumentTuple;
873
- typedef typename Function<F>::MakeResultVoid VoidResult;
874
-
875
- Impl(const Action<VoidResult>& action1, const Action<F>& action2)
876
- : action1_(action1), action2_(action2) {}
877
-
878
- virtual Result Perform(const ArgumentTuple& args) {
879
- action1_.Perform(args);
880
- return action2_.Perform(args);
881
- }
882
-
883
- private:
884
- const Action<VoidResult> action1_;
885
- const Action<F> action2_;
886
-
887
- GTEST_DISALLOW_ASSIGN_(Impl);
888
- };
889
-
890
- Action1 action1_;
891
- Action2 action2_;
892
-
893
- GTEST_DISALLOW_ASSIGN_(DoBothAction);
894
- };
895
-
896
- } // namespace internal
897
-
898
- // An Unused object can be implicitly constructed from ANY value.
899
- // This is handy when defining actions that ignore some or all of the
900
- // mock function arguments. For example, given
901
- //
902
- // MOCK_METHOD3(Foo, double(const string& label, double x, double y));
903
- // MOCK_METHOD3(Bar, double(int index, double x, double y));
904
- //
905
- // instead of
906
- //
907
- // double DistanceToOriginWithLabel(const string& label, double x, double y) {
908
- // return sqrt(x*x + y*y);
909
- // }
910
- // double DistanceToOriginWithIndex(int index, double x, double y) {
911
- // return sqrt(x*x + y*y);
912
- // }
913
- // ...
914
- // EXEPCT_CALL(mock, Foo("abc", _, _))
915
- // .WillOnce(Invoke(DistanceToOriginWithLabel));
916
- // EXEPCT_CALL(mock, Bar(5, _, _))
917
- // .WillOnce(Invoke(DistanceToOriginWithIndex));
918
- //
919
- // you could write
920
- //
921
- // // We can declare any uninteresting argument as Unused.
922
- // double DistanceToOrigin(Unused, double x, double y) {
923
- // return sqrt(x*x + y*y);
924
- // }
925
- // ...
926
- // EXEPCT_CALL(mock, Foo("abc", _, _)).WillOnce(Invoke(DistanceToOrigin));
927
- // EXEPCT_CALL(mock, Bar(5, _, _)).WillOnce(Invoke(DistanceToOrigin));
928
- typedef internal::IgnoredValue Unused;
929
-
930
- // This constructor allows us to turn an Action<From> object into an
931
- // Action<To>, as long as To's arguments can be implicitly converted
932
- // to From's and From's return type cann be implicitly converted to
933
- // To's.
934
- template <typename To>
935
- template <typename From>
936
- Action<To>::Action(const Action<From>& from)
937
- : impl_(new internal::ActionAdaptor<To, From>(from)) {}
938
-
939
- // Creates an action that returns 'value'. 'value' is passed by value
940
- // instead of const reference - otherwise Return("string literal")
941
- // will trigger a compiler error about using array as initializer.
942
- template <typename R>
943
- internal::ReturnAction<R> Return(R value) {
944
- return internal::ReturnAction<R>(value);
945
- }
946
-
947
- // Creates an action that returns NULL.
948
- inline PolymorphicAction<internal::ReturnNullAction> ReturnNull() {
949
- return MakePolymorphicAction(internal::ReturnNullAction());
950
- }
951
-
952
- // Creates an action that returns from a void function.
953
- inline PolymorphicAction<internal::ReturnVoidAction> Return() {
954
- return MakePolymorphicAction(internal::ReturnVoidAction());
955
- }
956
-
957
- // Creates an action that returns the reference to a variable.
958
- template <typename R>
959
- inline internal::ReturnRefAction<R> ReturnRef(R& x) { // NOLINT
960
- return internal::ReturnRefAction<R>(x);
961
- }
962
-
963
- // Creates an action that returns the reference to a copy of the
964
- // argument. The copy is created when the action is constructed and
965
- // lives as long as the action.
966
- template <typename R>
967
- inline internal::ReturnRefOfCopyAction<R> ReturnRefOfCopy(const R& x) {
968
- return internal::ReturnRefOfCopyAction<R>(x);
969
- }
970
-
971
- // Creates an action that does the default action for the give mock function.
972
- inline internal::DoDefaultAction DoDefault() {
973
- return internal::DoDefaultAction();
974
- }
975
-
976
- // Creates an action that sets the variable pointed by the N-th
977
- // (0-based) function argument to 'value'.
978
- template <size_t N, typename T>
979
- PolymorphicAction<
980
- internal::SetArgumentPointeeAction<
981
- N, T, internal::IsAProtocolMessage<T>::value> >
982
- SetArgPointee(const T& x) {
983
- return MakePolymorphicAction(internal::SetArgumentPointeeAction<
984
- N, T, internal::IsAProtocolMessage<T>::value>(x));
985
- }
986
-
987
- #if !((GTEST_GCC_VER_ && GTEST_GCC_VER_ < 40000) || GTEST_OS_SYMBIAN)
988
- // This overload allows SetArgPointee() to accept a string literal.
989
- // GCC prior to the version 4.0 and Symbian C++ compiler cannot distinguish
990
- // this overload from the templated version and emit a compile error.
991
- template <size_t N>
992
- PolymorphicAction<
993
- internal::SetArgumentPointeeAction<N, const char*, false> >
994
- SetArgPointee(const char* p) {
995
- return MakePolymorphicAction(internal::SetArgumentPointeeAction<
996
- N, const char*, false>(p));
997
- }
998
-
999
- template <size_t N>
1000
- PolymorphicAction<
1001
- internal::SetArgumentPointeeAction<N, const wchar_t*, false> >
1002
- SetArgPointee(const wchar_t* p) {
1003
- return MakePolymorphicAction(internal::SetArgumentPointeeAction<
1004
- N, const wchar_t*, false>(p));
1005
- }
1006
- #endif
1007
-
1008
- // The following version is DEPRECATED.
1009
- template <size_t N, typename T>
1010
- PolymorphicAction<
1011
- internal::SetArgumentPointeeAction<
1012
- N, T, internal::IsAProtocolMessage<T>::value> >
1013
- SetArgumentPointee(const T& x) {
1014
- return MakePolymorphicAction(internal::SetArgumentPointeeAction<
1015
- N, T, internal::IsAProtocolMessage<T>::value>(x));
1016
- }
1017
-
1018
- // Creates an action that sets a pointer referent to a given value.
1019
- template <typename T1, typename T2>
1020
- PolymorphicAction<internal::AssignAction<T1, T2> > Assign(T1* ptr, T2 val) {
1021
- return MakePolymorphicAction(internal::AssignAction<T1, T2>(ptr, val));
1022
- }
1023
-
1024
- #if !GTEST_OS_WINDOWS_MOBILE
1025
-
1026
- // Creates an action that sets errno and returns the appropriate error.
1027
- template <typename T>
1028
- PolymorphicAction<internal::SetErrnoAndReturnAction<T> >
1029
- SetErrnoAndReturn(int errval, T result) {
1030
- return MakePolymorphicAction(
1031
- internal::SetErrnoAndReturnAction<T>(errval, result));
1032
- }
1033
-
1034
- #endif // !GTEST_OS_WINDOWS_MOBILE
1035
-
1036
- // Various overloads for InvokeWithoutArgs().
1037
-
1038
- // Creates an action that invokes 'function_impl' with no argument.
1039
- template <typename FunctionImpl>
1040
- PolymorphicAction<internal::InvokeWithoutArgsAction<FunctionImpl> >
1041
- InvokeWithoutArgs(FunctionImpl function_impl) {
1042
- return MakePolymorphicAction(
1043
- internal::InvokeWithoutArgsAction<FunctionImpl>(function_impl));
1044
- }
1045
-
1046
- // Creates an action that invokes the given method on the given object
1047
- // with no argument.
1048
- template <class Class, typename MethodPtr>
1049
- PolymorphicAction<internal::InvokeMethodWithoutArgsAction<Class, MethodPtr> >
1050
- InvokeWithoutArgs(Class* obj_ptr, MethodPtr method_ptr) {
1051
- return MakePolymorphicAction(
1052
- internal::InvokeMethodWithoutArgsAction<Class, MethodPtr>(
1053
- obj_ptr, method_ptr));
1054
- }
1055
-
1056
- // Creates an action that performs an_action and throws away its
1057
- // result. In other words, it changes the return type of an_action to
1058
- // void. an_action MUST NOT return void, or the code won't compile.
1059
- template <typename A>
1060
- inline internal::IgnoreResultAction<A> IgnoreResult(const A& an_action) {
1061
- return internal::IgnoreResultAction<A>(an_action);
1062
- }
1063
-
1064
- // Creates a reference wrapper for the given L-value. If necessary,
1065
- // you can explicitly specify the type of the reference. For example,
1066
- // suppose 'derived' is an object of type Derived, ByRef(derived)
1067
- // would wrap a Derived&. If you want to wrap a const Base& instead,
1068
- // where Base is a base class of Derived, just write:
1069
- //
1070
- // ByRef<const Base>(derived)
1071
- template <typename T>
1072
- inline internal::ReferenceWrapper<T> ByRef(T& l_value) { // NOLINT
1073
- return internal::ReferenceWrapper<T>(l_value);
1074
- }
1075
-
1076
- } // namespace testing
1077
-
1078
- #endif // GMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_