gmock-internal-utils_test.cc revision e35fdd936d133bf8a48de140a3c666897588a05
1e35fdd936d133bf8a48de140a3c666897588a05shiqian// Copyright 2007, Google Inc. 2e35fdd936d133bf8a48de140a3c666897588a05shiqian// All rights reserved. 3e35fdd936d133bf8a48de140a3c666897588a05shiqian// 4e35fdd936d133bf8a48de140a3c666897588a05shiqian// Redistribution and use in source and binary forms, with or without 5e35fdd936d133bf8a48de140a3c666897588a05shiqian// modification, are permitted provided that the following conditions are 6e35fdd936d133bf8a48de140a3c666897588a05shiqian// met: 7e35fdd936d133bf8a48de140a3c666897588a05shiqian// 8e35fdd936d133bf8a48de140a3c666897588a05shiqian// * Redistributions of source code must retain the above copyright 9e35fdd936d133bf8a48de140a3c666897588a05shiqian// notice, this list of conditions and the following disclaimer. 10e35fdd936d133bf8a48de140a3c666897588a05shiqian// * Redistributions in binary form must reproduce the above 11e35fdd936d133bf8a48de140a3c666897588a05shiqian// copyright notice, this list of conditions and the following disclaimer 12e35fdd936d133bf8a48de140a3c666897588a05shiqian// in the documentation and/or other materials provided with the 13e35fdd936d133bf8a48de140a3c666897588a05shiqian// distribution. 14e35fdd936d133bf8a48de140a3c666897588a05shiqian// * Neither the name of Google Inc. nor the names of its 15e35fdd936d133bf8a48de140a3c666897588a05shiqian// contributors may be used to endorse or promote products derived from 16e35fdd936d133bf8a48de140a3c666897588a05shiqian// this software without specific prior written permission. 17e35fdd936d133bf8a48de140a3c666897588a05shiqian// 18e35fdd936d133bf8a48de140a3c666897588a05shiqian// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19e35fdd936d133bf8a48de140a3c666897588a05shiqian// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20e35fdd936d133bf8a48de140a3c666897588a05shiqian// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21e35fdd936d133bf8a48de140a3c666897588a05shiqian// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22e35fdd936d133bf8a48de140a3c666897588a05shiqian// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23e35fdd936d133bf8a48de140a3c666897588a05shiqian// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24e35fdd936d133bf8a48de140a3c666897588a05shiqian// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25e35fdd936d133bf8a48de140a3c666897588a05shiqian// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26e35fdd936d133bf8a48de140a3c666897588a05shiqian// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27e35fdd936d133bf8a48de140a3c666897588a05shiqian// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28e35fdd936d133bf8a48de140a3c666897588a05shiqian// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29e35fdd936d133bf8a48de140a3c666897588a05shiqian// 30e35fdd936d133bf8a48de140a3c666897588a05shiqian// Author: wan@google.com (Zhanyong Wan) 31e35fdd936d133bf8a48de140a3c666897588a05shiqian 32e35fdd936d133bf8a48de140a3c666897588a05shiqian// Google Mock - a framework for writing C++ mock classes. 33e35fdd936d133bf8a48de140a3c666897588a05shiqian// 34e35fdd936d133bf8a48de140a3c666897588a05shiqian// This file tests the internal utilities. 35e35fdd936d133bf8a48de140a3c666897588a05shiqian 36e35fdd936d133bf8a48de140a3c666897588a05shiqian#include <gmock/internal/gmock-internal-utils.h> 37e35fdd936d133bf8a48de140a3c666897588a05shiqian#include <map> 38e35fdd936d133bf8a48de140a3c666897588a05shiqian#include <string> 39e35fdd936d133bf8a48de140a3c666897588a05shiqian#include <sstream> 40e35fdd936d133bf8a48de140a3c666897588a05shiqian#include <vector> 41e35fdd936d133bf8a48de140a3c666897588a05shiqian#include <gmock/gmock.h> 42e35fdd936d133bf8a48de140a3c666897588a05shiqian#include <gmock/internal/gmock-port.h> 43e35fdd936d133bf8a48de140a3c666897588a05shiqian#include <gtest/gtest.h> 44e35fdd936d133bf8a48de140a3c666897588a05shiqian#include <gtest/gtest-spi.h> 45e35fdd936d133bf8a48de140a3c666897588a05shiqian 46e35fdd936d133bf8a48de140a3c666897588a05shiqiannamespace testing { 47e35fdd936d133bf8a48de140a3c666897588a05shiqiannamespace internal { 48e35fdd936d133bf8a48de140a3c666897588a05shiqian 49e35fdd936d133bf8a48de140a3c666897588a05shiqiannamespace { 50e35fdd936d133bf8a48de140a3c666897588a05shiqian 51e35fdd936d133bf8a48de140a3c666897588a05shiqianusing ::std::tr1::tuple; 52e35fdd936d133bf8a48de140a3c666897588a05shiqian 53e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that CompileAssertTypesEqual compiles when the type arguments are 54e35fdd936d133bf8a48de140a3c666897588a05shiqian// equal. 55e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(CompileAssertTypesEqual, CompilesWhenTypesAreEqual) { 56e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<void, void>(); 57e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<int*, int*>(); 58e35fdd936d133bf8a48de140a3c666897588a05shiqian} 59e35fdd936d133bf8a48de140a3c666897588a05shiqian 60e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that RemoveReference does not affect non-reference types. 61e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(RemoveReferenceTest, DoesNotAffectNonReferenceType) { 62e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<int, RemoveReference<int>::type>(); 63e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<const char, RemoveReference<const char>::type>(); 64e35fdd936d133bf8a48de140a3c666897588a05shiqian} 65e35fdd936d133bf8a48de140a3c666897588a05shiqian 66e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that RemoveReference removes reference from reference types. 67e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(RemoveReferenceTest, RemovesReference) { 68e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<int, RemoveReference<int&>::type>(); 69e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<const char, RemoveReference<const char&>::type>(); 70e35fdd936d133bf8a48de140a3c666897588a05shiqian} 71e35fdd936d133bf8a48de140a3c666897588a05shiqian 72e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests GMOCK_REMOVE_REFERENCE. 73e35fdd936d133bf8a48de140a3c666897588a05shiqian 74e35fdd936d133bf8a48de140a3c666897588a05shiqiantemplate <typename T1, typename T2> 75e35fdd936d133bf8a48de140a3c666897588a05shiqianvoid TestGMockRemoveReference() { 76e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<T1, GMOCK_REMOVE_REFERENCE(T2)>(); 77e35fdd936d133bf8a48de140a3c666897588a05shiqian} 78e35fdd936d133bf8a48de140a3c666897588a05shiqian 79e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(RemoveReferenceTest, MacroVersion) { 80e35fdd936d133bf8a48de140a3c666897588a05shiqian TestGMockRemoveReference<int, int>(); 81e35fdd936d133bf8a48de140a3c666897588a05shiqian TestGMockRemoveReference<const char, const char&>(); 82e35fdd936d133bf8a48de140a3c666897588a05shiqian} 83e35fdd936d133bf8a48de140a3c666897588a05shiqian 84e35fdd936d133bf8a48de140a3c666897588a05shiqian 85e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that RemoveConst does not affect non-const types. 86e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(RemoveConstTest, DoesNotAffectNonConstType) { 87e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<int, RemoveConst<int>::type>(); 88e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<char&, RemoveConst<char&>::type>(); 89e35fdd936d133bf8a48de140a3c666897588a05shiqian} 90e35fdd936d133bf8a48de140a3c666897588a05shiqian 91e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that RemoveConst removes const from const types. 92e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(RemoveConstTest, RemovesConst) { 93e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<int, RemoveConst<const int>::type>(); 94e35fdd936d133bf8a48de140a3c666897588a05shiqian} 95e35fdd936d133bf8a48de140a3c666897588a05shiqian 96e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests GMOCK_REMOVE_CONST. 97e35fdd936d133bf8a48de140a3c666897588a05shiqian 98e35fdd936d133bf8a48de140a3c666897588a05shiqiantemplate <typename T1, typename T2> 99e35fdd936d133bf8a48de140a3c666897588a05shiqianvoid TestGMockRemoveConst() { 100e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<T1, GMOCK_REMOVE_CONST(T2)>(); 101e35fdd936d133bf8a48de140a3c666897588a05shiqian} 102e35fdd936d133bf8a48de140a3c666897588a05shiqian 103e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(RemoveConstTest, MacroVersion) { 104e35fdd936d133bf8a48de140a3c666897588a05shiqian TestGMockRemoveConst<int, int>(); 105e35fdd936d133bf8a48de140a3c666897588a05shiqian TestGMockRemoveConst<double&, double&>(); 106e35fdd936d133bf8a48de140a3c666897588a05shiqian TestGMockRemoveConst<char, const char>(); 107e35fdd936d133bf8a48de140a3c666897588a05shiqian} 108e35fdd936d133bf8a48de140a3c666897588a05shiqian 109e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that AddReference does not affect reference types. 110e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(AddReferenceTest, DoesNotAffectReferenceType) { 111e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<int&, AddReference<int&>::type>(); 112e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<const char&, AddReference<const char&>::type>(); 113e35fdd936d133bf8a48de140a3c666897588a05shiqian} 114e35fdd936d133bf8a48de140a3c666897588a05shiqian 115e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that AddReference adds reference to non-reference types. 116e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(AddReferenceTest, AddsReference) { 117e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<int&, AddReference<int>::type>(); 118e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<const char&, AddReference<const char>::type>(); 119e35fdd936d133bf8a48de140a3c666897588a05shiqian} 120e35fdd936d133bf8a48de140a3c666897588a05shiqian 121e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests GMOCK_ADD_REFERENCE. 122e35fdd936d133bf8a48de140a3c666897588a05shiqian 123e35fdd936d133bf8a48de140a3c666897588a05shiqiantemplate <typename T1, typename T2> 124e35fdd936d133bf8a48de140a3c666897588a05shiqianvoid TestGMockAddReference() { 125e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<T1, GMOCK_ADD_REFERENCE(T2)>(); 126e35fdd936d133bf8a48de140a3c666897588a05shiqian} 127e35fdd936d133bf8a48de140a3c666897588a05shiqian 128e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(AddReferenceTest, MacroVersion) { 129e35fdd936d133bf8a48de140a3c666897588a05shiqian TestGMockAddReference<int&, int>(); 130e35fdd936d133bf8a48de140a3c666897588a05shiqian TestGMockAddReference<const char&, const char&>(); 131e35fdd936d133bf8a48de140a3c666897588a05shiqian} 132e35fdd936d133bf8a48de140a3c666897588a05shiqian 133e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests GMOCK_REFERENCE_TO_CONST. 134e35fdd936d133bf8a48de140a3c666897588a05shiqian 135e35fdd936d133bf8a48de140a3c666897588a05shiqiantemplate <typename T1, typename T2> 136e35fdd936d133bf8a48de140a3c666897588a05shiqianvoid TestGMockReferenceToConst() { 137e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<T1, GMOCK_REFERENCE_TO_CONST(T2)>(); 138e35fdd936d133bf8a48de140a3c666897588a05shiqian} 139e35fdd936d133bf8a48de140a3c666897588a05shiqian 140e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(GMockReferenceToConstTest, Works) { 141e35fdd936d133bf8a48de140a3c666897588a05shiqian TestGMockReferenceToConst<const char&, char>(); 142e35fdd936d133bf8a48de140a3c666897588a05shiqian TestGMockReferenceToConst<const int&, const int>(); 143e35fdd936d133bf8a48de140a3c666897588a05shiqian TestGMockReferenceToConst<const double&, double>(); 144e35fdd936d133bf8a48de140a3c666897588a05shiqian TestGMockReferenceToConst<const string&, const string&>(); 145e35fdd936d133bf8a48de140a3c666897588a05shiqian} 146e35fdd936d133bf8a48de140a3c666897588a05shiqian 147e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(PointeeOfTest, WorksForSmartPointers) { 148e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<const char, 149e35fdd936d133bf8a48de140a3c666897588a05shiqian PointeeOf<internal::linked_ptr<const char> >::type>(); 150e35fdd936d133bf8a48de140a3c666897588a05shiqian} 151e35fdd936d133bf8a48de140a3c666897588a05shiqian 152e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(PointeeOfTest, WorksForRawPointers) { 153e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<int, PointeeOf<int*>::type>(); 154e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<const char, PointeeOf<const char*>::type>(); 155e35fdd936d133bf8a48de140a3c666897588a05shiqian CompileAssertTypesEqual<void, PointeeOf<void*>::type>(); 156e35fdd936d133bf8a48de140a3c666897588a05shiqian} 157e35fdd936d133bf8a48de140a3c666897588a05shiqian 158e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(GetRawPointerTest, WorksForSmartPointers) { 159e35fdd936d133bf8a48de140a3c666897588a05shiqian const char* const raw_p4 = new const char('a'); // NOLINT 160e35fdd936d133bf8a48de140a3c666897588a05shiqian const internal::linked_ptr<const char> p4(raw_p4); 161e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_EQ(raw_p4, GetRawPointer(p4)); 162e35fdd936d133bf8a48de140a3c666897588a05shiqian} 163e35fdd936d133bf8a48de140a3c666897588a05shiqian 164e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(GetRawPointerTest, WorksForRawPointers) { 165e35fdd936d133bf8a48de140a3c666897588a05shiqian int* p = NULL; 166e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_EQ(NULL, GetRawPointer(p)); 167e35fdd936d133bf8a48de140a3c666897588a05shiqian int n = 1; 168e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_EQ(&n, GetRawPointer(&n)); 169e35fdd936d133bf8a48de140a3c666897588a05shiqian} 170e35fdd936d133bf8a48de140a3c666897588a05shiqian 171e35fdd936d133bf8a48de140a3c666897588a05shiqianclass Base {}; 172e35fdd936d133bf8a48de140a3c666897588a05shiqianclass Derived : public Base {}; 173e35fdd936d133bf8a48de140a3c666897588a05shiqian 174e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that ImplicitlyConvertible<T1, T2>::value is a compile-time constant. 175e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(ImplicitlyConvertibleTest, ValueIsCompileTimeConstant) { 176e35fdd936d133bf8a48de140a3c666897588a05shiqian GMOCK_COMPILE_ASSERT((ImplicitlyConvertible<int, int>::value), const_true); 177e35fdd936d133bf8a48de140a3c666897588a05shiqian GMOCK_COMPILE_ASSERT((!ImplicitlyConvertible<void*, int*>::value), const_false); 178e35fdd936d133bf8a48de140a3c666897588a05shiqian} 179e35fdd936d133bf8a48de140a3c666897588a05shiqian 180e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that ImplicitlyConvertible<T1, T2>::value is true when T1 can 181e35fdd936d133bf8a48de140a3c666897588a05shiqian// be implicitly converted to T2. 182e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(ImplicitlyConvertibleTest, ValueIsTrueWhenConvertible) { 183e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE((ImplicitlyConvertible<int, double>::value)); 184e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE((ImplicitlyConvertible<double, int>::value)); 185e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE((ImplicitlyConvertible<int*, void*>::value)); 186e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE((ImplicitlyConvertible<int*, const int*>::value)); 187e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE((ImplicitlyConvertible<Derived&, const Base&>::value)); 188e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE((ImplicitlyConvertible<const Base, Base>::value)); 189e35fdd936d133bf8a48de140a3c666897588a05shiqian} 190e35fdd936d133bf8a48de140a3c666897588a05shiqian 191e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that ImplicitlyConvertible<T1, T2>::value is false when T1 192e35fdd936d133bf8a48de140a3c666897588a05shiqian// cannot be implicitly converted to T2. 193e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(ImplicitlyConvertibleTest, ValueIsFalseWhenNotConvertible) { 194e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE((ImplicitlyConvertible<double, int*>::value)); 195e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE((ImplicitlyConvertible<void*, int*>::value)); 196e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE((ImplicitlyConvertible<const int*, int*>::value)); 197e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE((ImplicitlyConvertible<Base&, Derived&>::value)); 198e35fdd936d133bf8a48de140a3c666897588a05shiqian} 199e35fdd936d133bf8a48de140a3c666897588a05shiqian 200e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that IsAProtocolMessage<T>::value is a compile-time constant. 201e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(IsAProtocolMessageTest, ValueIsCompileTimeConstant) { 202e35fdd936d133bf8a48de140a3c666897588a05shiqian GMOCK_COMPILE_ASSERT(IsAProtocolMessage<ProtocolMessage>::value, const_true); 203e35fdd936d133bf8a48de140a3c666897588a05shiqian GMOCK_COMPILE_ASSERT(!IsAProtocolMessage<int>::value, const_false); 204e35fdd936d133bf8a48de140a3c666897588a05shiqian} 205e35fdd936d133bf8a48de140a3c666897588a05shiqian 206e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that IsAProtocolMessage<T>::value is true when T is 207e35fdd936d133bf8a48de140a3c666897588a05shiqian// ProtocolMessage or a sub-class of it. 208e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(IsAProtocolMessageTest, ValueIsTrueWhenTypeIsAProtocolMessage) { 209e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE(IsAProtocolMessage<ProtocolMessage>::value); 210e35fdd936d133bf8a48de140a3c666897588a05shiqian#if GMOCK_HAS_PROTOBUF_ 211e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE(IsAProtocolMessage<const TestMessage>::value); 212e35fdd936d133bf8a48de140a3c666897588a05shiqian#endif // GMOCK_HAS_PROTOBUF_ 213e35fdd936d133bf8a48de140a3c666897588a05shiqian} 214e35fdd936d133bf8a48de140a3c666897588a05shiqian 215e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that IsAProtocolMessage<T>::value is false when T is neither 216e35fdd936d133bf8a48de140a3c666897588a05shiqian// ProtocolMessage nor a sub-class of it. 217e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(IsAProtocolMessageTest, ValueIsFalseWhenTypeIsNotAProtocolMessage) { 218e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE(IsAProtocolMessage<int>::value); 219e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE(IsAProtocolMessage<const Base>::value); 220e35fdd936d133bf8a48de140a3c666897588a05shiqian} 221e35fdd936d133bf8a48de140a3c666897588a05shiqian 222e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests IsContainerTest. 223e35fdd936d133bf8a48de140a3c666897588a05shiqian 224e35fdd936d133bf8a48de140a3c666897588a05shiqianclass NonContainer {}; 225e35fdd936d133bf8a48de140a3c666897588a05shiqian 226e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(IsContainerTestTest, WorksForNonContainer) { 227e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<int>(0))); 228e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<char[5]>(0))); 229e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<NonContainer>(0))); 230e35fdd936d133bf8a48de140a3c666897588a05shiqian} 231e35fdd936d133bf8a48de140a3c666897588a05shiqian 232e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(IsContainerTestTest, WorksForContainer) { 233e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_EQ(sizeof(IsContainer), sizeof(IsContainerTest<std::vector<bool> >(0))); 234e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_EQ(sizeof(IsContainer), sizeof(IsContainerTest<std::map<int, double> >(0))); 235e35fdd936d133bf8a48de140a3c666897588a05shiqian} 236e35fdd936d133bf8a48de140a3c666897588a05shiqian 237e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests the TupleMatches() template function. 238e35fdd936d133bf8a48de140a3c666897588a05shiqian 239e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(TupleMatchesTest, WorksForSize0) { 240e35fdd936d133bf8a48de140a3c666897588a05shiqian tuple<> matchers; 241e35fdd936d133bf8a48de140a3c666897588a05shiqian tuple<> values; 242e35fdd936d133bf8a48de140a3c666897588a05shiqian 243e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE(TupleMatches(matchers, values)); 244e35fdd936d133bf8a48de140a3c666897588a05shiqian} 245e35fdd936d133bf8a48de140a3c666897588a05shiqian 246e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(TupleMatchesTest, WorksForSize1) { 247e35fdd936d133bf8a48de140a3c666897588a05shiqian tuple<Matcher<int> > matchers(Eq(1)); 248e35fdd936d133bf8a48de140a3c666897588a05shiqian tuple<int> values1(1), 249e35fdd936d133bf8a48de140a3c666897588a05shiqian values2(2); 250e35fdd936d133bf8a48de140a3c666897588a05shiqian 251e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE(TupleMatches(matchers, values1)); 252e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE(TupleMatches(matchers, values2)); 253e35fdd936d133bf8a48de140a3c666897588a05shiqian} 254e35fdd936d133bf8a48de140a3c666897588a05shiqian 255e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(TupleMatchesTest, WorksForSize2) { 256e35fdd936d133bf8a48de140a3c666897588a05shiqian tuple<Matcher<int>, Matcher<char> > matchers(Eq(1), Eq('a')); 257e35fdd936d133bf8a48de140a3c666897588a05shiqian tuple<int, char> values1(1, 'a'), 258e35fdd936d133bf8a48de140a3c666897588a05shiqian values2(1, 'b'), 259e35fdd936d133bf8a48de140a3c666897588a05shiqian values3(2, 'a'), 260e35fdd936d133bf8a48de140a3c666897588a05shiqian values4(2, 'b'); 261e35fdd936d133bf8a48de140a3c666897588a05shiqian 262e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE(TupleMatches(matchers, values1)); 263e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE(TupleMatches(matchers, values2)); 264e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE(TupleMatches(matchers, values3)); 265e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE(TupleMatches(matchers, values4)); 266e35fdd936d133bf8a48de140a3c666897588a05shiqian} 267e35fdd936d133bf8a48de140a3c666897588a05shiqian 268e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(TupleMatchesTest, WorksForSize5) { 269e35fdd936d133bf8a48de140a3c666897588a05shiqian tuple<Matcher<int>, Matcher<char>, Matcher<bool>, Matcher<long>, // NOLINT 270e35fdd936d133bf8a48de140a3c666897588a05shiqian Matcher<string> > 271e35fdd936d133bf8a48de140a3c666897588a05shiqian matchers(Eq(1), Eq('a'), Eq(true), Eq(2L), Eq("hi")); 272e35fdd936d133bf8a48de140a3c666897588a05shiqian tuple<int, char, bool, long, string> // NOLINT 273e35fdd936d133bf8a48de140a3c666897588a05shiqian values1(1, 'a', true, 2L, "hi"), 274e35fdd936d133bf8a48de140a3c666897588a05shiqian values2(1, 'a', true, 2L, "hello"), 275e35fdd936d133bf8a48de140a3c666897588a05shiqian values3(2, 'a', true, 2L, "hi"); 276e35fdd936d133bf8a48de140a3c666897588a05shiqian 277e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE(TupleMatches(matchers, values1)); 278e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE(TupleMatches(matchers, values2)); 279e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE(TupleMatches(matchers, values3)); 280e35fdd936d133bf8a48de140a3c666897588a05shiqian} 281e35fdd936d133bf8a48de140a3c666897588a05shiqian 282e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that Assert(true, ...) succeeds. 283e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(AssertTest, SucceedsOnTrue) { 284e35fdd936d133bf8a48de140a3c666897588a05shiqian Assert(true, __FILE__, __LINE__, "This should succeed."); 285e35fdd936d133bf8a48de140a3c666897588a05shiqian Assert(true, __FILE__, __LINE__); // This should succeed too. 286e35fdd936d133bf8a48de140a3c666897588a05shiqian} 287e35fdd936d133bf8a48de140a3c666897588a05shiqian 288e35fdd936d133bf8a48de140a3c666897588a05shiqian#ifdef GTEST_HAS_DEATH_TEST 289e35fdd936d133bf8a48de140a3c666897588a05shiqian 290e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that Assert(false, ...) generates a fatal failure. 291e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(AssertTest, FailsFatallyOnFalse) { 292e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_DEATH({ // NOLINT 293e35fdd936d133bf8a48de140a3c666897588a05shiqian Assert(false, __FILE__, __LINE__, "This should fail."); 294e35fdd936d133bf8a48de140a3c666897588a05shiqian }, ""); 295e35fdd936d133bf8a48de140a3c666897588a05shiqian 296e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_DEATH({ // NOLINT 297e35fdd936d133bf8a48de140a3c666897588a05shiqian Assert(false, __FILE__, __LINE__); 298e35fdd936d133bf8a48de140a3c666897588a05shiqian }, ""); 299e35fdd936d133bf8a48de140a3c666897588a05shiqian} 300e35fdd936d133bf8a48de140a3c666897588a05shiqian 301e35fdd936d133bf8a48de140a3c666897588a05shiqian#endif // GTEST_HAS_DEATH_TEST 302e35fdd936d133bf8a48de140a3c666897588a05shiqian 303e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that Expect(true, ...) succeeds. 304e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(ExpectTest, SucceedsOnTrue) { 305e35fdd936d133bf8a48de140a3c666897588a05shiqian Expect(true, __FILE__, __LINE__, "This should succeed."); 306e35fdd936d133bf8a48de140a3c666897588a05shiqian Expect(true, __FILE__, __LINE__); // This should succeed too. 307e35fdd936d133bf8a48de140a3c666897588a05shiqian} 308e35fdd936d133bf8a48de140a3c666897588a05shiqian 309e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that Expect(false, ...) generates a non-fatal failure. 310e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(ExpectTest, FailsNonfatallyOnFalse) { 311e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_NONFATAL_FAILURE({ // NOLINT 312e35fdd936d133bf8a48de140a3c666897588a05shiqian Expect(false, __FILE__, __LINE__, "This should fail."); 313e35fdd936d133bf8a48de140a3c666897588a05shiqian }, "This should fail"); 314e35fdd936d133bf8a48de140a3c666897588a05shiqian 315e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_NONFATAL_FAILURE({ // NOLINT 316e35fdd936d133bf8a48de140a3c666897588a05shiqian Expect(false, __FILE__, __LINE__); 317e35fdd936d133bf8a48de140a3c666897588a05shiqian }, "Expectation failed"); 318e35fdd936d133bf8a48de140a3c666897588a05shiqian} 319e35fdd936d133bf8a48de140a3c666897588a05shiqian 320e35fdd936d133bf8a48de140a3c666897588a05shiqian// TODO(wan@google.com): find a way to re-enable these tests. 321e35fdd936d133bf8a48de140a3c666897588a05shiqian#if 0 322e35fdd936d133bf8a48de140a3c666897588a05shiqian 323e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests the Log() function. 324e35fdd936d133bf8a48de140a3c666897588a05shiqian 325e35fdd936d133bf8a48de140a3c666897588a05shiqian// Verifies that Log() behaves correctly for the given verbosity level 326e35fdd936d133bf8a48de140a3c666897588a05shiqian// and log severity. 327e35fdd936d133bf8a48de140a3c666897588a05shiqianvoid TestLogWithSeverity(const string& verbosity, LogSeverity severity, 328e35fdd936d133bf8a48de140a3c666897588a05shiqian bool should_print) { 329e35fdd936d133bf8a48de140a3c666897588a05shiqian const string old_flag = GMOCK_FLAG(verbose); 330e35fdd936d133bf8a48de140a3c666897588a05shiqian GMOCK_FLAG(verbose) = verbosity; 331e35fdd936d133bf8a48de140a3c666897588a05shiqian CaptureTestStdout(); 332e35fdd936d133bf8a48de140a3c666897588a05shiqian Log(severity, "Test log.\n", 0); 333e35fdd936d133bf8a48de140a3c666897588a05shiqian if (should_print) { 334e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_PRED2(RE::FullMatch, 335e35fdd936d133bf8a48de140a3c666897588a05shiqian GetCapturedTestStdout(), 336e35fdd936d133bf8a48de140a3c666897588a05shiqian severity == WARNING ? 337e35fdd936d133bf8a48de140a3c666897588a05shiqian "\nGMOCK WARNING:\nTest log\\.\nStack trace:\n[\\s\\S]*" : 338e35fdd936d133bf8a48de140a3c666897588a05shiqian "\nTest log\\.\nStack trace:\n[\\s\\S]*"); 339e35fdd936d133bf8a48de140a3c666897588a05shiqian } else { 340e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_EQ("", GetCapturedTestStdout()); 341e35fdd936d133bf8a48de140a3c666897588a05shiqian } 342e35fdd936d133bf8a48de140a3c666897588a05shiqian GMOCK_FLAG(verbose) = old_flag; 343e35fdd936d133bf8a48de140a3c666897588a05shiqian} 344e35fdd936d133bf8a48de140a3c666897588a05shiqian 345e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that when the stack_frames_to_skip parameter is negative, 346e35fdd936d133bf8a48de140a3c666897588a05shiqian// Log() doesn't include the stack trace in the output. 347e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(LogTest, NoStackTraceWhenStackFramesToSkipIsNegative) { 348e35fdd936d133bf8a48de140a3c666897588a05shiqian GMOCK_FLAG(verbose) = kInfoVerbosity; 349e35fdd936d133bf8a48de140a3c666897588a05shiqian CaptureTestStdout(); 350e35fdd936d133bf8a48de140a3c666897588a05shiqian Log(INFO, "Test log.\n", -1); 351e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_EQ("\nTest log.\n", GetCapturedTestStdout()); 352e35fdd936d133bf8a48de140a3c666897588a05shiqian} 353e35fdd936d133bf8a48de140a3c666897588a05shiqian 354e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that in opt mode, a positive stack_frames_to_skip argument is 355e35fdd936d133bf8a48de140a3c666897588a05shiqian// treated as 0. 356e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(LogTest, NoSkippingStackFrameInOptMode) { 357e35fdd936d133bf8a48de140a3c666897588a05shiqian CaptureTestStdout(); 358e35fdd936d133bf8a48de140a3c666897588a05shiqian Log(WARNING, "Test log.\n", 100); 359e35fdd936d133bf8a48de140a3c666897588a05shiqian const string log = GetCapturedTestStdout(); 360e35fdd936d133bf8a48de140a3c666897588a05shiqian#ifdef NDEBUG 361e35fdd936d133bf8a48de140a3c666897588a05shiqian // In opt mode, no stack frame should be skipped. 362e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_THAT(log, ContainsRegex("\nGMOCK WARNING:\n" 363e35fdd936d133bf8a48de140a3c666897588a05shiqian "Test log\\.\n" 364e35fdd936d133bf8a48de140a3c666897588a05shiqian "Stack trace:\n" 365e35fdd936d133bf8a48de140a3c666897588a05shiqian ".+")); 366e35fdd936d133bf8a48de140a3c666897588a05shiqian#else 367e35fdd936d133bf8a48de140a3c666897588a05shiqian // In dbg mode, the stack frames should be skipped. 368e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_EQ("\nGMOCK WARNING:\n" 369e35fdd936d133bf8a48de140a3c666897588a05shiqian "Test log.\n" 370e35fdd936d133bf8a48de140a3c666897588a05shiqian "Stack trace:\n", log); 371e35fdd936d133bf8a48de140a3c666897588a05shiqian#endif // NDEBUG 372e35fdd936d133bf8a48de140a3c666897588a05shiqian} 373e35fdd936d133bf8a48de140a3c666897588a05shiqian 374e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that all logs are printed when the value of the 375e35fdd936d133bf8a48de140a3c666897588a05shiqian// --gmock_verbose flag is "info". 376e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(LogTest, AllLogsArePrintedWhenVerbosityIsInfo) { 377e35fdd936d133bf8a48de140a3c666897588a05shiqian TestLogWithSeverity(kInfoVerbosity, INFO, true); 378e35fdd936d133bf8a48de140a3c666897588a05shiqian TestLogWithSeverity(kInfoVerbosity, WARNING, true); 379e35fdd936d133bf8a48de140a3c666897588a05shiqian} 380e35fdd936d133bf8a48de140a3c666897588a05shiqian 381e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that only warnings are printed when the value of the 382e35fdd936d133bf8a48de140a3c666897588a05shiqian// --gmock_verbose flag is "warning". 383e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(LogTest, OnlyWarningsArePrintedWhenVerbosityIsWarning) { 384e35fdd936d133bf8a48de140a3c666897588a05shiqian TestLogWithSeverity(kWarningVerbosity, INFO, false); 385e35fdd936d133bf8a48de140a3c666897588a05shiqian TestLogWithSeverity(kWarningVerbosity, WARNING, true); 386e35fdd936d133bf8a48de140a3c666897588a05shiqian} 387e35fdd936d133bf8a48de140a3c666897588a05shiqian 388e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that no logs are printed when the value of the 389e35fdd936d133bf8a48de140a3c666897588a05shiqian// --gmock_verbose flag is "error". 390e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(LogTest, NoLogsArePrintedWhenVerbosityIsError) { 391e35fdd936d133bf8a48de140a3c666897588a05shiqian TestLogWithSeverity(kErrorVerbosity, INFO, false); 392e35fdd936d133bf8a48de140a3c666897588a05shiqian TestLogWithSeverity(kErrorVerbosity, WARNING, false); 393e35fdd936d133bf8a48de140a3c666897588a05shiqian} 394e35fdd936d133bf8a48de140a3c666897588a05shiqian 395e35fdd936d133bf8a48de140a3c666897588a05shiqian// Tests that only warnings are printed when the value of the 396e35fdd936d133bf8a48de140a3c666897588a05shiqian// --gmock_verbose flag is invalid. 397e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(LogTest, OnlyWarningsArePrintedWhenVerbosityIsInvalid) { 398e35fdd936d133bf8a48de140a3c666897588a05shiqian TestLogWithSeverity("invalid", INFO, false); 399e35fdd936d133bf8a48de140a3c666897588a05shiqian TestLogWithSeverity("invalid", WARNING, true); 400e35fdd936d133bf8a48de140a3c666897588a05shiqian} 401e35fdd936d133bf8a48de140a3c666897588a05shiqian 402e35fdd936d133bf8a48de140a3c666897588a05shiqian#endif // 0 403e35fdd936d133bf8a48de140a3c666897588a05shiqian 404e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(TypeTraitsTest, true_type) { 405e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE(true_type::value); 406e35fdd936d133bf8a48de140a3c666897588a05shiqian} 407e35fdd936d133bf8a48de140a3c666897588a05shiqian 408e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(TypeTraitsTest, false_type) { 409e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE(false_type::value); 410e35fdd936d133bf8a48de140a3c666897588a05shiqian} 411e35fdd936d133bf8a48de140a3c666897588a05shiqian 412e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(TypeTraitsTest, is_reference) { 413e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE(is_reference<int>::value); 414e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE(is_reference<char*>::value); 415e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE(is_reference<const int&>::value); 416e35fdd936d133bf8a48de140a3c666897588a05shiqian} 417e35fdd936d133bf8a48de140a3c666897588a05shiqian 418e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(TypeTraitsTest, is_pointer) { 419e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE(is_pointer<int>::value); 420e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE(is_pointer<char&>::value); 421e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE(is_pointer<const int*>::value); 422e35fdd936d133bf8a48de140a3c666897588a05shiqian} 423e35fdd936d133bf8a48de140a3c666897588a05shiqian 424e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(TypeTraitsTest, type_equals) { 425e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE((type_equals<int, const int>::value)); 426e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE((type_equals<int, int&>::value)); 427e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_FALSE((type_equals<int, double>::value)); 428e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE((type_equals<char, char>::value)); 429e35fdd936d133bf8a48de140a3c666897588a05shiqian} 430e35fdd936d133bf8a48de140a3c666897588a05shiqian 431e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(TypeTraitsTest, remove_reference) { 432e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE((type_equals<char, remove_reference<char&>::type>::value)); 433e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE((type_equals<const int, 434e35fdd936d133bf8a48de140a3c666897588a05shiqian remove_reference<const int&>::type>::value)); 435e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE((type_equals<int, remove_reference<int>::type>::value)); 436e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_TRUE((type_equals<double*, remove_reference<double*>::type>::value)); 437e35fdd936d133bf8a48de140a3c666897588a05shiqian} 438e35fdd936d133bf8a48de140a3c666897588a05shiqian 439e35fdd936d133bf8a48de140a3c666897588a05shiqian// TODO(wan@google.com): find a way to re-enable these tests. 440e35fdd936d133bf8a48de140a3c666897588a05shiqian#if 0 441e35fdd936d133bf8a48de140a3c666897588a05shiqian 442e35fdd936d133bf8a48de140a3c666897588a05shiqian// Verifies that Log() behaves correctly for the given verbosity level 443e35fdd936d133bf8a48de140a3c666897588a05shiqian// and log severity. 444e35fdd936d133bf8a48de140a3c666897588a05shiqianstring GrabOutput(void(*logger)(), const char* verbosity) { 445e35fdd936d133bf8a48de140a3c666897588a05shiqian const string saved_flag = GMOCK_FLAG(verbose); 446e35fdd936d133bf8a48de140a3c666897588a05shiqian GMOCK_FLAG(verbose) = verbosity; 447e35fdd936d133bf8a48de140a3c666897588a05shiqian CaptureTestStdout(); 448e35fdd936d133bf8a48de140a3c666897588a05shiqian logger(); 449e35fdd936d133bf8a48de140a3c666897588a05shiqian GMOCK_FLAG(verbose) = saved_flag; 450e35fdd936d133bf8a48de140a3c666897588a05shiqian return GetCapturedTestStdout(); 451e35fdd936d133bf8a48de140a3c666897588a05shiqian} 452e35fdd936d133bf8a48de140a3c666897588a05shiqian 453e35fdd936d133bf8a48de140a3c666897588a05shiqianclass DummyMock { 454e35fdd936d133bf8a48de140a3c666897588a05shiqian public: 455e35fdd936d133bf8a48de140a3c666897588a05shiqian MOCK_METHOD0(TestMethod, void()); 456e35fdd936d133bf8a48de140a3c666897588a05shiqian MOCK_METHOD1(TestMethodArg, void(int dummy)); 457e35fdd936d133bf8a48de140a3c666897588a05shiqian}; 458e35fdd936d133bf8a48de140a3c666897588a05shiqian 459e35fdd936d133bf8a48de140a3c666897588a05shiqianvoid ExpectCallLogger() { 460e35fdd936d133bf8a48de140a3c666897588a05shiqian DummyMock mock; 461e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_CALL(mock, TestMethod()); 462e35fdd936d133bf8a48de140a3c666897588a05shiqian mock.TestMethod(); 463e35fdd936d133bf8a48de140a3c666897588a05shiqian}; 464e35fdd936d133bf8a48de140a3c666897588a05shiqian 465e35fdd936d133bf8a48de140a3c666897588a05shiqian// Verifies that EXPECT_CALL logs if the --gmock_verbose flag is set to "info". 466e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(ExpectCallTest, LogsWhenVerbosityIsInfo) { 467e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_THAT(GrabOutput(ExpectCallLogger, kInfoVerbosity), 468e35fdd936d133bf8a48de140a3c666897588a05shiqian HasSubstr("EXPECT_CALL(mock, TestMethod())")); 469e35fdd936d133bf8a48de140a3c666897588a05shiqian} 470e35fdd936d133bf8a48de140a3c666897588a05shiqian 471e35fdd936d133bf8a48de140a3c666897588a05shiqian// Verifies that EXPECT_CALL doesn't log 472e35fdd936d133bf8a48de140a3c666897588a05shiqian// if the --gmock_verbose flag is set to "warning". 473e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(ExpectCallTest, DoesNotLogWhenVerbosityIsWarning) { 474e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_EQ("", GrabOutput(ExpectCallLogger, kWarningVerbosity)); 475e35fdd936d133bf8a48de140a3c666897588a05shiqian} 476e35fdd936d133bf8a48de140a3c666897588a05shiqian 477e35fdd936d133bf8a48de140a3c666897588a05shiqian// Verifies that EXPECT_CALL doesn't log 478e35fdd936d133bf8a48de140a3c666897588a05shiqian// if the --gmock_verbose flag is set to "error". 479e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(ExpectCallTest, DoesNotLogWhenVerbosityIsError) { 480e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_EQ("", GrabOutput(ExpectCallLogger, kErrorVerbosity)); 481e35fdd936d133bf8a48de140a3c666897588a05shiqian} 482e35fdd936d133bf8a48de140a3c666897588a05shiqian 483e35fdd936d133bf8a48de140a3c666897588a05shiqianvoid OnCallLogger() { 484e35fdd936d133bf8a48de140a3c666897588a05shiqian DummyMock mock; 485e35fdd936d133bf8a48de140a3c666897588a05shiqian ON_CALL(mock, TestMethod()); 486e35fdd936d133bf8a48de140a3c666897588a05shiqian}; 487e35fdd936d133bf8a48de140a3c666897588a05shiqian 488e35fdd936d133bf8a48de140a3c666897588a05shiqian// Verifies that ON_CALL logs if the --gmock_verbose flag is set to "info". 489e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(OnCallTest, LogsWhenVerbosityIsInfo) { 490e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_THAT(GrabOutput(OnCallLogger, kInfoVerbosity), 491e35fdd936d133bf8a48de140a3c666897588a05shiqian HasSubstr("ON_CALL(mock, TestMethod())")); 492e35fdd936d133bf8a48de140a3c666897588a05shiqian} 493e35fdd936d133bf8a48de140a3c666897588a05shiqian 494e35fdd936d133bf8a48de140a3c666897588a05shiqian// Verifies that ON_CALL doesn't log 495e35fdd936d133bf8a48de140a3c666897588a05shiqian// if the --gmock_verbose flag is set to "warning". 496e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(OnCallTest, DoesNotLogWhenVerbosityIsWarning) { 497e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_EQ("", GrabOutput(OnCallLogger, kWarningVerbosity)); 498e35fdd936d133bf8a48de140a3c666897588a05shiqian} 499e35fdd936d133bf8a48de140a3c666897588a05shiqian 500e35fdd936d133bf8a48de140a3c666897588a05shiqian// Verifies that ON_CALL doesn't log if 501e35fdd936d133bf8a48de140a3c666897588a05shiqian// the --gmock_verbose flag is set to "error". 502e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(OnCallTest, DoesNotLogWhenVerbosityIsError) { 503e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_EQ("", GrabOutput(OnCallLogger, kErrorVerbosity)); 504e35fdd936d133bf8a48de140a3c666897588a05shiqian} 505e35fdd936d133bf8a48de140a3c666897588a05shiqian 506e35fdd936d133bf8a48de140a3c666897588a05shiqianvoid OnCallAnyArgumentLogger() { 507e35fdd936d133bf8a48de140a3c666897588a05shiqian DummyMock mock; 508e35fdd936d133bf8a48de140a3c666897588a05shiqian ON_CALL(mock, TestMethodArg(_)); 509e35fdd936d133bf8a48de140a3c666897588a05shiqian} 510e35fdd936d133bf8a48de140a3c666897588a05shiqian 511e35fdd936d133bf8a48de140a3c666897588a05shiqian// Verifies that ON_CALL prints provided _ argument. 512e35fdd936d133bf8a48de140a3c666897588a05shiqianTEST(OnCallTest, LogsAnythingArgument) { 513e35fdd936d133bf8a48de140a3c666897588a05shiqian EXPECT_THAT(GrabOutput(OnCallAnyArgumentLogger, kInfoVerbosity), 514e35fdd936d133bf8a48de140a3c666897588a05shiqian HasSubstr("ON_CALL(mock, TestMethodArg(_)")); 515e35fdd936d133bf8a48de140a3c666897588a05shiqian} 516e35fdd936d133bf8a48de140a3c666897588a05shiqian 517e35fdd936d133bf8a48de140a3c666897588a05shiqian#endif // 0 518e35fdd936d133bf8a48de140a3c666897588a05shiqian 519e35fdd936d133bf8a48de140a3c666897588a05shiqian} // namespace 520e35fdd936d133bf8a48de140a3c666897588a05shiqian} // namespace internal 521e35fdd936d133bf8a48de140a3c666897588a05shiqian} // namespace testing 522