1f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Copyright 2008, Google Inc. 2f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// All rights reserved. 3f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// 4f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Redistribution and use in source and binary forms, with or without 5f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// modification, are permitted provided that the following conditions are 6f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// met: 7f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// 8f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// * Redistributions of source code must retain the above copyright 9f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// notice, this list of conditions and the following disclaimer. 10f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// * Redistributions in binary form must reproduce the above 11f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// copyright notice, this list of conditions and the following disclaimer 12f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// in the documentation and/or other materials provided with the 13f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// distribution. 14f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// * Neither the name of Google Inc. nor the names of its 15f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// contributors may be used to endorse or promote products derived from 16f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// this software without specific prior written permission. 17f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// 18f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// 30f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Author: wan@google.com (Zhanyong Wan) 31f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 32f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#include "gmock/gmock-generated-nice-strict.h" 33f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 34f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#include <string> 35f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#include "gmock/gmock.h" 36f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#include "gtest/gtest.h" 37f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#include "gtest/gtest-spi.h" 38f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 39f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// This must not be defined inside the ::testing namespace, or it will 40f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// clash with ::testing::Mock. 41f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochclass Mock { 42f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch public: 43f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Mock() {} 44f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 45f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch MOCK_METHOD0(DoThis, void()); 46f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 47f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch private: 48f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch GTEST_DISALLOW_COPY_AND_ASSIGN_(Mock); 49f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch}; 50f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 51f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochnamespace testing { 52f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochnamespace gmock_nice_strict_test { 53f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 54f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochusing testing::internal::string; 55f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochusing testing::GMOCK_FLAG(verbose); 56f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochusing testing::HasSubstr; 57f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochusing testing::NaggyMock; 58f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochusing testing::NiceMock; 59f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochusing testing::StrictMock; 60f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 61f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#if GTEST_HAS_STREAM_REDIRECTION 62f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochusing testing::internal::CaptureStdout; 63f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochusing testing::internal::GetCapturedStdout; 64f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#endif 65f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 66f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Defines some mock classes needed by the tests. 67f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 68f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochclass Foo { 69f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch public: 70f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch virtual ~Foo() {} 71f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 72f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch virtual void DoThis() = 0; 73f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch virtual int DoThat(bool flag) = 0; 74f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch}; 75f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 76f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochclass MockFoo : public Foo { 77f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch public: 78f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch MockFoo() {} 79f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch void Delete() { delete this; } 80f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 81f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch MOCK_METHOD0(DoThis, void()); 82f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch MOCK_METHOD1(DoThat, int(bool flag)); 83f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 84f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch private: 85f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFoo); 86f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch}; 87f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 88f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochclass MockBar { 89f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch public: 90f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch explicit MockBar(const string& s) : str_(s) {} 91f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 92f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch MockBar(char a1, char a2, string a3, string a4, int a5, int a6, 93f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch const string& a7, const string& a8, bool a9, bool a10) { 94f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch str_ = string() + a1 + a2 + a3 + a4 + static_cast<char>(a5) + 95f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch static_cast<char>(a6) + a7 + a8 + (a9 ? 'T' : 'F') + (a10 ? 'T' : 'F'); 96f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch } 97f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 98f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch virtual ~MockBar() {} 99f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 100f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch const string& str() const { return str_; } 101f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 102f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch MOCK_METHOD0(This, int()); 103f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch MOCK_METHOD2(That, string(int, bool)); 104f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 105f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch private: 106f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch string str_; 107f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 108f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch GTEST_DISALLOW_COPY_AND_ASSIGN_(MockBar); 109f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch}; 110f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 111f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#if GTEST_HAS_STREAM_REDIRECTION 112f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 113f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that a raw mock generates warnings for uninteresting calls. 114f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(RawMockTest, WarningForUninterestingCall) { 115f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch const string saved_flag = GMOCK_FLAG(verbose); 116f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch GMOCK_FLAG(verbose) = "warning"; 117f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 118f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch MockFoo raw_foo; 119f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 120f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch CaptureStdout(); 121f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch raw_foo.DoThis(); 122f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch raw_foo.DoThat(true); 123f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_THAT(GetCapturedStdout(), 124f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch HasSubstr("Uninteresting mock function call")); 125f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 126f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch GMOCK_FLAG(verbose) = saved_flag; 127f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 128f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 129f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that a raw mock generates warnings for uninteresting calls 130f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// that delete the mock object. 131f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(RawMockTest, WarningForUninterestingCallAfterDeath) { 132f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch const string saved_flag = GMOCK_FLAG(verbose); 133f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch GMOCK_FLAG(verbose) = "warning"; 134f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 135f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch MockFoo* const raw_foo = new MockFoo; 136f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 137f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch ON_CALL(*raw_foo, DoThis()) 138f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch .WillByDefault(Invoke(raw_foo, &MockFoo::Delete)); 139f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 140f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch CaptureStdout(); 141f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch raw_foo->DoThis(); 142f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_THAT(GetCapturedStdout(), 143f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch HasSubstr("Uninteresting mock function call")); 144f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 145f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch GMOCK_FLAG(verbose) = saved_flag; 146f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 147f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 148f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that a raw mock generates informational logs for 149f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// uninteresting calls. 150f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(RawMockTest, InfoForUninterestingCall) { 151f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch MockFoo raw_foo; 152f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 153f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch const string saved_flag = GMOCK_FLAG(verbose); 154f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch GMOCK_FLAG(verbose) = "info"; 155f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch CaptureStdout(); 156f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch raw_foo.DoThis(); 157f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_THAT(GetCapturedStdout(), 158f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch HasSubstr("Uninteresting mock function call")); 159f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 160f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch GMOCK_FLAG(verbose) = saved_flag; 161f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 162f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 163f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that a nice mock generates no warning for uninteresting calls. 164f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(NiceMockTest, NoWarningForUninterestingCall) { 165f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch NiceMock<MockFoo> nice_foo; 166f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 167f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch CaptureStdout(); 168f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch nice_foo.DoThis(); 169f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch nice_foo.DoThat(true); 170f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_EQ("", GetCapturedStdout()); 171f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 172f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 173f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that a nice mock generates no warning for uninteresting calls 174f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// that delete the mock object. 175f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(NiceMockTest, NoWarningForUninterestingCallAfterDeath) { 176f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch NiceMock<MockFoo>* const nice_foo = new NiceMock<MockFoo>; 177f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 178f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch ON_CALL(*nice_foo, DoThis()) 179f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch .WillByDefault(Invoke(nice_foo, &MockFoo::Delete)); 180f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 181f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch CaptureStdout(); 182f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch nice_foo->DoThis(); 183f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_EQ("", GetCapturedStdout()); 184f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 185f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 186f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that a nice mock generates informational logs for 187f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// uninteresting calls. 188f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(NiceMockTest, InfoForUninterestingCall) { 189f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch NiceMock<MockFoo> nice_foo; 190f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 191f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch const string saved_flag = GMOCK_FLAG(verbose); 192f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch GMOCK_FLAG(verbose) = "info"; 193f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch CaptureStdout(); 194f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch nice_foo.DoThis(); 195f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_THAT(GetCapturedStdout(), 196f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch HasSubstr("Uninteresting mock function call")); 197f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 198f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch GMOCK_FLAG(verbose) = saved_flag; 199f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 200f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 201f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#endif // GTEST_HAS_STREAM_REDIRECTION 202f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 203f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that a nice mock allows expected calls. 204f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(NiceMockTest, AllowsExpectedCall) { 205f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch NiceMock<MockFoo> nice_foo; 206f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 207f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_CALL(nice_foo, DoThis()); 208f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch nice_foo.DoThis(); 209f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 210f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 211f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that an unexpected call on a nice mock fails. 212f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(NiceMockTest, UnexpectedCallFails) { 213f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch NiceMock<MockFoo> nice_foo; 214f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 215f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_CALL(nice_foo, DoThis()).Times(0); 216f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_NONFATAL_FAILURE(nice_foo.DoThis(), "called more times than expected"); 217f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 218f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 219f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that NiceMock works with a mock class that has a non-default 220f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// constructor. 221f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(NiceMockTest, NonDefaultConstructor) { 222f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch NiceMock<MockBar> nice_bar("hi"); 223f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_EQ("hi", nice_bar.str()); 224f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 225f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch nice_bar.This(); 226f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch nice_bar.That(5, true); 227f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 228f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 229f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that NiceMock works with a mock class that has a 10-ary 230f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// non-default constructor. 231f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(NiceMockTest, NonDefaultConstructor10) { 232f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch NiceMock<MockBar> nice_bar('a', 'b', "c", "d", 'e', 'f', 233f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch "g", "h", true, false); 234f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_EQ("abcdefghTF", nice_bar.str()); 235f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 236f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch nice_bar.This(); 237f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch nice_bar.That(5, true); 238f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 239f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 240f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#if !GTEST_OS_SYMBIAN && !GTEST_OS_WINDOWS_MOBILE 241f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that NiceMock<Mock> compiles where Mock is a user-defined 242f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// class (as opposed to ::testing::Mock). We had to work around an 243f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// MSVC 8.0 bug that caused the symbol Mock used in the definition of 244f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// NiceMock to be looked up in the wrong context, and this test 245f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// ensures that our fix works. 246f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// 247f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// We have to skip this test on Symbian and Windows Mobile, as it 248f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// causes the program to crash there, for reasons unclear to us yet. 249f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(NiceMockTest, AcceptsClassNamedMock) { 250f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch NiceMock< ::Mock> nice; 251f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_CALL(nice, DoThis()); 252f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch nice.DoThis(); 253f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 254f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#endif // !GTEST_OS_SYMBIAN && !GTEST_OS_WINDOWS_MOBILE 255f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 256f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#if GTEST_HAS_STREAM_REDIRECTION 257f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 258f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that a naggy mock generates warnings for uninteresting calls. 259f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(NaggyMockTest, WarningForUninterestingCall) { 260f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch const string saved_flag = GMOCK_FLAG(verbose); 261f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch GMOCK_FLAG(verbose) = "warning"; 262f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 263f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch NaggyMock<MockFoo> naggy_foo; 264f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 265f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch CaptureStdout(); 266f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch naggy_foo.DoThis(); 267f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch naggy_foo.DoThat(true); 268f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_THAT(GetCapturedStdout(), 269f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch HasSubstr("Uninteresting mock function call")); 270f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 271f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch GMOCK_FLAG(verbose) = saved_flag; 272f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 273f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 274f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that a naggy mock generates a warning for an uninteresting call 275f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// that deletes the mock object. 276f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(NaggyMockTest, WarningForUninterestingCallAfterDeath) { 277f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch const string saved_flag = GMOCK_FLAG(verbose); 278f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch GMOCK_FLAG(verbose) = "warning"; 279f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 280f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch NaggyMock<MockFoo>* const naggy_foo = new NaggyMock<MockFoo>; 281f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 282f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch ON_CALL(*naggy_foo, DoThis()) 283f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch .WillByDefault(Invoke(naggy_foo, &MockFoo::Delete)); 284f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 285f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch CaptureStdout(); 286f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch naggy_foo->DoThis(); 287f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_THAT(GetCapturedStdout(), 288f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch HasSubstr("Uninteresting mock function call")); 289f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 290f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch GMOCK_FLAG(verbose) = saved_flag; 291f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 292f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 293f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#endif // GTEST_HAS_STREAM_REDIRECTION 294f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 295f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that a naggy mock allows expected calls. 296f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(NaggyMockTest, AllowsExpectedCall) { 297f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch NaggyMock<MockFoo> naggy_foo; 298f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 299f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_CALL(naggy_foo, DoThis()); 300f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch naggy_foo.DoThis(); 301f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 302f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 303f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that an unexpected call on a naggy mock fails. 304f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(NaggyMockTest, UnexpectedCallFails) { 305f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch NaggyMock<MockFoo> naggy_foo; 306f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 307f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_CALL(naggy_foo, DoThis()).Times(0); 308f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_NONFATAL_FAILURE(naggy_foo.DoThis(), 309f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch "called more times than expected"); 310f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 311f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 312f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that NaggyMock works with a mock class that has a non-default 313f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// constructor. 314f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(NaggyMockTest, NonDefaultConstructor) { 315f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch NaggyMock<MockBar> naggy_bar("hi"); 316f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_EQ("hi", naggy_bar.str()); 317f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 318f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch naggy_bar.This(); 319f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch naggy_bar.That(5, true); 320f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 321f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 322f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that NaggyMock works with a mock class that has a 10-ary 323f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// non-default constructor. 324f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(NaggyMockTest, NonDefaultConstructor10) { 325f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch NaggyMock<MockBar> naggy_bar('0', '1', "2", "3", '4', '5', 326f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch "6", "7", true, false); 327f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_EQ("01234567TF", naggy_bar.str()); 328f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 329f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch naggy_bar.This(); 330f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch naggy_bar.That(5, true); 331f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 332f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 333f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#if !GTEST_OS_SYMBIAN && !GTEST_OS_WINDOWS_MOBILE 334f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that NaggyMock<Mock> compiles where Mock is a user-defined 335f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// class (as opposed to ::testing::Mock). We had to work around an 336f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// MSVC 8.0 bug that caused the symbol Mock used in the definition of 337f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// NaggyMock to be looked up in the wrong context, and this test 338f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// ensures that our fix works. 339f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// 340f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// We have to skip this test on Symbian and Windows Mobile, as it 341f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// causes the program to crash there, for reasons unclear to us yet. 342f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(NaggyMockTest, AcceptsClassNamedMock) { 343f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch NaggyMock< ::Mock> naggy; 344f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_CALL(naggy, DoThis()); 345f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch naggy.DoThis(); 346f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 347f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#endif // !GTEST_OS_SYMBIAN && !GTEST_OS_WINDOWS_MOBILE 348f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 349f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that a strict mock allows expected calls. 350f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(StrictMockTest, AllowsExpectedCall) { 351f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch StrictMock<MockFoo> strict_foo; 352f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 353f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_CALL(strict_foo, DoThis()); 354f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch strict_foo.DoThis(); 355f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 356f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 357f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that an unexpected call on a strict mock fails. 358f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(StrictMockTest, UnexpectedCallFails) { 359f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch StrictMock<MockFoo> strict_foo; 360f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 361f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_CALL(strict_foo, DoThis()).Times(0); 362f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_NONFATAL_FAILURE(strict_foo.DoThis(), 363f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch "called more times than expected"); 364f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 365f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 366f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that an uninteresting call on a strict mock fails. 367f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(StrictMockTest, UninterestingCallFails) { 368f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch StrictMock<MockFoo> strict_foo; 369f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 370f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_NONFATAL_FAILURE(strict_foo.DoThis(), 371f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch "Uninteresting mock function call"); 372f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 373f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 374f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that an uninteresting call on a strict mock fails, even if 375f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// the call deletes the mock object. 376f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(StrictMockTest, UninterestingCallFailsAfterDeath) { 377f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch StrictMock<MockFoo>* const strict_foo = new StrictMock<MockFoo>; 378f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 379f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch ON_CALL(*strict_foo, DoThis()) 380f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch .WillByDefault(Invoke(strict_foo, &MockFoo::Delete)); 381f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 382f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_NONFATAL_FAILURE(strict_foo->DoThis(), 383f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch "Uninteresting mock function call"); 384f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 385f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 386f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that StrictMock works with a mock class that has a 387f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// non-default constructor. 388f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(StrictMockTest, NonDefaultConstructor) { 389f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch StrictMock<MockBar> strict_bar("hi"); 390f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_EQ("hi", strict_bar.str()); 391f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 392f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_NONFATAL_FAILURE(strict_bar.That(5, true), 393f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch "Uninteresting mock function call"); 394f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 395f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 396f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that StrictMock works with a mock class that has a 10-ary 397f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// non-default constructor. 398f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(StrictMockTest, NonDefaultConstructor10) { 399f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch StrictMock<MockBar> strict_bar('a', 'b', "c", "d", 'e', 'f', 400f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch "g", "h", true, false); 401f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_EQ("abcdefghTF", strict_bar.str()); 402f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 403f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_NONFATAL_FAILURE(strict_bar.That(5, true), 404f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch "Uninteresting mock function call"); 405f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 406f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 407f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#if !GTEST_OS_SYMBIAN && !GTEST_OS_WINDOWS_MOBILE 408f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Tests that StrictMock<Mock> compiles where Mock is a user-defined 409f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// class (as opposed to ::testing::Mock). We had to work around an 410f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// MSVC 8.0 bug that caused the symbol Mock used in the definition of 411f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// StrictMock to be looked up in the wrong context, and this test 412f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// ensures that our fix works. 413f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// 414f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// We have to skip this test on Symbian and Windows Mobile, as it 415f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// causes the program to crash there, for reasons unclear to us yet. 416f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochTEST(StrictMockTest, AcceptsClassNamedMock) { 417f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch StrictMock< ::Mock> strict; 418f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch EXPECT_CALL(strict, DoThis()); 419f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch strict.DoThis(); 420f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 421f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#endif // !GTEST_OS_SYMBIAN && !GTEST_OS_WINDOWS_MOBILE 422f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 423f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} // namespace gmock_nice_strict_test 424f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} // namespace testing 425