113481Sgiacomo.travaglini@arm.com// Copyright 2008, Google Inc.
213481Sgiacomo.travaglini@arm.com// All rights reserved.
313481Sgiacomo.travaglini@arm.com//
413481Sgiacomo.travaglini@arm.com// Redistribution and use in source and binary forms, with or without
513481Sgiacomo.travaglini@arm.com// modification, are permitted provided that the following conditions are
613481Sgiacomo.travaglini@arm.com// met:
713481Sgiacomo.travaglini@arm.com//
813481Sgiacomo.travaglini@arm.com//     * Redistributions of source code must retain the above copyright
913481Sgiacomo.travaglini@arm.com// notice, this list of conditions and the following disclaimer.
1013481Sgiacomo.travaglini@arm.com//     * Redistributions in binary form must reproduce the above
1113481Sgiacomo.travaglini@arm.com// copyright notice, this list of conditions and the following disclaimer
1213481Sgiacomo.travaglini@arm.com// in the documentation and/or other materials provided with the
1313481Sgiacomo.travaglini@arm.com// distribution.
1413481Sgiacomo.travaglini@arm.com//     * Neither the name of Google Inc. nor the names of its
1513481Sgiacomo.travaglini@arm.com// contributors may be used to endorse or promote products derived from
1613481Sgiacomo.travaglini@arm.com// this software without specific prior written permission.
1713481Sgiacomo.travaglini@arm.com//
1813481Sgiacomo.travaglini@arm.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1913481Sgiacomo.travaglini@arm.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2013481Sgiacomo.travaglini@arm.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2113481Sgiacomo.travaglini@arm.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2213481Sgiacomo.travaglini@arm.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2313481Sgiacomo.travaglini@arm.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2413481Sgiacomo.travaglini@arm.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2513481Sgiacomo.travaglini@arm.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2613481Sgiacomo.travaglini@arm.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2713481Sgiacomo.travaglini@arm.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2813481Sgiacomo.travaglini@arm.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2913481Sgiacomo.travaglini@arm.com//
3013481Sgiacomo.travaglini@arm.com// Author: wan@google.com (Zhanyong Wan)
3113481Sgiacomo.travaglini@arm.com
3213481Sgiacomo.travaglini@arm.com// Tests Google Mock's output in various scenarios.  This ensures that
3313481Sgiacomo.travaglini@arm.com// Google Mock's messages are readable and useful.
3413481Sgiacomo.travaglini@arm.com
3513481Sgiacomo.travaglini@arm.com#include "gmock/gmock.h"
3613481Sgiacomo.travaglini@arm.com
3713481Sgiacomo.travaglini@arm.com#include <stdio.h>
3813481Sgiacomo.travaglini@arm.com#include <string>
3913481Sgiacomo.travaglini@arm.com
4013481Sgiacomo.travaglini@arm.com#include "gtest/gtest.h"
4113481Sgiacomo.travaglini@arm.com
4213481Sgiacomo.travaglini@arm.comusing testing::_;
4313481Sgiacomo.travaglini@arm.comusing testing::AnyNumber;
4413481Sgiacomo.travaglini@arm.comusing testing::Ge;
4513481Sgiacomo.travaglini@arm.comusing testing::InSequence;
4613481Sgiacomo.travaglini@arm.comusing testing::NaggyMock;
4713481Sgiacomo.travaglini@arm.comusing testing::Ref;
4813481Sgiacomo.travaglini@arm.comusing testing::Return;
4913481Sgiacomo.travaglini@arm.comusing testing::Sequence;
5013481Sgiacomo.travaglini@arm.com
5113481Sgiacomo.travaglini@arm.comclass MockFoo {
5213481Sgiacomo.travaglini@arm.com public:
5313481Sgiacomo.travaglini@arm.com  MockFoo() {}
5413481Sgiacomo.travaglini@arm.com
5513481Sgiacomo.travaglini@arm.com  MOCK_METHOD3(Bar, char(const std::string& s, int i, double x));
5613481Sgiacomo.travaglini@arm.com  MOCK_METHOD2(Bar2, bool(int x, int y));
5713481Sgiacomo.travaglini@arm.com  MOCK_METHOD2(Bar3, void(int x, int y));
5813481Sgiacomo.travaglini@arm.com
5913481Sgiacomo.travaglini@arm.com private:
6013481Sgiacomo.travaglini@arm.com  GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFoo);
6113481Sgiacomo.travaglini@arm.com};
6213481Sgiacomo.travaglini@arm.com
6313481Sgiacomo.travaglini@arm.comclass GMockOutputTest : public testing::Test {
6413481Sgiacomo.travaglini@arm.com protected:
6513481Sgiacomo.travaglini@arm.com  NaggyMock<MockFoo> foo_;
6613481Sgiacomo.travaglini@arm.com};
6713481Sgiacomo.travaglini@arm.com
6813481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, ExpectedCall) {
6913481Sgiacomo.travaglini@arm.com  testing::GMOCK_FLAG(verbose) = "info";
7013481Sgiacomo.travaglini@arm.com
7113481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar2(0, _));
7213481Sgiacomo.travaglini@arm.com  foo_.Bar2(0, 0);  // Expected call
7313481Sgiacomo.travaglini@arm.com
7413481Sgiacomo.travaglini@arm.com  testing::GMOCK_FLAG(verbose) = "warning";
7513481Sgiacomo.travaglini@arm.com}
7613481Sgiacomo.travaglini@arm.com
7713481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, ExpectedCallToVoidFunction) {
7813481Sgiacomo.travaglini@arm.com  testing::GMOCK_FLAG(verbose) = "info";
7913481Sgiacomo.travaglini@arm.com
8013481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar3(0, _));
8113481Sgiacomo.travaglini@arm.com  foo_.Bar3(0, 0);  // Expected call
8213481Sgiacomo.travaglini@arm.com
8313481Sgiacomo.travaglini@arm.com  testing::GMOCK_FLAG(verbose) = "warning";
8413481Sgiacomo.travaglini@arm.com}
8513481Sgiacomo.travaglini@arm.com
8613481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, ExplicitActionsRunOut) {
8713481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar2(_, _))
8813481Sgiacomo.travaglini@arm.com      .Times(2)
8913481Sgiacomo.travaglini@arm.com      .WillOnce(Return(false));
9013481Sgiacomo.travaglini@arm.com  foo_.Bar2(2, 2);
9113481Sgiacomo.travaglini@arm.com  foo_.Bar2(1, 1);  // Explicit actions in EXPECT_CALL run out.
9213481Sgiacomo.travaglini@arm.com}
9313481Sgiacomo.travaglini@arm.com
9413481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, UnexpectedCall) {
9513481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar2(0, _));
9613481Sgiacomo.travaglini@arm.com
9713481Sgiacomo.travaglini@arm.com  foo_.Bar2(1, 0);  // Unexpected call
9813481Sgiacomo.travaglini@arm.com  foo_.Bar2(0, 0);  // Expected call
9913481Sgiacomo.travaglini@arm.com}
10013481Sgiacomo.travaglini@arm.com
10113481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, UnexpectedCallToVoidFunction) {
10213481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar3(0, _));
10313481Sgiacomo.travaglini@arm.com
10413481Sgiacomo.travaglini@arm.com  foo_.Bar3(1, 0);  // Unexpected call
10513481Sgiacomo.travaglini@arm.com  foo_.Bar3(0, 0);  // Expected call
10613481Sgiacomo.travaglini@arm.com}
10713481Sgiacomo.travaglini@arm.com
10813481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, ExcessiveCall) {
10913481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar2(0, _));
11013481Sgiacomo.travaglini@arm.com
11113481Sgiacomo.travaglini@arm.com  foo_.Bar2(0, 0);  // Expected call
11213481Sgiacomo.travaglini@arm.com  foo_.Bar2(0, 1);  // Excessive call
11313481Sgiacomo.travaglini@arm.com}
11413481Sgiacomo.travaglini@arm.com
11513481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, ExcessiveCallToVoidFunction) {
11613481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar3(0, _));
11713481Sgiacomo.travaglini@arm.com
11813481Sgiacomo.travaglini@arm.com  foo_.Bar3(0, 0);  // Expected call
11913481Sgiacomo.travaglini@arm.com  foo_.Bar3(0, 1);  // Excessive call
12013481Sgiacomo.travaglini@arm.com}
12113481Sgiacomo.travaglini@arm.com
12213481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, UninterestingCall) {
12313481Sgiacomo.travaglini@arm.com  foo_.Bar2(0, 1);  // Uninteresting call
12413481Sgiacomo.travaglini@arm.com}
12513481Sgiacomo.travaglini@arm.com
12613481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, UninterestingCallToVoidFunction) {
12713481Sgiacomo.travaglini@arm.com  foo_.Bar3(0, 1);  // Uninteresting call
12813481Sgiacomo.travaglini@arm.com}
12913481Sgiacomo.travaglini@arm.com
13013481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, RetiredExpectation) {
13113481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar2(_, _))
13213481Sgiacomo.travaglini@arm.com      .RetiresOnSaturation();
13313481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar2(0, 0));
13413481Sgiacomo.travaglini@arm.com
13513481Sgiacomo.travaglini@arm.com  foo_.Bar2(1, 1);
13613481Sgiacomo.travaglini@arm.com  foo_.Bar2(1, 1);  // Matches a retired expectation
13713481Sgiacomo.travaglini@arm.com  foo_.Bar2(0, 0);
13813481Sgiacomo.travaglini@arm.com}
13913481Sgiacomo.travaglini@arm.com
14013481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, UnsatisfiedPrerequisite) {
14113481Sgiacomo.travaglini@arm.com  {
14213481Sgiacomo.travaglini@arm.com    InSequence s;
14313481Sgiacomo.travaglini@arm.com    EXPECT_CALL(foo_, Bar(_, 0, _));
14413481Sgiacomo.travaglini@arm.com    EXPECT_CALL(foo_, Bar2(0, 0));
14513481Sgiacomo.travaglini@arm.com    EXPECT_CALL(foo_, Bar2(1, _));
14613481Sgiacomo.travaglini@arm.com  }
14713481Sgiacomo.travaglini@arm.com
14813481Sgiacomo.travaglini@arm.com  foo_.Bar2(1, 0);  // Has one immediate unsatisfied pre-requisite
14913481Sgiacomo.travaglini@arm.com  foo_.Bar("Hi", 0, 0);
15013481Sgiacomo.travaglini@arm.com  foo_.Bar2(0, 0);
15113481Sgiacomo.travaglini@arm.com  foo_.Bar2(1, 0);
15213481Sgiacomo.travaglini@arm.com}
15313481Sgiacomo.travaglini@arm.com
15413481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, UnsatisfiedPrerequisites) {
15513481Sgiacomo.travaglini@arm.com  Sequence s1, s2;
15613481Sgiacomo.travaglini@arm.com
15713481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar(_, 0, _))
15813481Sgiacomo.travaglini@arm.com      .InSequence(s1);
15913481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar2(0, 0))
16013481Sgiacomo.travaglini@arm.com      .InSequence(s2);
16113481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar2(1, _))
16213481Sgiacomo.travaglini@arm.com      .InSequence(s1, s2);
16313481Sgiacomo.travaglini@arm.com
16413481Sgiacomo.travaglini@arm.com  foo_.Bar2(1, 0);  // Has two immediate unsatisfied pre-requisites
16513481Sgiacomo.travaglini@arm.com  foo_.Bar("Hi", 0, 0);
16613481Sgiacomo.travaglini@arm.com  foo_.Bar2(0, 0);
16713481Sgiacomo.travaglini@arm.com  foo_.Bar2(1, 0);
16813481Sgiacomo.travaglini@arm.com}
16913481Sgiacomo.travaglini@arm.com
17013481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, UnsatisfiedWith) {
17113481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar2(_, _)).With(Ge());
17213481Sgiacomo.travaglini@arm.com}
17313481Sgiacomo.travaglini@arm.com
17413481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, UnsatisfiedExpectation) {
17513481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar(_, _, _));
17613481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar2(0, _))
17713481Sgiacomo.travaglini@arm.com      .Times(2);
17813481Sgiacomo.travaglini@arm.com
17913481Sgiacomo.travaglini@arm.com  foo_.Bar2(0, 1);
18013481Sgiacomo.travaglini@arm.com}
18113481Sgiacomo.travaglini@arm.com
18213481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, MismatchArguments) {
18313481Sgiacomo.travaglini@arm.com  const std::string s = "Hi";
18413481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar(Ref(s), _, Ge(0)));
18513481Sgiacomo.travaglini@arm.com
18613481Sgiacomo.travaglini@arm.com  foo_.Bar("Ho", 0, -0.1);  // Mismatch arguments
18713481Sgiacomo.travaglini@arm.com  foo_.Bar(s, 0, 0);
18813481Sgiacomo.travaglini@arm.com}
18913481Sgiacomo.travaglini@arm.com
19013481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, MismatchWith) {
19113481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar2(Ge(2), Ge(1)))
19213481Sgiacomo.travaglini@arm.com      .With(Ge());
19313481Sgiacomo.travaglini@arm.com
19413481Sgiacomo.travaglini@arm.com  foo_.Bar2(2, 3);  // Mismatch With()
19513481Sgiacomo.travaglini@arm.com  foo_.Bar2(2, 1);
19613481Sgiacomo.travaglini@arm.com}
19713481Sgiacomo.travaglini@arm.com
19813481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, MismatchArgumentsAndWith) {
19913481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar2(Ge(2), Ge(1)))
20013481Sgiacomo.travaglini@arm.com      .With(Ge());
20113481Sgiacomo.travaglini@arm.com
20213481Sgiacomo.travaglini@arm.com  foo_.Bar2(1, 3);  // Mismatch arguments and mismatch With()
20313481Sgiacomo.travaglini@arm.com  foo_.Bar2(2, 1);
20413481Sgiacomo.travaglini@arm.com}
20513481Sgiacomo.travaglini@arm.com
20613481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, UnexpectedCallWithDefaultAction) {
20713481Sgiacomo.travaglini@arm.com  ON_CALL(foo_, Bar2(_, _))
20813481Sgiacomo.travaglini@arm.com      .WillByDefault(Return(true));   // Default action #1
20913481Sgiacomo.travaglini@arm.com  ON_CALL(foo_, Bar2(1, _))
21013481Sgiacomo.travaglini@arm.com      .WillByDefault(Return(false));  // Default action #2
21113481Sgiacomo.travaglini@arm.com
21213481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar2(2, 2));
21313481Sgiacomo.travaglini@arm.com  foo_.Bar2(1, 0);  // Unexpected call, takes default action #2.
21413481Sgiacomo.travaglini@arm.com  foo_.Bar2(0, 0);  // Unexpected call, takes default action #1.
21513481Sgiacomo.travaglini@arm.com  foo_.Bar2(2, 2);  // Expected call.
21613481Sgiacomo.travaglini@arm.com}
21713481Sgiacomo.travaglini@arm.com
21813481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, ExcessiveCallWithDefaultAction) {
21913481Sgiacomo.travaglini@arm.com  ON_CALL(foo_, Bar2(_, _))
22013481Sgiacomo.travaglini@arm.com      .WillByDefault(Return(true));   // Default action #1
22113481Sgiacomo.travaglini@arm.com  ON_CALL(foo_, Bar2(1, _))
22213481Sgiacomo.travaglini@arm.com      .WillByDefault(Return(false));  // Default action #2
22313481Sgiacomo.travaglini@arm.com
22413481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar2(2, 2));
22513481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar2(1, 1));
22613481Sgiacomo.travaglini@arm.com
22713481Sgiacomo.travaglini@arm.com  foo_.Bar2(2, 2);  // Expected call.
22813481Sgiacomo.travaglini@arm.com  foo_.Bar2(2, 2);  // Excessive call, takes default action #1.
22913481Sgiacomo.travaglini@arm.com  foo_.Bar2(1, 1);  // Expected call.
23013481Sgiacomo.travaglini@arm.com  foo_.Bar2(1, 1);  // Excessive call, takes default action #2.
23113481Sgiacomo.travaglini@arm.com}
23213481Sgiacomo.travaglini@arm.com
23313481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, UninterestingCallWithDefaultAction) {
23413481Sgiacomo.travaglini@arm.com  ON_CALL(foo_, Bar2(_, _))
23513481Sgiacomo.travaglini@arm.com      .WillByDefault(Return(true));   // Default action #1
23613481Sgiacomo.travaglini@arm.com  ON_CALL(foo_, Bar2(1, _))
23713481Sgiacomo.travaglini@arm.com      .WillByDefault(Return(false));  // Default action #2
23813481Sgiacomo.travaglini@arm.com
23913481Sgiacomo.travaglini@arm.com  foo_.Bar2(2, 2);  // Uninteresting call, takes default action #1.
24013481Sgiacomo.travaglini@arm.com  foo_.Bar2(1, 1);  // Uninteresting call, takes default action #2.
24113481Sgiacomo.travaglini@arm.com}
24213481Sgiacomo.travaglini@arm.com
24313481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, ExplicitActionsRunOutWithDefaultAction) {
24413481Sgiacomo.travaglini@arm.com  ON_CALL(foo_, Bar2(_, _))
24513481Sgiacomo.travaglini@arm.com      .WillByDefault(Return(true));   // Default action #1
24613481Sgiacomo.travaglini@arm.com
24713481Sgiacomo.travaglini@arm.com  EXPECT_CALL(foo_, Bar2(_, _))
24813481Sgiacomo.travaglini@arm.com      .Times(2)
24913481Sgiacomo.travaglini@arm.com      .WillOnce(Return(false));
25013481Sgiacomo.travaglini@arm.com  foo_.Bar2(2, 2);
25113481Sgiacomo.travaglini@arm.com  foo_.Bar2(1, 1);  // Explicit actions in EXPECT_CALL run out.
25213481Sgiacomo.travaglini@arm.com}
25313481Sgiacomo.travaglini@arm.com
25413481Sgiacomo.travaglini@arm.comTEST_F(GMockOutputTest, CatchesLeakedMocks) {
25513481Sgiacomo.travaglini@arm.com  MockFoo* foo1 = new MockFoo;
25613481Sgiacomo.travaglini@arm.com  MockFoo* foo2 = new MockFoo;
25713481Sgiacomo.travaglini@arm.com
25813481Sgiacomo.travaglini@arm.com  // Invokes ON_CALL on foo1.
25913481Sgiacomo.travaglini@arm.com  ON_CALL(*foo1, Bar(_, _, _)).WillByDefault(Return('a'));
26013481Sgiacomo.travaglini@arm.com
26113481Sgiacomo.travaglini@arm.com  // Invokes EXPECT_CALL on foo2.
26213481Sgiacomo.travaglini@arm.com  EXPECT_CALL(*foo2, Bar2(_, _));
26313481Sgiacomo.travaglini@arm.com  EXPECT_CALL(*foo2, Bar2(1, _));
26413481Sgiacomo.travaglini@arm.com  EXPECT_CALL(*foo2, Bar3(_, _)).Times(AnyNumber());
26513481Sgiacomo.travaglini@arm.com  foo2->Bar2(2, 1);
26613481Sgiacomo.travaglini@arm.com  foo2->Bar2(1, 1);
26713481Sgiacomo.travaglini@arm.com
26813481Sgiacomo.travaglini@arm.com  // Both foo1 and foo2 are deliberately leaked.
26913481Sgiacomo.travaglini@arm.com}
27013481Sgiacomo.travaglini@arm.com
27113481Sgiacomo.travaglini@arm.comvoid TestCatchesLeakedMocksInAdHocTests() {
27213481Sgiacomo.travaglini@arm.com  MockFoo* foo = new MockFoo;
27313481Sgiacomo.travaglini@arm.com
27413481Sgiacomo.travaglini@arm.com  // Invokes EXPECT_CALL on foo.
27513481Sgiacomo.travaglini@arm.com  EXPECT_CALL(*foo, Bar2(_, _));
27613481Sgiacomo.travaglini@arm.com  foo->Bar2(2, 1);
27713481Sgiacomo.travaglini@arm.com
27813481Sgiacomo.travaglini@arm.com  // foo is deliberately leaked.
27913481Sgiacomo.travaglini@arm.com}
28013481Sgiacomo.travaglini@arm.com
28113481Sgiacomo.travaglini@arm.comint main(int argc, char **argv) {
28213481Sgiacomo.travaglini@arm.com  testing::InitGoogleMock(&argc, argv);
28313481Sgiacomo.travaglini@arm.com
28413481Sgiacomo.travaglini@arm.com  // Ensures that the tests pass no matter what value of
28513481Sgiacomo.travaglini@arm.com  // --gmock_catch_leaked_mocks and --gmock_verbose the user specifies.
28613481Sgiacomo.travaglini@arm.com  testing::GMOCK_FLAG(catch_leaked_mocks) = true;
28713481Sgiacomo.travaglini@arm.com  testing::GMOCK_FLAG(verbose) = "warning";
28813481Sgiacomo.travaglini@arm.com
28913481Sgiacomo.travaglini@arm.com  TestCatchesLeakedMocksInAdHocTests();
29013481Sgiacomo.travaglini@arm.com  return RUN_ALL_TESTS();
29113481Sgiacomo.travaglini@arm.com}
292