| OLD | NEW |
| (Empty) |
| 1 // Copyright 2009, 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: vladl@google.com (Vlad Losev) | |
| 31 | |
| 32 // Google Mock - a framework for writing C++ mock classes. | |
| 33 // | |
| 34 // This file tests that: | |
| 35 // a. A header file defining a mock class can be included in multiple | |
| 36 // translation units without causing a link error. | |
| 37 // b. Actions and matchers can be instantiated with identical template | |
| 38 // arguments in different translation units without causing link | |
| 39 // errors. | |
| 40 // The following constructs are currently tested: | |
| 41 // Actions: | |
| 42 // Return() | |
| 43 // Return(value) | |
| 44 // ReturnNull | |
| 45 // ReturnRef | |
| 46 // Assign | |
| 47 // SetArgumentPointee | |
| 48 // SetArrayArgument | |
| 49 // SetErrnoAndReturn | |
| 50 // Invoke(function) | |
| 51 // Invoke(object, method) | |
| 52 // InvokeWithoutArgs(function) | |
| 53 // InvokeWithoutArgs(object, method) | |
| 54 // InvokeArgument | |
| 55 // WithArg | |
| 56 // WithArgs | |
| 57 // WithoutArgs | |
| 58 // DoAll | |
| 59 // DoDefault | |
| 60 // IgnoreResult | |
| 61 // Throw | |
| 62 // ACTION()-generated | |
| 63 // ACTION_P()-generated | |
| 64 // ACTION_P2()-generated | |
| 65 // Matchers: | |
| 66 // _ | |
| 67 // A | |
| 68 // An | |
| 69 // Eq | |
| 70 // Gt, Lt, Ge, Le, Ne | |
| 71 // NotNull | |
| 72 // Ref | |
| 73 // TypedEq | |
| 74 // DoubleEq | |
| 75 // FloatEq | |
| 76 // NanSensitiveDoubleEq | |
| 77 // NanSensitiveFloatEq | |
| 78 // ContainsRegex | |
| 79 // MatchesRegex | |
| 80 // EndsWith | |
| 81 // HasSubstr | |
| 82 // StartsWith | |
| 83 // StrCaseEq | |
| 84 // StrCaseNe | |
| 85 // StrEq | |
| 86 // StrNe | |
| 87 // ElementsAre | |
| 88 // ElementsAreArray | |
| 89 // ContainerEq | |
| 90 // Field | |
| 91 // Property | |
| 92 // ResultOf(function) | |
| 93 // Pointee | |
| 94 // Truly(predicate) | |
| 95 // AllOf | |
| 96 // AnyOf | |
| 97 // Not | |
| 98 // MatcherCast<T> | |
| 99 // | |
| 100 // Please note: this test does not verify the functioning of these | |
| 101 // constructs, only that the programs using them will link successfully. | |
| 102 // | |
| 103 // Implementation note: | |
| 104 // This test requires identical definitions of Interface and Mock to be | |
| 105 // included in different translation units. We achieve this by writing | |
| 106 // them in this header and #including it in gmock_link_test.cc and | |
| 107 // gmock_link2_test.cc. Because the symbols generated by the compiler for | |
| 108 // those constructs must be identical in both translation units, | |
| 109 // definitions of Interface and Mock tests MUST be kept in the SAME | |
| 110 // NON-ANONYMOUS namespace in this file. The test fixture class LinkTest | |
| 111 // is defined as LinkTest1 in gmock_link_test.cc and as LinkTest2 in | |
| 112 // gmock_link2_test.cc to avoid producing linker errors. | |
| 113 | |
| 114 #ifndef GMOCK_TEST_GMOCK_LINK_TEST_H_ | |
| 115 #define GMOCK_TEST_GMOCK_LINK_TEST_H_ | |
| 116 | |
| 117 #include <gmock/gmock.h> | |
| 118 | |
| 119 #if !GTEST_OS_WINDOWS_MOBILE | |
| 120 #include <errno.h> | |
| 121 #endif | |
| 122 | |
| 123 #include <gmock/internal/gmock-port.h> | |
| 124 #include <gtest/gtest.h> | |
| 125 #include <iostream> | |
| 126 #include <vector> | |
| 127 | |
| 128 using testing::_; | |
| 129 using testing::A; | |
| 130 using testing::AllOf; | |
| 131 using testing::AnyOf; | |
| 132 using testing::Assign; | |
| 133 using testing::ContainerEq; | |
| 134 using testing::DoAll; | |
| 135 using testing::DoDefault; | |
| 136 using testing::DoubleEq; | |
| 137 using testing::ElementsAre; | |
| 138 using testing::ElementsAreArray; | |
| 139 using testing::EndsWith; | |
| 140 using testing::Eq; | |
| 141 using testing::Field; | |
| 142 using testing::FloatEq; | |
| 143 using testing::Ge; | |
| 144 using testing::Gt; | |
| 145 using testing::HasSubstr; | |
| 146 using testing::IgnoreResult; | |
| 147 using testing::Invoke; | |
| 148 using testing::InvokeArgument; | |
| 149 using testing::InvokeWithoutArgs; | |
| 150 using testing::IsNull; | |
| 151 using testing::Le; | |
| 152 using testing::Lt; | |
| 153 using testing::Matcher; | |
| 154 using testing::MatcherCast; | |
| 155 using testing::NanSensitiveDoubleEq; | |
| 156 using testing::NanSensitiveFloatEq; | |
| 157 using testing::Ne; | |
| 158 using testing::Not; | |
| 159 using testing::NotNull; | |
| 160 using testing::Pointee; | |
| 161 using testing::Property; | |
| 162 using testing::Ref; | |
| 163 using testing::ResultOf; | |
| 164 using testing::Return; | |
| 165 using testing::ReturnNull; | |
| 166 using testing::ReturnRef; | |
| 167 using testing::SetArgumentPointee; | |
| 168 using testing::SetArrayArgument; | |
| 169 using testing::StartsWith; | |
| 170 using testing::StrCaseEq; | |
| 171 using testing::StrCaseNe; | |
| 172 using testing::StrEq; | |
| 173 using testing::StrNe; | |
| 174 using testing::Truly; | |
| 175 using testing::TypedEq; | |
| 176 using testing::WithArg; | |
| 177 using testing::WithArgs; | |
| 178 using testing::WithoutArgs; | |
| 179 | |
| 180 #if !GTEST_OS_WINDOWS_MOBILE | |
| 181 using testing::SetErrnoAndReturn; | |
| 182 #endif | |
| 183 | |
| 184 #if GTEST_HAS_EXCEPTIONS | |
| 185 using testing::Throw; | |
| 186 #endif | |
| 187 | |
| 188 using testing::ContainsRegex; | |
| 189 using testing::MatchesRegex; | |
| 190 | |
| 191 class Interface { | |
| 192 public: | |
| 193 virtual ~Interface() {} | |
| 194 virtual void VoidFromString(char* str) = 0; | |
| 195 virtual char* StringFromString(char* str) = 0; | |
| 196 virtual int IntFromString(char* str) = 0; | |
| 197 virtual int& IntRefFromString(char* str) = 0; | |
| 198 virtual void VoidFromFunc(void(*)(char*)) = 0; | |
| 199 virtual void VoidFromIntRef(int& n) = 0; | |
| 200 virtual void VoidFromFloat(float n) = 0; | |
| 201 virtual void VoidFromDouble(double n) = 0; | |
| 202 virtual void VoidFromVector(const std::vector<int>& v) = 0; | |
| 203 }; | |
| 204 | |
| 205 class Mock: public Interface { | |
| 206 public: | |
| 207 Mock() {} | |
| 208 | |
| 209 MOCK_METHOD1(VoidFromString, void(char* str)); | |
| 210 MOCK_METHOD1(StringFromString, char*(char* str)); | |
| 211 MOCK_METHOD1(IntFromString, int(char* str)); | |
| 212 MOCK_METHOD1(IntRefFromString, int&(char* str)); | |
| 213 MOCK_METHOD1(VoidFromFunc, void(void(*func)(char* str))); | |
| 214 MOCK_METHOD1(VoidFromIntRef, void(int& n)); | |
| 215 MOCK_METHOD1(VoidFromFloat, void(float n)); | |
| 216 MOCK_METHOD1(VoidFromDouble, void(double n)); | |
| 217 MOCK_METHOD1(VoidFromVector, void(const std::vector<int>& v)); | |
| 218 | |
| 219 private: | |
| 220 GTEST_DISALLOW_COPY_AND_ASSIGN_(Mock); | |
| 221 }; | |
| 222 | |
| 223 class InvokeHelper { | |
| 224 public: | |
| 225 static void StaticVoidFromVoid() {} | |
| 226 void VoidFromVoid() {} | |
| 227 static void StaticVoidFromString(char*) {} | |
| 228 void VoidFromString(char*) {} | |
| 229 static int StaticIntFromString(char*) { return 1; } | |
| 230 static bool StaticBoolFromString(const char*) { return true; } | |
| 231 }; | |
| 232 | |
| 233 class FieldHelper { | |
| 234 public: | |
| 235 FieldHelper(int a_field) : field_(a_field) {} | |
| 236 int field() const { return field_; } | |
| 237 int field_; // NOLINT -- need external access to field_ to test | |
| 238 // the Field matcher. | |
| 239 }; | |
| 240 | |
| 241 // Tests the linkage of the ReturnVoid action. | |
| 242 TEST(LinkTest, TestReturnVoid) { | |
| 243 Mock mock; | |
| 244 | |
| 245 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Return()); | |
| 246 mock.VoidFromString(NULL); | |
| 247 } | |
| 248 | |
| 249 // Tests the linkage of the Return action. | |
| 250 TEST(LinkTest, TestReturn) { | |
| 251 Mock mock; | |
| 252 char ch = 'x'; | |
| 253 | |
| 254 EXPECT_CALL(mock, StringFromString(_)).WillOnce(Return(&ch)); | |
| 255 mock.StringFromString(NULL); | |
| 256 } | |
| 257 | |
| 258 // Tests the linkage of the ReturnNull action. | |
| 259 TEST(LinkTest, TestReturnNull) { | |
| 260 Mock mock; | |
| 261 | |
| 262 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Return()); | |
| 263 mock.VoidFromString(NULL); | |
| 264 } | |
| 265 | |
| 266 // Tests the linkage of the ReturnRef action. | |
| 267 TEST(LinkTest, TestReturnRef) { | |
| 268 Mock mock; | |
| 269 int n = 42; | |
| 270 | |
| 271 EXPECT_CALL(mock, IntRefFromString(_)).WillOnce(ReturnRef(n)); | |
| 272 mock.IntRefFromString(NULL); | |
| 273 } | |
| 274 | |
| 275 // Tests the linkage of the Assign action. | |
| 276 TEST(LinkTest, TestAssign) { | |
| 277 Mock mock; | |
| 278 char ch = 'x'; | |
| 279 | |
| 280 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Assign(&ch, 'y')); | |
| 281 mock.VoidFromString(NULL); | |
| 282 } | |
| 283 | |
| 284 // Tests the linkage of the SetArgumentPointee action. | |
| 285 TEST(LinkTest, TestSetArgumentPointee) { | |
| 286 Mock mock; | |
| 287 char ch = 'x'; | |
| 288 | |
| 289 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(SetArgumentPointee<0>('y')); | |
| 290 mock.VoidFromString(&ch); | |
| 291 } | |
| 292 | |
| 293 // Tests the linkage of the SetArrayArgument action. | |
| 294 TEST(LinkTest, TestSetArrayArgument) { | |
| 295 Mock mock; | |
| 296 char ch = 'x'; | |
| 297 char ch2 = 'y'; | |
| 298 | |
| 299 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(SetArrayArgument<0>(&ch2, | |
| 300 &ch2 + 1)); | |
| 301 mock.VoidFromString(&ch); | |
| 302 } | |
| 303 | |
| 304 #if !GTEST_OS_WINDOWS_MOBILE | |
| 305 | |
| 306 // Tests the linkage of the SetErrnoAndReturn action. | |
| 307 TEST(LinkTest, TestSetErrnoAndReturn) { | |
| 308 Mock mock; | |
| 309 | |
| 310 int saved_errno = errno; | |
| 311 EXPECT_CALL(mock, IntFromString(_)).WillOnce(SetErrnoAndReturn(1, -1)); | |
| 312 mock.IntFromString(NULL); | |
| 313 errno = saved_errno; | |
| 314 } | |
| 315 | |
| 316 #endif // !GTEST_OS_WINDOWS_MOBILE | |
| 317 | |
| 318 // Tests the linkage of the Invoke(function) and Invoke(object, method) actions. | |
| 319 TEST(LinkTest, TestInvoke) { | |
| 320 Mock mock; | |
| 321 InvokeHelper test_invoke_helper; | |
| 322 | |
| 323 EXPECT_CALL(mock, VoidFromString(_)) | |
| 324 .WillOnce(Invoke(&InvokeHelper::StaticVoidFromString)) | |
| 325 .WillOnce(Invoke(&test_invoke_helper, &InvokeHelper::VoidFromString)); | |
| 326 mock.VoidFromString(NULL); | |
| 327 mock.VoidFromString(NULL); | |
| 328 } | |
| 329 | |
| 330 // Tests the linkage of the InvokeWithoutArgs action. | |
| 331 TEST(LinkTest, TestInvokeWithoutArgs) { | |
| 332 Mock mock; | |
| 333 InvokeHelper test_invoke_helper; | |
| 334 | |
| 335 EXPECT_CALL(mock, VoidFromString(_)) | |
| 336 .WillOnce(InvokeWithoutArgs(&InvokeHelper::StaticVoidFromVoid)) | |
| 337 .WillOnce(InvokeWithoutArgs(&test_invoke_helper, | |
| 338 &InvokeHelper::VoidFromVoid)); | |
| 339 mock.VoidFromString(NULL); | |
| 340 mock.VoidFromString(NULL); | |
| 341 } | |
| 342 | |
| 343 // Tests the linkage of the InvokeArgument action. | |
| 344 TEST(LinkTest, TestInvokeArgument) { | |
| 345 Mock mock; | |
| 346 char ch = 'x'; | |
| 347 | |
| 348 EXPECT_CALL(mock, VoidFromFunc(_)).WillOnce(InvokeArgument<0>(&ch)); | |
| 349 mock.VoidFromFunc(InvokeHelper::StaticVoidFromString); | |
| 350 } | |
| 351 | |
| 352 // Tests the linkage of the WithArg action. | |
| 353 TEST(LinkTest, TestWithArg) { | |
| 354 Mock mock; | |
| 355 | |
| 356 EXPECT_CALL(mock, VoidFromString(_)) | |
| 357 .WillOnce(WithArg<0>(Invoke(&InvokeHelper::StaticVoidFromString))); | |
| 358 mock.VoidFromString(NULL); | |
| 359 } | |
| 360 | |
| 361 // Tests the linkage of the WithArgs action. | |
| 362 TEST(LinkTest, TestWithArgs) { | |
| 363 Mock mock; | |
| 364 | |
| 365 EXPECT_CALL(mock, VoidFromString(_)) | |
| 366 .WillOnce(WithArgs<0>(Invoke(&InvokeHelper::StaticVoidFromString))); | |
| 367 mock.VoidFromString(NULL); | |
| 368 } | |
| 369 | |
| 370 // Tests the linkage of the WithoutArgs action. | |
| 371 TEST(LinkTest, TestWithoutArgs) { | |
| 372 Mock mock; | |
| 373 | |
| 374 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(WithoutArgs(Return())); | |
| 375 mock.VoidFromString(NULL); | |
| 376 } | |
| 377 | |
| 378 // Tests the linkage of the DoAll action. | |
| 379 TEST(LinkTest, TestDoAll) { | |
| 380 Mock mock; | |
| 381 char ch = 'x'; | |
| 382 | |
| 383 EXPECT_CALL(mock, VoidFromString(_)) | |
| 384 .WillOnce(DoAll(SetArgumentPointee<0>('y'), Return())); | |
| 385 mock.VoidFromString(&ch); | |
| 386 } | |
| 387 | |
| 388 // Tests the linkage of the DoDefault action. | |
| 389 TEST(LinkTest, TestDoDefault) { | |
| 390 Mock mock; | |
| 391 char ch = 'x'; | |
| 392 | |
| 393 ON_CALL(mock, VoidFromString(_)).WillByDefault(Return()); | |
| 394 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(DoDefault()); | |
| 395 mock.VoidFromString(&ch); | |
| 396 } | |
| 397 | |
| 398 // Tests the linkage of the IgnoreResult action. | |
| 399 TEST(LinkTest, TestIgnoreResult) { | |
| 400 Mock mock; | |
| 401 | |
| 402 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(IgnoreResult(Return(42))); | |
| 403 mock.VoidFromString(NULL); | |
| 404 } | |
| 405 | |
| 406 #if GTEST_HAS_EXCEPTIONS | |
| 407 // Tests the linkage of the Throw action. | |
| 408 TEST(LinkTest, TestThrow) { | |
| 409 Mock mock; | |
| 410 | |
| 411 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Throw(42)); | |
| 412 EXPECT_THROW(mock.VoidFromString(NULL), int); | |
| 413 } | |
| 414 #endif // GTEST_HAS_EXCEPTIONS | |
| 415 | |
| 416 // The ACTION*() macros trigger warning C4100 (unreferenced formal | |
| 417 // parameter) in MSVC with -W4. Unfortunately they cannot be fixed in | |
| 418 // the macro definition, as the warnings are generated when the macro | |
| 419 // is expanded and macro expansion cannot contain #pragma. Therefore | |
| 420 // we suppress them here. | |
| 421 #ifdef _MSC_VER | |
| 422 #pragma warning(push) | |
| 423 #pragma warning(disable:4100) | |
| 424 #endif | |
| 425 | |
| 426 // Tests the linkage of actions created using ACTION macro. | |
| 427 namespace { | |
| 428 ACTION(Return1) { return 1; } | |
| 429 } | |
| 430 | |
| 431 TEST(LinkTest, TestActionMacro) { | |
| 432 Mock mock; | |
| 433 | |
| 434 EXPECT_CALL(mock, IntFromString(_)).WillOnce(Return1()); | |
| 435 mock.IntFromString(NULL); | |
| 436 } | |
| 437 | |
| 438 // Tests the linkage of actions created using ACTION_P macro. | |
| 439 namespace { | |
| 440 ACTION_P(ReturnArgument, ret_value) { return ret_value; } | |
| 441 } | |
| 442 | |
| 443 TEST(LinkTest, TestActionPMacro) { | |
| 444 Mock mock; | |
| 445 | |
| 446 EXPECT_CALL(mock, IntFromString(_)).WillOnce(ReturnArgument(42)); | |
| 447 mock.IntFromString(NULL); | |
| 448 } | |
| 449 | |
| 450 // Tests the linkage of actions created using ACTION_P2 macro. | |
| 451 namespace { | |
| 452 ACTION_P2(ReturnEqualsEitherOf, first, second) { | |
| 453 return arg0 == first || arg0 == second; | |
| 454 } | |
| 455 } | |
| 456 | |
| 457 #ifdef _MSC_VER | |
| 458 #pragma warning(pop) | |
| 459 #endif | |
| 460 | |
| 461 TEST(LinkTest, TestActionP2Macro) { | |
| 462 Mock mock; | |
| 463 char ch = 'x'; | |
| 464 | |
| 465 EXPECT_CALL(mock, IntFromString(_)) | |
| 466 .WillOnce(ReturnEqualsEitherOf("one", "two")); | |
| 467 mock.IntFromString(&ch); | |
| 468 } | |
| 469 | |
| 470 // Tests the linkage of the "_" matcher. | |
| 471 TEST(LinkTest, TestMatcherAnything) { | |
| 472 Mock mock; | |
| 473 | |
| 474 ON_CALL(mock, VoidFromString(_)).WillByDefault(Return()); | |
| 475 } | |
| 476 | |
| 477 // Tests the linkage of the A matcher. | |
| 478 TEST(LinkTest, TestMatcherA) { | |
| 479 Mock mock; | |
| 480 | |
| 481 ON_CALL(mock, VoidFromString(A<char*>())).WillByDefault(Return()); | |
| 482 } | |
| 483 | |
| 484 // Tests the linkage of the Eq and the "bare value" matcher. | |
| 485 TEST(LinkTest, TestMatchersEq) { | |
| 486 Mock mock; | |
| 487 const char* p = "x"; | |
| 488 | |
| 489 ON_CALL(mock, VoidFromString(Eq(p))).WillByDefault(Return()); | |
| 490 ON_CALL(mock, VoidFromString(const_cast<char*>("y"))) | |
| 491 .WillByDefault(Return()); | |
| 492 } | |
| 493 | |
| 494 // Tests the linkage of the Lt, Gt, Le, Ge, and Ne matchers. | |
| 495 TEST(LinkTest, TestMatchersRelations) { | |
| 496 Mock mock; | |
| 497 | |
| 498 ON_CALL(mock, VoidFromFloat(Lt(1.0f))).WillByDefault(Return()); | |
| 499 ON_CALL(mock, VoidFromFloat(Gt(1.0f))).WillByDefault(Return()); | |
| 500 ON_CALL(mock, VoidFromFloat(Le(1.0f))).WillByDefault(Return()); | |
| 501 ON_CALL(mock, VoidFromFloat(Ge(1.0f))).WillByDefault(Return()); | |
| 502 ON_CALL(mock, VoidFromFloat(Ne(1.0f))).WillByDefault(Return()); | |
| 503 } | |
| 504 | |
| 505 // Tests the linkage of the NotNull matcher. | |
| 506 TEST(LinkTest, TestMatcherNotNull) { | |
| 507 Mock mock; | |
| 508 | |
| 509 ON_CALL(mock, VoidFromString(NotNull())).WillByDefault(Return()); | |
| 510 } | |
| 511 | |
| 512 // Tests the linkage of the IsNull matcher. | |
| 513 TEST(LinkTest, TestMatcherIsNull) { | |
| 514 Mock mock; | |
| 515 | |
| 516 ON_CALL(mock, VoidFromString(IsNull())).WillByDefault(Return()); | |
| 517 } | |
| 518 | |
| 519 // Tests the linkage of the Ref matcher. | |
| 520 TEST(LinkTest, TestMatcherRef) { | |
| 521 Mock mock; | |
| 522 int a = 0; | |
| 523 | |
| 524 ON_CALL(mock, VoidFromIntRef(Ref(a))).WillByDefault(Return()); | |
| 525 } | |
| 526 | |
| 527 // Tests the linkage of the TypedEq matcher. | |
| 528 TEST(LinkTest, TestMatcherTypedEq) { | |
| 529 Mock mock; | |
| 530 long a = 0; | |
| 531 | |
| 532 ON_CALL(mock, VoidFromIntRef(TypedEq<int&>(a))).WillByDefault(Return()); | |
| 533 } | |
| 534 | |
| 535 // Tests the linkage of the FloatEq, DoubleEq, NanSensitiveFloatEq and | |
| 536 // NanSensitiveDoubleEq matchers. | |
| 537 TEST(LinkTest, TestMatchersFloatingPoint) { | |
| 538 Mock mock; | |
| 539 float a = 0; | |
| 540 | |
| 541 ON_CALL(mock, VoidFromFloat(FloatEq(a))).WillByDefault(Return()); | |
| 542 ON_CALL(mock, VoidFromDouble(DoubleEq(a))).WillByDefault(Return()); | |
| 543 ON_CALL(mock, VoidFromFloat(NanSensitiveFloatEq(a))).WillByDefault(Return()); | |
| 544 ON_CALL(mock, VoidFromDouble(NanSensitiveDoubleEq(a))) | |
| 545 .WillByDefault(Return()); | |
| 546 } | |
| 547 | |
| 548 // Tests the linkage of the ContainsRegex matcher. | |
| 549 TEST(LinkTest, TestMatcherContainsRegex) { | |
| 550 Mock mock; | |
| 551 | |
| 552 ON_CALL(mock, VoidFromString(ContainsRegex(".*"))).WillByDefault(Return()); | |
| 553 } | |
| 554 | |
| 555 // Tests the linkage of the MatchesRegex matcher. | |
| 556 TEST(LinkTest, TestMatcherMatchesRegex) { | |
| 557 Mock mock; | |
| 558 | |
| 559 ON_CALL(mock, VoidFromString(MatchesRegex(".*"))).WillByDefault(Return()); | |
| 560 } | |
| 561 | |
| 562 // Tests the linkage of the StartsWith, EndsWith, and HasSubstr matchers. | |
| 563 TEST(LinkTest, TestMatchersSubstrings) { | |
| 564 Mock mock; | |
| 565 | |
| 566 ON_CALL(mock, VoidFromString(StartsWith("a"))).WillByDefault(Return()); | |
| 567 ON_CALL(mock, VoidFromString(EndsWith("c"))).WillByDefault(Return()); | |
| 568 ON_CALL(mock, VoidFromString(HasSubstr("b"))).WillByDefault(Return()); | |
| 569 } | |
| 570 | |
| 571 // Tests the linkage of the StrEq, StrNe, StrCaseEq, and StrCaseNe matchers. | |
| 572 TEST(LinkTest, TestMatchersStringEquality) { | |
| 573 Mock mock; | |
| 574 ON_CALL(mock, VoidFromString(StrEq("a"))).WillByDefault(Return()); | |
| 575 ON_CALL(mock, VoidFromString(StrNe("a"))).WillByDefault(Return()); | |
| 576 ON_CALL(mock, VoidFromString(StrCaseEq("a"))).WillByDefault(Return()); | |
| 577 ON_CALL(mock, VoidFromString(StrCaseNe("a"))).WillByDefault(Return()); | |
| 578 } | |
| 579 | |
| 580 // Tests the linkage of the ElementsAre matcher. | |
| 581 TEST(LinkTest, TestMatcherElementsAre) { | |
| 582 Mock mock; | |
| 583 | |
| 584 ON_CALL(mock, VoidFromVector(ElementsAre('a', _))).WillByDefault(Return()); | |
| 585 } | |
| 586 | |
| 587 // Tests the linkage of the ElementsAreArray matcher. | |
| 588 TEST(LinkTest, TestMatcherElementsAreArray) { | |
| 589 Mock mock; | |
| 590 char arr[] = { 'a', 'b' }; | |
| 591 | |
| 592 ON_CALL(mock, VoidFromVector(ElementsAreArray(arr))).WillByDefault(Return()); | |
| 593 } | |
| 594 | |
| 595 // Tests the linkage of the ContainerEq matcher. | |
| 596 TEST(LinkTest, TestMatcherContainerEq) { | |
| 597 Mock mock; | |
| 598 std::vector<int> v; | |
| 599 | |
| 600 ON_CALL(mock, VoidFromVector(ContainerEq(v))).WillByDefault(Return()); | |
| 601 } | |
| 602 | |
| 603 // Tests the linkage of the Field matcher. | |
| 604 TEST(LinkTest, TestMatcherField) { | |
| 605 FieldHelper helper(0); | |
| 606 | |
| 607 Matcher<const FieldHelper&> m = Field(&FieldHelper::field_, Eq(0)); | |
| 608 EXPECT_TRUE(m.Matches(helper)); | |
| 609 | |
| 610 Matcher<const FieldHelper*> m2 = Field(&FieldHelper::field_, Eq(0)); | |
| 611 EXPECT_TRUE(m2.Matches(&helper)); | |
| 612 } | |
| 613 | |
| 614 // Tests the linkage of the Property matcher. | |
| 615 TEST(LinkTest, TestMatcherProperty) { | |
| 616 FieldHelper helper(0); | |
| 617 | |
| 618 Matcher<const FieldHelper&> m = Property(&FieldHelper::field, Eq(0)); | |
| 619 EXPECT_TRUE(m.Matches(helper)); | |
| 620 | |
| 621 Matcher<const FieldHelper*> m2 = Property(&FieldHelper::field, Eq(0)); | |
| 622 EXPECT_TRUE(m2.Matches(&helper)); | |
| 623 } | |
| 624 | |
| 625 // Tests the linkage of the ResultOf matcher. | |
| 626 TEST(LinkTest, TestMatcherResultOf) { | |
| 627 Matcher<char*> m = ResultOf(&InvokeHelper::StaticIntFromString, Eq(1)); | |
| 628 EXPECT_TRUE(m.Matches(NULL)); | |
| 629 } | |
| 630 | |
| 631 // Tests the linkage of the ResultOf matcher. | |
| 632 TEST(LinkTest, TestMatcherPointee) { | |
| 633 int n = 1; | |
| 634 | |
| 635 Matcher<int*> m = Pointee(Eq(1)); | |
| 636 EXPECT_TRUE(m.Matches(&n)); | |
| 637 } | |
| 638 | |
| 639 // Tests the linkage of the Truly matcher. | |
| 640 TEST(LinkTest, TestMatcherTruly) { | |
| 641 Matcher<const char*> m = Truly(&InvokeHelper::StaticBoolFromString); | |
| 642 EXPECT_TRUE(m.Matches(NULL)); | |
| 643 } | |
| 644 | |
| 645 // Tests the linkage of the AllOf matcher. | |
| 646 TEST(LinkTest, TestMatcherAllOf) { | |
| 647 Matcher<int> m = AllOf(_, Eq(1)); | |
| 648 EXPECT_TRUE(m.Matches(1)); | |
| 649 } | |
| 650 | |
| 651 // Tests the linkage of the AnyOf matcher. | |
| 652 TEST(LinkTest, TestMatcherAnyOf) { | |
| 653 Matcher<int> m = AnyOf(_, Eq(1)); | |
| 654 EXPECT_TRUE(m.Matches(1)); | |
| 655 } | |
| 656 | |
| 657 // Tests the linkage of the Not matcher. | |
| 658 TEST(LinkTest, TestMatcherNot) { | |
| 659 Matcher<int> m = Not(_); | |
| 660 EXPECT_FALSE(m.Matches(1)); | |
| 661 } | |
| 662 | |
| 663 // Tests the linkage of the MatcherCast<T>() function. | |
| 664 TEST(LinkTest, TestMatcherCast) { | |
| 665 Matcher<const char*> m = MatcherCast<const char*>(_); | |
| 666 EXPECT_TRUE(m.Matches(NULL)); | |
| 667 } | |
| 668 | |
| 669 #endif // GMOCK_TEST_GMOCK_LINK_TEST_H_ | |
| OLD | NEW |