gmock_test.cc revision 13481
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// Google Mock - a framework for writing C++ mock classes. 3313481Sgiacomo.travaglini@arm.com// 3413481Sgiacomo.travaglini@arm.com// This file tests code in gmock.cc. 3513481Sgiacomo.travaglini@arm.com 3613481Sgiacomo.travaglini@arm.com#include "gmock/gmock.h" 3713481Sgiacomo.travaglini@arm.com 3813481Sgiacomo.travaglini@arm.com#include <string> 3913481Sgiacomo.travaglini@arm.com#include "gtest/gtest.h" 4013481Sgiacomo.travaglini@arm.com 4113481Sgiacomo.travaglini@arm.com#if !defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) 4213481Sgiacomo.travaglini@arm.com 4313481Sgiacomo.travaglini@arm.comusing testing::GMOCK_FLAG(verbose); 4413481Sgiacomo.travaglini@arm.comusing testing::InitGoogleMock; 4513481Sgiacomo.travaglini@arm.com 4613481Sgiacomo.travaglini@arm.com// Verifies that calling InitGoogleMock() on argv results in new_argv, 4713481Sgiacomo.travaglini@arm.com// and the gmock_verbose flag's value is set to expected_gmock_verbose. 4813481Sgiacomo.travaglini@arm.comtemplate <typename Char, int M, int N> 4913481Sgiacomo.travaglini@arm.comvoid TestInitGoogleMock(const Char* (&argv)[M], const Char* (&new_argv)[N], 5013481Sgiacomo.travaglini@arm.com const ::std::string& expected_gmock_verbose) { 5113481Sgiacomo.travaglini@arm.com const ::std::string old_verbose = GMOCK_FLAG(verbose); 5213481Sgiacomo.travaglini@arm.com 5313481Sgiacomo.travaglini@arm.com int argc = M; 5413481Sgiacomo.travaglini@arm.com InitGoogleMock(&argc, const_cast<Char**>(argv)); 5513481Sgiacomo.travaglini@arm.com ASSERT_EQ(N, argc) << "The new argv has wrong number of elements."; 5613481Sgiacomo.travaglini@arm.com 5713481Sgiacomo.travaglini@arm.com for (int i = 0; i < N; i++) { 5813481Sgiacomo.travaglini@arm.com EXPECT_STREQ(new_argv[i], argv[i]); 5913481Sgiacomo.travaglini@arm.com } 6013481Sgiacomo.travaglini@arm.com 6113481Sgiacomo.travaglini@arm.com EXPECT_EQ(expected_gmock_verbose, GMOCK_FLAG(verbose).c_str()); 6213481Sgiacomo.travaglini@arm.com GMOCK_FLAG(verbose) = old_verbose; // Restores the gmock_verbose flag. 6313481Sgiacomo.travaglini@arm.com} 6413481Sgiacomo.travaglini@arm.com 6513481Sgiacomo.travaglini@arm.comTEST(InitGoogleMockTest, ParsesInvalidCommandLine) { 6613481Sgiacomo.travaglini@arm.com const char* argv[] = { 6713481Sgiacomo.travaglini@arm.com NULL 6813481Sgiacomo.travaglini@arm.com }; 6913481Sgiacomo.travaglini@arm.com 7013481Sgiacomo.travaglini@arm.com const char* new_argv[] = { 7113481Sgiacomo.travaglini@arm.com NULL 7213481Sgiacomo.travaglini@arm.com }; 7313481Sgiacomo.travaglini@arm.com 7413481Sgiacomo.travaglini@arm.com TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose)); 7513481Sgiacomo.travaglini@arm.com} 7613481Sgiacomo.travaglini@arm.com 7713481Sgiacomo.travaglini@arm.comTEST(InitGoogleMockTest, ParsesEmptyCommandLine) { 7813481Sgiacomo.travaglini@arm.com const char* argv[] = { 7913481Sgiacomo.travaglini@arm.com "foo.exe", 8013481Sgiacomo.travaglini@arm.com NULL 8113481Sgiacomo.travaglini@arm.com }; 8213481Sgiacomo.travaglini@arm.com 8313481Sgiacomo.travaglini@arm.com const char* new_argv[] = { 8413481Sgiacomo.travaglini@arm.com "foo.exe", 8513481Sgiacomo.travaglini@arm.com NULL 8613481Sgiacomo.travaglini@arm.com }; 8713481Sgiacomo.travaglini@arm.com 8813481Sgiacomo.travaglini@arm.com TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose)); 8913481Sgiacomo.travaglini@arm.com} 9013481Sgiacomo.travaglini@arm.com 9113481Sgiacomo.travaglini@arm.comTEST(InitGoogleMockTest, ParsesSingleFlag) { 9213481Sgiacomo.travaglini@arm.com const char* argv[] = { 9313481Sgiacomo.travaglini@arm.com "foo.exe", 9413481Sgiacomo.travaglini@arm.com "--gmock_verbose=info", 9513481Sgiacomo.travaglini@arm.com NULL 9613481Sgiacomo.travaglini@arm.com }; 9713481Sgiacomo.travaglini@arm.com 9813481Sgiacomo.travaglini@arm.com const char* new_argv[] = { 9913481Sgiacomo.travaglini@arm.com "foo.exe", 10013481Sgiacomo.travaglini@arm.com NULL 10113481Sgiacomo.travaglini@arm.com }; 10213481Sgiacomo.travaglini@arm.com 10313481Sgiacomo.travaglini@arm.com TestInitGoogleMock(argv, new_argv, "info"); 10413481Sgiacomo.travaglini@arm.com} 10513481Sgiacomo.travaglini@arm.com 10613481Sgiacomo.travaglini@arm.comTEST(InitGoogleMockTest, ParsesUnrecognizedFlag) { 10713481Sgiacomo.travaglini@arm.com const char* argv[] = { 10813481Sgiacomo.travaglini@arm.com "foo.exe", 10913481Sgiacomo.travaglini@arm.com "--non_gmock_flag=blah", 11013481Sgiacomo.travaglini@arm.com NULL 11113481Sgiacomo.travaglini@arm.com }; 11213481Sgiacomo.travaglini@arm.com 11313481Sgiacomo.travaglini@arm.com const char* new_argv[] = { 11413481Sgiacomo.travaglini@arm.com "foo.exe", 11513481Sgiacomo.travaglini@arm.com "--non_gmock_flag=blah", 11613481Sgiacomo.travaglini@arm.com NULL 11713481Sgiacomo.travaglini@arm.com }; 11813481Sgiacomo.travaglini@arm.com 11913481Sgiacomo.travaglini@arm.com TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose)); 12013481Sgiacomo.travaglini@arm.com} 12113481Sgiacomo.travaglini@arm.com 12213481Sgiacomo.travaglini@arm.comTEST(InitGoogleMockTest, ParsesGoogleMockFlagAndUnrecognizedFlag) { 12313481Sgiacomo.travaglini@arm.com const char* argv[] = { 12413481Sgiacomo.travaglini@arm.com "foo.exe", 12513481Sgiacomo.travaglini@arm.com "--non_gmock_flag=blah", 12613481Sgiacomo.travaglini@arm.com "--gmock_verbose=error", 12713481Sgiacomo.travaglini@arm.com NULL 12813481Sgiacomo.travaglini@arm.com }; 12913481Sgiacomo.travaglini@arm.com 13013481Sgiacomo.travaglini@arm.com const char* new_argv[] = { 13113481Sgiacomo.travaglini@arm.com "foo.exe", 13213481Sgiacomo.travaglini@arm.com "--non_gmock_flag=blah", 13313481Sgiacomo.travaglini@arm.com NULL 13413481Sgiacomo.travaglini@arm.com }; 13513481Sgiacomo.travaglini@arm.com 13613481Sgiacomo.travaglini@arm.com TestInitGoogleMock(argv, new_argv, "error"); 13713481Sgiacomo.travaglini@arm.com} 13813481Sgiacomo.travaglini@arm.com 13913481Sgiacomo.travaglini@arm.comTEST(WideInitGoogleMockTest, ParsesInvalidCommandLine) { 14013481Sgiacomo.travaglini@arm.com const wchar_t* argv[] = { 14113481Sgiacomo.travaglini@arm.com NULL 14213481Sgiacomo.travaglini@arm.com }; 14313481Sgiacomo.travaglini@arm.com 14413481Sgiacomo.travaglini@arm.com const wchar_t* new_argv[] = { 14513481Sgiacomo.travaglini@arm.com NULL 14613481Sgiacomo.travaglini@arm.com }; 14713481Sgiacomo.travaglini@arm.com 14813481Sgiacomo.travaglini@arm.com TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose)); 14913481Sgiacomo.travaglini@arm.com} 15013481Sgiacomo.travaglini@arm.com 15113481Sgiacomo.travaglini@arm.comTEST(WideInitGoogleMockTest, ParsesEmptyCommandLine) { 15213481Sgiacomo.travaglini@arm.com const wchar_t* argv[] = { 15313481Sgiacomo.travaglini@arm.com L"foo.exe", 15413481Sgiacomo.travaglini@arm.com NULL 15513481Sgiacomo.travaglini@arm.com }; 15613481Sgiacomo.travaglini@arm.com 15713481Sgiacomo.travaglini@arm.com const wchar_t* new_argv[] = { 15813481Sgiacomo.travaglini@arm.com L"foo.exe", 15913481Sgiacomo.travaglini@arm.com NULL 16013481Sgiacomo.travaglini@arm.com }; 16113481Sgiacomo.travaglini@arm.com 16213481Sgiacomo.travaglini@arm.com TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose)); 16313481Sgiacomo.travaglini@arm.com} 16413481Sgiacomo.travaglini@arm.com 16513481Sgiacomo.travaglini@arm.comTEST(WideInitGoogleMockTest, ParsesSingleFlag) { 16613481Sgiacomo.travaglini@arm.com const wchar_t* argv[] = { 16713481Sgiacomo.travaglini@arm.com L"foo.exe", 16813481Sgiacomo.travaglini@arm.com L"--gmock_verbose=info", 16913481Sgiacomo.travaglini@arm.com NULL 17013481Sgiacomo.travaglini@arm.com }; 17113481Sgiacomo.travaglini@arm.com 17213481Sgiacomo.travaglini@arm.com const wchar_t* new_argv[] = { 17313481Sgiacomo.travaglini@arm.com L"foo.exe", 17413481Sgiacomo.travaglini@arm.com NULL 17513481Sgiacomo.travaglini@arm.com }; 17613481Sgiacomo.travaglini@arm.com 17713481Sgiacomo.travaglini@arm.com TestInitGoogleMock(argv, new_argv, "info"); 17813481Sgiacomo.travaglini@arm.com} 17913481Sgiacomo.travaglini@arm.com 18013481Sgiacomo.travaglini@arm.comTEST(WideInitGoogleMockTest, ParsesUnrecognizedFlag) { 18113481Sgiacomo.travaglini@arm.com const wchar_t* argv[] = { 18213481Sgiacomo.travaglini@arm.com L"foo.exe", 18313481Sgiacomo.travaglini@arm.com L"--non_gmock_flag=blah", 18413481Sgiacomo.travaglini@arm.com NULL 18513481Sgiacomo.travaglini@arm.com }; 18613481Sgiacomo.travaglini@arm.com 18713481Sgiacomo.travaglini@arm.com const wchar_t* new_argv[] = { 18813481Sgiacomo.travaglini@arm.com L"foo.exe", 18913481Sgiacomo.travaglini@arm.com L"--non_gmock_flag=blah", 19013481Sgiacomo.travaglini@arm.com NULL 19113481Sgiacomo.travaglini@arm.com }; 19213481Sgiacomo.travaglini@arm.com 19313481Sgiacomo.travaglini@arm.com TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose)); 19413481Sgiacomo.travaglini@arm.com} 19513481Sgiacomo.travaglini@arm.com 19613481Sgiacomo.travaglini@arm.comTEST(WideInitGoogleMockTest, ParsesGoogleMockFlagAndUnrecognizedFlag) { 19713481Sgiacomo.travaglini@arm.com const wchar_t* argv[] = { 19813481Sgiacomo.travaglini@arm.com L"foo.exe", 19913481Sgiacomo.travaglini@arm.com L"--non_gmock_flag=blah", 20013481Sgiacomo.travaglini@arm.com L"--gmock_verbose=error", 20113481Sgiacomo.travaglini@arm.com NULL 20213481Sgiacomo.travaglini@arm.com }; 20313481Sgiacomo.travaglini@arm.com 20413481Sgiacomo.travaglini@arm.com const wchar_t* new_argv[] = { 20513481Sgiacomo.travaglini@arm.com L"foo.exe", 20613481Sgiacomo.travaglini@arm.com L"--non_gmock_flag=blah", 20713481Sgiacomo.travaglini@arm.com NULL 20813481Sgiacomo.travaglini@arm.com }; 20913481Sgiacomo.travaglini@arm.com 21013481Sgiacomo.travaglini@arm.com TestInitGoogleMock(argv, new_argv, "error"); 21113481Sgiacomo.travaglini@arm.com} 21213481Sgiacomo.travaglini@arm.com 21313481Sgiacomo.travaglini@arm.com#endif // !defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) 21413481Sgiacomo.travaglini@arm.com 21513481Sgiacomo.travaglini@arm.com// Makes sure Google Mock flags can be accessed in code. 21613481Sgiacomo.travaglini@arm.comTEST(FlagTest, IsAccessibleInCode) { 21713481Sgiacomo.travaglini@arm.com bool dummy = testing::GMOCK_FLAG(catch_leaked_mocks) && 21813481Sgiacomo.travaglini@arm.com testing::GMOCK_FLAG(verbose) == ""; 21913481Sgiacomo.travaglini@arm.com (void)dummy; // Avoids the "unused local variable" warning. 22013481Sgiacomo.travaglini@arm.com} 221