| Index: testing/gmock/test/gmock-spec-builders_test.cc
|
| diff --git a/testing/gmock/test/gmock-spec-builders_test.cc b/testing/gmock/test/gmock-spec-builders_test.cc
|
| index e5fc2ec926956681a6ec450ea14240181d4b9e9b..ff30f02ba0ddae748b276c64f5f65891d0724f7d 100644
|
| --- a/testing/gmock/test/gmock-spec-builders_test.cc
|
| +++ b/testing/gmock/test/gmock-spec-builders_test.cc
|
| @@ -1783,6 +1783,25 @@ class MockC {
|
| GTEST_DISALLOW_COPY_AND_ASSIGN_(MockC);
|
| };
|
|
|
| +class VerboseFlagPreservingFixture : public testing::Test {
|
| + protected:
|
| + // The code needs to work when both ::string and ::std::string are defined
|
| + // and the flag is implemented as a testing::internal::String. In this
|
| + // case, without the call to c_str(), the compiler will complain that it
|
| + // cannot figure out what overload of string constructor to use.
|
| + // TODO(vladl@google.com): Use internal::string instead of String for
|
| + // string flags in Google Test.
|
| + VerboseFlagPreservingFixture()
|
| + : saved_verbose_flag_(GMOCK_FLAG(verbose).c_str()) {}
|
| +
|
| + ~VerboseFlagPreservingFixture() { GMOCK_FLAG(verbose) = saved_verbose_flag_; }
|
| +
|
| + private:
|
| + const string saved_verbose_flag_;
|
| +
|
| + GTEST_DISALLOW_COPY_AND_ASSIGN_(VerboseFlagPreservingFixture);
|
| +};
|
| +
|
| #if GTEST_HAS_STREAM_REDIRECTION_
|
|
|
| // Tests that an uninteresting mock function call generates a warning
|
| @@ -1842,7 +1861,7 @@ TEST(FunctionCallMessageTest, UninterestingCallPrintsArgumentsAndReturnValue) {
|
|
|
| // Tests how the --gmock_verbose flag affects Google Mock's output.
|
|
|
| -class GMockVerboseFlagTest : public testing::Test {
|
| +class GMockVerboseFlagTest : public VerboseFlagPreservingFixture {
|
| public:
|
| // Verifies that the given Google Mock output is correct. (When
|
| // should_print is true, the output should match the given regex and
|
| @@ -1982,22 +2001,9 @@ class LogTestHelper {
|
| GTEST_DISALLOW_COPY_AND_ASSIGN_(LogTestHelper);
|
| };
|
|
|
| -class GMockLogTest : public ::testing::Test {
|
| +class GMockLogTest : public VerboseFlagPreservingFixture {
|
| protected:
|
| - virtual void SetUp() {
|
| - // The code needs to work when both ::string and ::std::string are
|
| - // defined and the flag is implemented as a
|
| - // testing::internal::String. In this case, without the call to
|
| - // c_str(), the compiler will complain that it cannot figure out
|
| - // whether the String flag should be converted to a ::string or an
|
| - // ::std::string before being assigned to original_verbose_.
|
| - original_verbose_ = GMOCK_FLAG(verbose).c_str();
|
| - }
|
| -
|
| - virtual void TearDown() { GMOCK_FLAG(verbose) = original_verbose_; }
|
| -
|
| LogTestHelper helper_;
|
| - string original_verbose_;
|
| };
|
|
|
| TEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsWarning) {
|
| @@ -2358,9 +2364,23 @@ TEST(VerifyAndClearTest, DoesNotAffectOtherMockObjects) {
|
| // action or as a default action without causing a dead lock. It
|
| // verifies that the action is not performed inside the critical
|
| // section.
|
| +TEST(SynchronizationTest, CanCallMockMethodInAction) {
|
| + MockA a;
|
| + MockC c;
|
| + ON_CALL(a, DoA(_))
|
| + .WillByDefault(IgnoreResult(InvokeWithoutArgs(&c,
|
| + &MockC::NonVoidMethod)));
|
| + EXPECT_CALL(a, DoA(1));
|
| + EXPECT_CALL(a, DoA(1))
|
| + .WillOnce(Invoke(&a, &MockA::DoA))
|
| + .RetiresOnSaturation();
|
| + EXPECT_CALL(c, NonVoidMethod());
|
|
|
| -void Helper(MockC* c) {
|
| - c->NonVoidMethod();
|
| + a.DoA(1);
|
| + // This will match the second EXPECT_CALL() and trigger another a.DoA(1),
|
| + // which will in turn match the first EXPECT_CALL() and trigger a call to
|
| + // c.NonVoidMethod() that was specified by the ON_CALL() since the first
|
| + // EXPECT_CALL() did not specify an action.
|
| }
|
|
|
| } // namespace
|
|
|