File indexing completed on 2025-08-06 08:19:56
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036 #include "gmock/internal/gmock-internal-utils.h"
0037 #include <stdlib.h>
0038 #include <map>
0039 #include <memory>
0040 #include <string>
0041 #include <sstream>
0042 #include <vector>
0043 #include "gmock/gmock.h"
0044 #include "gmock/internal/gmock-port.h"
0045 #include "gtest/gtest.h"
0046 #include "gtest/gtest-spi.h"
0047
0048
0049
0050
0051
0052
0053 #define GTEST_IMPLEMENTATION_ 1
0054 #include "src/gtest-internal-inl.h"
0055 #undef GTEST_IMPLEMENTATION_
0056
0057 #if GTEST_OS_CYGWIN
0058 # include <sys/types.h> // For ssize_t. NOLINT
0059 #endif
0060
0061 class ProtocolMessage;
0062
0063 namespace proto2 {
0064 class Message;
0065 }
0066
0067 namespace testing {
0068 namespace internal {
0069
0070 namespace {
0071
0072 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameContainsNoWord) {
0073 EXPECT_EQ("", ConvertIdentifierNameToWords(""));
0074 EXPECT_EQ("", ConvertIdentifierNameToWords("_"));
0075 EXPECT_EQ("", ConvertIdentifierNameToWords("__"));
0076 }
0077
0078 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameContainsDigits) {
0079 EXPECT_EQ("1", ConvertIdentifierNameToWords("_1"));
0080 EXPECT_EQ("2", ConvertIdentifierNameToWords("2_"));
0081 EXPECT_EQ("34", ConvertIdentifierNameToWords("_34_"));
0082 EXPECT_EQ("34 56", ConvertIdentifierNameToWords("_34_56"));
0083 }
0084
0085 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameContainsCamelCaseWords) {
0086 EXPECT_EQ("a big word", ConvertIdentifierNameToWords("ABigWord"));
0087 EXPECT_EQ("foo bar", ConvertIdentifierNameToWords("FooBar"));
0088 EXPECT_EQ("foo", ConvertIdentifierNameToWords("Foo_"));
0089 EXPECT_EQ("foo bar", ConvertIdentifierNameToWords("_Foo_Bar_"));
0090 EXPECT_EQ("foo and bar", ConvertIdentifierNameToWords("_Foo__And_Bar"));
0091 }
0092
0093 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameContains_SeparatedWords) {
0094 EXPECT_EQ("foo bar", ConvertIdentifierNameToWords("foo_bar"));
0095 EXPECT_EQ("foo", ConvertIdentifierNameToWords("_foo_"));
0096 EXPECT_EQ("foo bar", ConvertIdentifierNameToWords("_foo_bar_"));
0097 EXPECT_EQ("foo and bar", ConvertIdentifierNameToWords("_foo__and_bar"));
0098 }
0099
0100 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameIsMixture) {
0101 EXPECT_EQ("foo bar 123", ConvertIdentifierNameToWords("Foo_bar123"));
0102 EXPECT_EQ("chapter 11 section 1",
0103 ConvertIdentifierNameToWords("_Chapter11Section_1_"));
0104 }
0105
0106 TEST(PointeeOfTest, WorksForSmartPointers) {
0107 CompileAssertTypesEqual<const char,
0108 PointeeOf<internal::linked_ptr<const char> >::type>();
0109 #if GTEST_HAS_STD_UNIQUE_PTR_
0110 CompileAssertTypesEqual<int, PointeeOf<std::unique_ptr<int> >::type>();
0111 #endif
0112 #if GTEST_HAS_STD_SHARED_PTR_
0113 CompileAssertTypesEqual<std::string,
0114 PointeeOf<std::shared_ptr<std::string> >::type>();
0115 #endif
0116 }
0117
0118 TEST(PointeeOfTest, WorksForRawPointers) {
0119 CompileAssertTypesEqual<int, PointeeOf<int*>::type>();
0120 CompileAssertTypesEqual<const char, PointeeOf<const char*>::type>();
0121 CompileAssertTypesEqual<void, PointeeOf<void*>::type>();
0122 }
0123
0124 TEST(GetRawPointerTest, WorksForSmartPointers) {
0125 #if GTEST_HAS_STD_UNIQUE_PTR_
0126 const char* const raw_p1 = new const char('a');
0127 const std::unique_ptr<const char> p1(raw_p1);
0128 EXPECT_EQ(raw_p1, GetRawPointer(p1));
0129 #endif
0130 #if GTEST_HAS_STD_SHARED_PTR_
0131 double* const raw_p2 = new double(2.5);
0132 const std::shared_ptr<double> p2(raw_p2);
0133 EXPECT_EQ(raw_p2, GetRawPointer(p2));
0134 #endif
0135
0136 const char* const raw_p4 = new const char('a');
0137 const internal::linked_ptr<const char> p4(raw_p4);
0138 EXPECT_EQ(raw_p4, GetRawPointer(p4));
0139 }
0140
0141 TEST(GetRawPointerTest, WorksForRawPointers) {
0142 int* p = NULL;
0143
0144 EXPECT_TRUE(NULL == GetRawPointer(p));
0145 int n = 1;
0146 EXPECT_EQ(&n, GetRawPointer(&n));
0147 }
0148
0149
0150
0151 class Base {};
0152 class Derived : public Base {};
0153
0154 TEST(KindOfTest, Bool) {
0155 EXPECT_EQ(kBool, GMOCK_KIND_OF_(bool));
0156 }
0157
0158 TEST(KindOfTest, Integer) {
0159 EXPECT_EQ(kInteger, GMOCK_KIND_OF_(char));
0160 EXPECT_EQ(kInteger, GMOCK_KIND_OF_(signed char));
0161 EXPECT_EQ(kInteger, GMOCK_KIND_OF_(unsigned char));
0162 EXPECT_EQ(kInteger, GMOCK_KIND_OF_(short));
0163 EXPECT_EQ(kInteger, GMOCK_KIND_OF_(unsigned short));
0164 EXPECT_EQ(kInteger, GMOCK_KIND_OF_(int));
0165 EXPECT_EQ(kInteger, GMOCK_KIND_OF_(unsigned int));
0166 EXPECT_EQ(kInteger, GMOCK_KIND_OF_(long));
0167 EXPECT_EQ(kInteger, GMOCK_KIND_OF_(unsigned long));
0168 EXPECT_EQ(kInteger, GMOCK_KIND_OF_(wchar_t));
0169 EXPECT_EQ(kInteger, GMOCK_KIND_OF_(Int64));
0170 EXPECT_EQ(kInteger, GMOCK_KIND_OF_(UInt64));
0171 EXPECT_EQ(kInteger, GMOCK_KIND_OF_(size_t));
0172 #if GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_CYGWIN
0173
0174 EXPECT_EQ(kInteger, GMOCK_KIND_OF_(ssize_t));
0175 #endif
0176 }
0177
0178 TEST(KindOfTest, FloatingPoint) {
0179 EXPECT_EQ(kFloatingPoint, GMOCK_KIND_OF_(float));
0180 EXPECT_EQ(kFloatingPoint, GMOCK_KIND_OF_(double));
0181 EXPECT_EQ(kFloatingPoint, GMOCK_KIND_OF_(long double));
0182 }
0183
0184 TEST(KindOfTest, Other) {
0185 EXPECT_EQ(kOther, GMOCK_KIND_OF_(void*));
0186 EXPECT_EQ(kOther, GMOCK_KIND_OF_(char**));
0187 EXPECT_EQ(kOther, GMOCK_KIND_OF_(Base));
0188 }
0189
0190
0191
0192 TEST(LosslessArithmeticConvertibleTest, BoolToBool) {
0193 EXPECT_TRUE((LosslessArithmeticConvertible<bool, bool>::value));
0194 }
0195
0196 TEST(LosslessArithmeticConvertibleTest, BoolToInteger) {
0197 EXPECT_TRUE((LosslessArithmeticConvertible<bool, char>::value));
0198 EXPECT_TRUE((LosslessArithmeticConvertible<bool, int>::value));
0199 EXPECT_TRUE(
0200 (LosslessArithmeticConvertible<bool, unsigned long>::value));
0201 }
0202
0203 TEST(LosslessArithmeticConvertibleTest, BoolToFloatingPoint) {
0204 EXPECT_TRUE((LosslessArithmeticConvertible<bool, float>::value));
0205 EXPECT_TRUE((LosslessArithmeticConvertible<bool, double>::value));
0206 }
0207
0208 TEST(LosslessArithmeticConvertibleTest, IntegerToBool) {
0209 EXPECT_FALSE((LosslessArithmeticConvertible<unsigned char, bool>::value));
0210 EXPECT_FALSE((LosslessArithmeticConvertible<int, bool>::value));
0211 }
0212
0213 TEST(LosslessArithmeticConvertibleTest, IntegerToInteger) {
0214
0215 EXPECT_TRUE((LosslessArithmeticConvertible<unsigned char, int>::value));
0216
0217
0218 EXPECT_TRUE(
0219 (LosslessArithmeticConvertible<unsigned short, UInt64>::value));
0220
0221
0222 EXPECT_FALSE((LosslessArithmeticConvertible<short, UInt64>::value));
0223 EXPECT_FALSE((LosslessArithmeticConvertible<
0224 signed char, unsigned int>::value));
0225
0226
0227 EXPECT_TRUE((LosslessArithmeticConvertible<
0228 unsigned char, unsigned char>::value));
0229 EXPECT_TRUE((LosslessArithmeticConvertible<int, int>::value));
0230 EXPECT_TRUE((LosslessArithmeticConvertible<wchar_t, wchar_t>::value));
0231 EXPECT_TRUE((LosslessArithmeticConvertible<
0232 unsigned long, unsigned long>::value));
0233
0234
0235 EXPECT_FALSE((LosslessArithmeticConvertible<
0236 unsigned char, signed char>::value));
0237 EXPECT_FALSE((LosslessArithmeticConvertible<int, unsigned int>::value));
0238 EXPECT_FALSE((LosslessArithmeticConvertible<UInt64, Int64>::value));
0239
0240
0241 EXPECT_FALSE((LosslessArithmeticConvertible<long, char>::value));
0242 EXPECT_FALSE((LosslessArithmeticConvertible<int, signed char>::value));
0243 EXPECT_FALSE((LosslessArithmeticConvertible<Int64, unsigned int>::value));
0244 }
0245
0246 TEST(LosslessArithmeticConvertibleTest, IntegerToFloatingPoint) {
0247
0248
0249 EXPECT_FALSE((LosslessArithmeticConvertible<char, float>::value));
0250 EXPECT_FALSE((LosslessArithmeticConvertible<int, double>::value));
0251 EXPECT_FALSE((LosslessArithmeticConvertible<
0252 short, long double>::value));
0253 }
0254
0255 TEST(LosslessArithmeticConvertibleTest, FloatingPointToBool) {
0256 EXPECT_FALSE((LosslessArithmeticConvertible<float, bool>::value));
0257 EXPECT_FALSE((LosslessArithmeticConvertible<double, bool>::value));
0258 }
0259
0260 TEST(LosslessArithmeticConvertibleTest, FloatingPointToInteger) {
0261 EXPECT_FALSE((LosslessArithmeticConvertible<float, long>::value));
0262 EXPECT_FALSE((LosslessArithmeticConvertible<double, Int64>::value));
0263 EXPECT_FALSE((LosslessArithmeticConvertible<long double, int>::value));
0264 }
0265
0266 TEST(LosslessArithmeticConvertibleTest, FloatingPointToFloatingPoint) {
0267
0268 EXPECT_TRUE((LosslessArithmeticConvertible<float, double>::value));
0269 EXPECT_TRUE((LosslessArithmeticConvertible<float, long double>::value));
0270 EXPECT_TRUE((LosslessArithmeticConvertible<double, long double>::value));
0271
0272
0273 EXPECT_TRUE((LosslessArithmeticConvertible<float, float>::value));
0274 EXPECT_TRUE((LosslessArithmeticConvertible<double, double>::value));
0275
0276
0277 EXPECT_FALSE((LosslessArithmeticConvertible<double, float>::value));
0278 GTEST_INTENTIONAL_CONST_COND_PUSH_()
0279 if (sizeof(double) == sizeof(long double)) {
0280 GTEST_INTENTIONAL_CONST_COND_POP_()
0281
0282
0283 EXPECT_TRUE((LosslessArithmeticConvertible<long double, double>::value));
0284 } else {
0285 EXPECT_FALSE((LosslessArithmeticConvertible<long double, double>::value));
0286 }
0287 }
0288
0289
0290
0291 TEST(TupleMatchesTest, WorksForSize0) {
0292 tuple<> matchers;
0293 tuple<> values;
0294
0295 EXPECT_TRUE(TupleMatches(matchers, values));
0296 }
0297
0298 TEST(TupleMatchesTest, WorksForSize1) {
0299 tuple<Matcher<int> > matchers(Eq(1));
0300 tuple<int> values1(1),
0301 values2(2);
0302
0303 EXPECT_TRUE(TupleMatches(matchers, values1));
0304 EXPECT_FALSE(TupleMatches(matchers, values2));
0305 }
0306
0307 TEST(TupleMatchesTest, WorksForSize2) {
0308 tuple<Matcher<int>, Matcher<char> > matchers(Eq(1), Eq('a'));
0309 tuple<int, char> values1(1, 'a'),
0310 values2(1, 'b'),
0311 values3(2, 'a'),
0312 values4(2, 'b');
0313
0314 EXPECT_TRUE(TupleMatches(matchers, values1));
0315 EXPECT_FALSE(TupleMatches(matchers, values2));
0316 EXPECT_FALSE(TupleMatches(matchers, values3));
0317 EXPECT_FALSE(TupleMatches(matchers, values4));
0318 }
0319
0320 TEST(TupleMatchesTest, WorksForSize5) {
0321 tuple<Matcher<int>, Matcher<char>, Matcher<bool>, Matcher<long>,
0322 Matcher<string> >
0323 matchers(Eq(1), Eq('a'), Eq(true), Eq(2L), Eq("hi"));
0324 tuple<int, char, bool, long, string>
0325 values1(1, 'a', true, 2L, "hi"),
0326 values2(1, 'a', true, 2L, "hello"),
0327 values3(2, 'a', true, 2L, "hi");
0328
0329 EXPECT_TRUE(TupleMatches(matchers, values1));
0330 EXPECT_FALSE(TupleMatches(matchers, values2));
0331 EXPECT_FALSE(TupleMatches(matchers, values3));
0332 }
0333
0334
0335 TEST(AssertTest, SucceedsOnTrue) {
0336 Assert(true, __FILE__, __LINE__, "This should succeed.");
0337 Assert(true, __FILE__, __LINE__);
0338 }
0339
0340
0341 TEST(AssertTest, FailsFatallyOnFalse) {
0342 EXPECT_DEATH_IF_SUPPORTED({
0343 Assert(false, __FILE__, __LINE__, "This should fail.");
0344 }, "");
0345
0346 EXPECT_DEATH_IF_SUPPORTED({
0347 Assert(false, __FILE__, __LINE__);
0348 }, "");
0349 }
0350
0351
0352 TEST(ExpectTest, SucceedsOnTrue) {
0353 Expect(true, __FILE__, __LINE__, "This should succeed.");
0354 Expect(true, __FILE__, __LINE__);
0355 }
0356
0357
0358 TEST(ExpectTest, FailsNonfatallyOnFalse) {
0359 EXPECT_NONFATAL_FAILURE({
0360 Expect(false, __FILE__, __LINE__, "This should fail.");
0361 }, "This should fail");
0362
0363 EXPECT_NONFATAL_FAILURE({
0364 Expect(false, __FILE__, __LINE__);
0365 }, "Expectation failed");
0366 }
0367
0368
0369
0370 class LogIsVisibleTest : public ::testing::Test {
0371 protected:
0372 virtual void SetUp() {
0373 original_verbose_ = GMOCK_FLAG(verbose);
0374 }
0375
0376 virtual void TearDown() { GMOCK_FLAG(verbose) = original_verbose_; }
0377
0378 string original_verbose_;
0379 };
0380
0381 TEST_F(LogIsVisibleTest, AlwaysReturnsTrueIfVerbosityIsInfo) {
0382 GMOCK_FLAG(verbose) = kInfoVerbosity;
0383 EXPECT_TRUE(LogIsVisible(kInfo));
0384 EXPECT_TRUE(LogIsVisible(kWarning));
0385 }
0386
0387 TEST_F(LogIsVisibleTest, AlwaysReturnsFalseIfVerbosityIsError) {
0388 GMOCK_FLAG(verbose) = kErrorVerbosity;
0389 EXPECT_FALSE(LogIsVisible(kInfo));
0390 EXPECT_FALSE(LogIsVisible(kWarning));
0391 }
0392
0393 TEST_F(LogIsVisibleTest, WorksWhenVerbosityIsWarning) {
0394 GMOCK_FLAG(verbose) = kWarningVerbosity;
0395 EXPECT_FALSE(LogIsVisible(kInfo));
0396 EXPECT_TRUE(LogIsVisible(kWarning));
0397 }
0398
0399 #if GTEST_HAS_STREAM_REDIRECTION
0400
0401
0402
0403
0404
0405 void TestLogWithSeverity(const string& verbosity, LogSeverity severity,
0406 bool should_print) {
0407 const string old_flag = GMOCK_FLAG(verbose);
0408 GMOCK_FLAG(verbose) = verbosity;
0409 CaptureStdout();
0410 Log(severity, "Test log.\n", 0);
0411 if (should_print) {
0412 EXPECT_THAT(GetCapturedStdout().c_str(),
0413 ContainsRegex(
0414 severity == kWarning ?
0415 "^\nGMOCK WARNING:\nTest log\\.\nStack trace:\n" :
0416 "^\nTest log\\.\nStack trace:\n"));
0417 } else {
0418 EXPECT_STREQ("", GetCapturedStdout().c_str());
0419 }
0420 GMOCK_FLAG(verbose) = old_flag;
0421 }
0422
0423
0424
0425 TEST(LogTest, NoStackTraceWhenStackFramesToSkipIsNegative) {
0426 const string saved_flag = GMOCK_FLAG(verbose);
0427 GMOCK_FLAG(verbose) = kInfoVerbosity;
0428 CaptureStdout();
0429 Log(kInfo, "Test log.\n", -1);
0430 EXPECT_STREQ("\nTest log.\n", GetCapturedStdout().c_str());
0431 GMOCK_FLAG(verbose) = saved_flag;
0432 }
0433
0434 struct MockStackTraceGetter : testing::internal::OsStackTraceGetterInterface {
0435 virtual string CurrentStackTrace(int max_depth, int skip_count) {
0436 return (testing::Message() << max_depth << "::" << skip_count << "\n")
0437 .GetString();
0438 }
0439 virtual void UponLeavingGTest() {}
0440 };
0441
0442
0443
0444 TEST(LogTest, NoSkippingStackFrameInOptMode) {
0445 MockStackTraceGetter* mock_os_stack_trace_getter = new MockStackTraceGetter;
0446 GetUnitTestImpl()->set_os_stack_trace_getter(mock_os_stack_trace_getter);
0447
0448 CaptureStdout();
0449 Log(kWarning, "Test log.\n", 100);
0450 const string log = GetCapturedStdout();
0451
0452 string expected_trace =
0453 (testing::Message() << GTEST_FLAG(stack_trace_depth) << "::").GetString();
0454 string expected_message =
0455 "\nGMOCK WARNING:\n"
0456 "Test log.\n"
0457 "Stack trace:\n" +
0458 expected_trace;
0459 EXPECT_THAT(log, HasSubstr(expected_message));
0460 int skip_count = atoi(log.substr(expected_message.size()).c_str());
0461
0462 # if defined(NDEBUG)
0463
0464 const int expected_skip_count = 0;
0465 # else
0466
0467 const int expected_skip_count = 100;
0468 # endif
0469
0470
0471
0472
0473 EXPECT_THAT(skip_count,
0474 AllOf(Ge(expected_skip_count), Le(expected_skip_count + 10)));
0475
0476
0477 GetUnitTestImpl()->set_os_stack_trace_getter(NULL);
0478 }
0479
0480
0481
0482 TEST(LogTest, AllLogsArePrintedWhenVerbosityIsInfo) {
0483 TestLogWithSeverity(kInfoVerbosity, kInfo, true);
0484 TestLogWithSeverity(kInfoVerbosity, kWarning, true);
0485 }
0486
0487
0488
0489 TEST(LogTest, OnlyWarningsArePrintedWhenVerbosityIsWarning) {
0490 TestLogWithSeverity(kWarningVerbosity, kInfo, false);
0491 TestLogWithSeverity(kWarningVerbosity, kWarning, true);
0492 }
0493
0494
0495
0496 TEST(LogTest, NoLogsArePrintedWhenVerbosityIsError) {
0497 TestLogWithSeverity(kErrorVerbosity, kInfo, false);
0498 TestLogWithSeverity(kErrorVerbosity, kWarning, false);
0499 }
0500
0501
0502
0503 TEST(LogTest, OnlyWarningsArePrintedWhenVerbosityIsInvalid) {
0504 TestLogWithSeverity("invalid", kInfo, false);
0505 TestLogWithSeverity("invalid", kWarning, true);
0506 }
0507
0508 #endif
0509
0510 TEST(TypeTraitsTest, true_type) {
0511 EXPECT_TRUE(true_type::value);
0512 }
0513
0514 TEST(TypeTraitsTest, false_type) {
0515 EXPECT_FALSE(false_type::value);
0516 }
0517
0518 TEST(TypeTraitsTest, is_reference) {
0519 EXPECT_FALSE(is_reference<int>::value);
0520 EXPECT_FALSE(is_reference<char*>::value);
0521 EXPECT_TRUE(is_reference<const int&>::value);
0522 }
0523
0524 TEST(TypeTraitsTest, is_pointer) {
0525 EXPECT_FALSE(is_pointer<int>::value);
0526 EXPECT_FALSE(is_pointer<char&>::value);
0527 EXPECT_TRUE(is_pointer<const int*>::value);
0528 }
0529
0530 TEST(TypeTraitsTest, type_equals) {
0531 EXPECT_FALSE((type_equals<int, const int>::value));
0532 EXPECT_FALSE((type_equals<int, int&>::value));
0533 EXPECT_FALSE((type_equals<int, double>::value));
0534 EXPECT_TRUE((type_equals<char, char>::value));
0535 }
0536
0537 TEST(TypeTraitsTest, remove_reference) {
0538 EXPECT_TRUE((type_equals<char, remove_reference<char&>::type>::value));
0539 EXPECT_TRUE((type_equals<const int,
0540 remove_reference<const int&>::type>::value));
0541 EXPECT_TRUE((type_equals<int, remove_reference<int>::type>::value));
0542 EXPECT_TRUE((type_equals<double*, remove_reference<double*>::type>::value));
0543 }
0544
0545 #if GTEST_HAS_STREAM_REDIRECTION
0546
0547
0548
0549 std::string GrabOutput(void(*logger)(), const char* verbosity) {
0550 const string saved_flag = GMOCK_FLAG(verbose);
0551 GMOCK_FLAG(verbose) = verbosity;
0552 CaptureStdout();
0553 logger();
0554 GMOCK_FLAG(verbose) = saved_flag;
0555 return GetCapturedStdout();
0556 }
0557
0558 class DummyMock {
0559 public:
0560 MOCK_METHOD0(TestMethod, void());
0561 MOCK_METHOD1(TestMethodArg, void(int dummy));
0562 };
0563
0564 void ExpectCallLogger() {
0565 DummyMock mock;
0566 EXPECT_CALL(mock, TestMethod());
0567 mock.TestMethod();
0568 };
0569
0570
0571 TEST(ExpectCallTest, LogsWhenVerbosityIsInfo) {
0572 EXPECT_THAT(std::string(GrabOutput(ExpectCallLogger, kInfoVerbosity)),
0573 HasSubstr("EXPECT_CALL(mock, TestMethod())"));
0574 }
0575
0576
0577
0578 TEST(ExpectCallTest, DoesNotLogWhenVerbosityIsWarning) {
0579 EXPECT_STREQ("", GrabOutput(ExpectCallLogger, kWarningVerbosity).c_str());
0580 }
0581
0582
0583
0584 TEST(ExpectCallTest, DoesNotLogWhenVerbosityIsError) {
0585 EXPECT_STREQ("", GrabOutput(ExpectCallLogger, kErrorVerbosity).c_str());
0586 }
0587
0588 void OnCallLogger() {
0589 DummyMock mock;
0590 ON_CALL(mock, TestMethod());
0591 };
0592
0593
0594 TEST(OnCallTest, LogsWhenVerbosityIsInfo) {
0595 EXPECT_THAT(std::string(GrabOutput(OnCallLogger, kInfoVerbosity)),
0596 HasSubstr("ON_CALL(mock, TestMethod())"));
0597 }
0598
0599
0600
0601 TEST(OnCallTest, DoesNotLogWhenVerbosityIsWarning) {
0602 EXPECT_STREQ("", GrabOutput(OnCallLogger, kWarningVerbosity).c_str());
0603 }
0604
0605
0606
0607 TEST(OnCallTest, DoesNotLogWhenVerbosityIsError) {
0608 EXPECT_STREQ("", GrabOutput(OnCallLogger, kErrorVerbosity).c_str());
0609 }
0610
0611 void OnCallAnyArgumentLogger() {
0612 DummyMock mock;
0613 ON_CALL(mock, TestMethodArg(_));
0614 }
0615
0616
0617 TEST(OnCallTest, LogsAnythingArgument) {
0618 EXPECT_THAT(std::string(GrabOutput(OnCallAnyArgumentLogger, kInfoVerbosity)),
0619 HasSubstr("ON_CALL(mock, TestMethodArg(_)"));
0620 }
0621
0622 #endif
0623
0624
0625
0626 TEST(StlContainerViewTest, WorksForStlContainer) {
0627 StaticAssertTypeEq<std::vector<int>,
0628 StlContainerView<std::vector<int> >::type>();
0629 StaticAssertTypeEq<const std::vector<double>&,
0630 StlContainerView<std::vector<double> >::const_reference>();
0631
0632 typedef std::vector<char> Chars;
0633 Chars v1;
0634 const Chars& v2(StlContainerView<Chars>::ConstReference(v1));
0635 EXPECT_EQ(&v1, &v2);
0636
0637 v1.push_back('a');
0638 Chars v3 = StlContainerView<Chars>::Copy(v1);
0639 EXPECT_THAT(v3, Eq(v3));
0640 }
0641
0642 TEST(StlContainerViewTest, WorksForStaticNativeArray) {
0643 StaticAssertTypeEq<NativeArray<int>,
0644 StlContainerView<int[3]>::type>();
0645 StaticAssertTypeEq<NativeArray<double>,
0646 StlContainerView<const double[4]>::type>();
0647 StaticAssertTypeEq<NativeArray<char[3]>,
0648 StlContainerView<const char[2][3]>::type>();
0649
0650 StaticAssertTypeEq<const NativeArray<int>,
0651 StlContainerView<int[2]>::const_reference>();
0652
0653 int a1[3] = { 0, 1, 2 };
0654 NativeArray<int> a2 = StlContainerView<int[3]>::ConstReference(a1);
0655 EXPECT_EQ(3U, a2.size());
0656 EXPECT_EQ(a1, a2.begin());
0657
0658 const NativeArray<int> a3 = StlContainerView<int[3]>::Copy(a1);
0659 ASSERT_EQ(3U, a3.size());
0660 EXPECT_EQ(0, a3.begin()[0]);
0661 EXPECT_EQ(1, a3.begin()[1]);
0662 EXPECT_EQ(2, a3.begin()[2]);
0663
0664
0665 a1[0] = 3;
0666 EXPECT_EQ(0, a3.begin()[0]);
0667 }
0668
0669 TEST(StlContainerViewTest, WorksForDynamicNativeArray) {
0670 StaticAssertTypeEq<NativeArray<int>,
0671 StlContainerView<tuple<const int*, size_t> >::type>();
0672 StaticAssertTypeEq<NativeArray<double>,
0673 StlContainerView<tuple<linked_ptr<double>, int> >::type>();
0674
0675 StaticAssertTypeEq<const NativeArray<int>,
0676 StlContainerView<tuple<const int*, int> >::const_reference>();
0677
0678 int a1[3] = { 0, 1, 2 };
0679 const int* const p1 = a1;
0680 NativeArray<int> a2 = StlContainerView<tuple<const int*, int> >::
0681 ConstReference(make_tuple(p1, 3));
0682 EXPECT_EQ(3U, a2.size());
0683 EXPECT_EQ(a1, a2.begin());
0684
0685 const NativeArray<int> a3 = StlContainerView<tuple<int*, size_t> >::
0686 Copy(make_tuple(static_cast<int*>(a1), 3));
0687 ASSERT_EQ(3U, a3.size());
0688 EXPECT_EQ(0, a3.begin()[0]);
0689 EXPECT_EQ(1, a3.begin()[1]);
0690 EXPECT_EQ(2, a3.begin()[2]);
0691
0692
0693 a1[0] = 3;
0694 EXPECT_EQ(0, a3.begin()[0]);
0695 }
0696
0697 }
0698 }
0699 }