113481Sgiacomo.travaglini@arm.com// Copyright 2007, 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// Google Mock - a framework for writing C++ mock classes. 3313481Sgiacomo.travaglini@arm.com// 3413481Sgiacomo.travaglini@arm.com// This file tests the internal utilities. 3513481Sgiacomo.travaglini@arm.com 3613481Sgiacomo.travaglini@arm.com#include "gmock/internal/gmock-generated-internal-utils.h" 3713481Sgiacomo.travaglini@arm.com#include "gmock/internal/gmock-internal-utils.h" 3813481Sgiacomo.travaglini@arm.com#include "gtest/gtest.h" 3913481Sgiacomo.travaglini@arm.com 4013481Sgiacomo.travaglini@arm.comnamespace { 4113481Sgiacomo.travaglini@arm.com 4213481Sgiacomo.travaglini@arm.comusing ::testing::tuple; 4313481Sgiacomo.travaglini@arm.comusing ::testing::Matcher; 4413481Sgiacomo.travaglini@arm.comusing ::testing::internal::CompileAssertTypesEqual; 4513481Sgiacomo.travaglini@arm.comusing ::testing::internal::MatcherTuple; 4613481Sgiacomo.travaglini@arm.comusing ::testing::internal::Function; 4713481Sgiacomo.travaglini@arm.comusing ::testing::internal::IgnoredValue; 4813481Sgiacomo.travaglini@arm.com 4913481Sgiacomo.travaglini@arm.com// Tests the MatcherTuple template struct. 5013481Sgiacomo.travaglini@arm.com 5113481Sgiacomo.travaglini@arm.comTEST(MatcherTupleTest, ForSize0) { 5213481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<tuple<>, MatcherTuple<tuple<> >::type>(); 5313481Sgiacomo.travaglini@arm.com} 5413481Sgiacomo.travaglini@arm.com 5513481Sgiacomo.travaglini@arm.comTEST(MatcherTupleTest, ForSize1) { 5613481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<tuple<Matcher<int> >, 5713481Sgiacomo.travaglini@arm.com MatcherTuple<tuple<int> >::type>(); 5813481Sgiacomo.travaglini@arm.com} 5913481Sgiacomo.travaglini@arm.com 6013481Sgiacomo.travaglini@arm.comTEST(MatcherTupleTest, ForSize2) { 6113481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<tuple<Matcher<int>, Matcher<char> >, 6213481Sgiacomo.travaglini@arm.com MatcherTuple<tuple<int, char> >::type>(); 6313481Sgiacomo.travaglini@arm.com} 6413481Sgiacomo.travaglini@arm.com 6513481Sgiacomo.travaglini@arm.comTEST(MatcherTupleTest, ForSize5) { 6613481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<tuple<Matcher<int>, Matcher<char>, Matcher<bool>, 6713481Sgiacomo.travaglini@arm.com Matcher<double>, Matcher<char*> >, 6813481Sgiacomo.travaglini@arm.com MatcherTuple<tuple<int, char, bool, double, char*> 6913481Sgiacomo.travaglini@arm.com >::type>(); 7013481Sgiacomo.travaglini@arm.com} 7113481Sgiacomo.travaglini@arm.com 7213481Sgiacomo.travaglini@arm.com// Tests the Function template struct. 7313481Sgiacomo.travaglini@arm.com 7413481Sgiacomo.travaglini@arm.comTEST(FunctionTest, Nullary) { 7513481Sgiacomo.travaglini@arm.com typedef Function<int()> F; // NOLINT 7613481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<int, F::Result>(); 7713481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<tuple<>, F::ArgumentTuple>(); 7813481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<tuple<>, F::ArgumentMatcherTuple>(); 7913481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<void(), F::MakeResultVoid>(); 8013481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<IgnoredValue(), F::MakeResultIgnoredValue>(); 8113481Sgiacomo.travaglini@arm.com} 8213481Sgiacomo.travaglini@arm.com 8313481Sgiacomo.travaglini@arm.comTEST(FunctionTest, Unary) { 8413481Sgiacomo.travaglini@arm.com typedef Function<int(bool)> F; // NOLINT 8513481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<int, F::Result>(); 8613481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<bool, F::Argument1>(); 8713481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<tuple<bool>, F::ArgumentTuple>(); 8813481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<tuple<Matcher<bool> >, F::ArgumentMatcherTuple>(); 8913481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<void(bool), F::MakeResultVoid>(); // NOLINT 9013481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<IgnoredValue(bool), // NOLINT 9113481Sgiacomo.travaglini@arm.com F::MakeResultIgnoredValue>(); 9213481Sgiacomo.travaglini@arm.com} 9313481Sgiacomo.travaglini@arm.com 9413481Sgiacomo.travaglini@arm.comTEST(FunctionTest, Binary) { 9513481Sgiacomo.travaglini@arm.com typedef Function<int(bool, const long&)> F; // NOLINT 9613481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<int, F::Result>(); 9713481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<bool, F::Argument1>(); 9813481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<const long&, F::Argument2>(); // NOLINT 9913481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<tuple<bool, const long&>, F::ArgumentTuple>(); // NOLINT 10013481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<tuple<Matcher<bool>, Matcher<const long&> >, // NOLINT 10113481Sgiacomo.travaglini@arm.com F::ArgumentMatcherTuple>(); 10213481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<void(bool, const long&), F::MakeResultVoid>(); // NOLINT 10313481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<IgnoredValue(bool, const long&), // NOLINT 10413481Sgiacomo.travaglini@arm.com F::MakeResultIgnoredValue>(); 10513481Sgiacomo.travaglini@arm.com} 10613481Sgiacomo.travaglini@arm.com 10713481Sgiacomo.travaglini@arm.comTEST(FunctionTest, LongArgumentList) { 10813481Sgiacomo.travaglini@arm.com typedef Function<char(bool, int, char*, int&, const long&)> F; // NOLINT 10913481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<char, F::Result>(); 11013481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<bool, F::Argument1>(); 11113481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<int, F::Argument2>(); 11213481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<char*, F::Argument3>(); 11313481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<int&, F::Argument4>(); 11413481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<const long&, F::Argument5>(); // NOLINT 11513481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<tuple<bool, int, char*, int&, const long&>, // NOLINT 11613481Sgiacomo.travaglini@arm.com F::ArgumentTuple>(); 11713481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<tuple<Matcher<bool>, Matcher<int>, Matcher<char*>, 11813481Sgiacomo.travaglini@arm.com Matcher<int&>, Matcher<const long&> >, // NOLINT 11913481Sgiacomo.travaglini@arm.com F::ArgumentMatcherTuple>(); 12013481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual<void(bool, int, char*, int&, const long&), // NOLINT 12113481Sgiacomo.travaglini@arm.com F::MakeResultVoid>(); 12213481Sgiacomo.travaglini@arm.com CompileAssertTypesEqual< 12313481Sgiacomo.travaglini@arm.com IgnoredValue(bool, int, char*, int&, const long&), // NOLINT 12413481Sgiacomo.travaglini@arm.com F::MakeResultIgnoredValue>(); 12513481Sgiacomo.travaglini@arm.com} 12613481Sgiacomo.travaglini@arm.com 12713481Sgiacomo.travaglini@arm.com} // Unnamed namespace 128