14b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Copyright 2006, Google Inc. 24b6829f0d28990dd645e16386eb226d0f10c8731shiqian// All rights reserved. 34b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 44b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Redistribution and use in source and binary forms, with or without 54b6829f0d28990dd645e16386eb226d0f10c8731shiqian// modification, are permitted provided that the following conditions are 64b6829f0d28990dd645e16386eb226d0f10c8731shiqian// met: 74b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 84b6829f0d28990dd645e16386eb226d0f10c8731shiqian// * Redistributions of source code must retain the above copyright 94b6829f0d28990dd645e16386eb226d0f10c8731shiqian// notice, this list of conditions and the following disclaimer. 104b6829f0d28990dd645e16386eb226d0f10c8731shiqian// * Redistributions in binary form must reproduce the above 114b6829f0d28990dd645e16386eb226d0f10c8731shiqian// copyright notice, this list of conditions and the following disclaimer 124b6829f0d28990dd645e16386eb226d0f10c8731shiqian// in the documentation and/or other materials provided with the 134b6829f0d28990dd645e16386eb226d0f10c8731shiqian// distribution. 144b6829f0d28990dd645e16386eb226d0f10c8731shiqian// * Neither the name of Google Inc. nor the names of its 154b6829f0d28990dd645e16386eb226d0f10c8731shiqian// contributors may be used to endorse or promote products derived from 164b6829f0d28990dd645e16386eb226d0f10c8731shiqian// this software without specific prior written permission. 174b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 184b6829f0d28990dd645e16386eb226d0f10c8731shiqian// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 194b6829f0d28990dd645e16386eb226d0f10c8731shiqian// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 204b6829f0d28990dd645e16386eb226d0f10c8731shiqian// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 214b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 224b6829f0d28990dd645e16386eb226d0f10c8731shiqian// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 234b6829f0d28990dd645e16386eb226d0f10c8731shiqian// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 244b6829f0d28990dd645e16386eb226d0f10c8731shiqian// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 254b6829f0d28990dd645e16386eb226d0f10c8731shiqian// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 264b6829f0d28990dd645e16386eb226d0f10c8731shiqian// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 274b6829f0d28990dd645e16386eb226d0f10c8731shiqian// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 284b6829f0d28990dd645e16386eb226d0f10c8731shiqian// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 294b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 304b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Author: phanna@google.com (Patrick Hanna) 314b6829f0d28990dd645e16386eb226d0f10c8731shiqian 324b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Unit test for Google Test's --gtest_list_tests flag. 334b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 344b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A user can ask Google Test to list all tests that will run 354b6829f0d28990dd645e16386eb226d0f10c8731shiqian// so that when using a filter, a user will know what 364b6829f0d28990dd645e16386eb226d0f10c8731shiqian// tests to look for. The tests will not be run after listing. 374b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 384b6829f0d28990dd645e16386eb226d0f10c8731shiqian// This program will be invoked from a Python unit test. 394b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Don't run it directly. 404b6829f0d28990dd645e16386eb226d0f10c8731shiqian 412620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/gtest.h" 424b6829f0d28990dd645e16386eb226d0f10c8731shiqian 434b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Several different test cases and tests that will be listed. 444b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(Foo, Bar1) { 454b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 464b6829f0d28990dd645e16386eb226d0f10c8731shiqian 474b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(Foo, Bar2) { 484b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 494b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5093a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wanTEST(Foo, DISABLED_Bar3) { 514b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 524b6829f0d28990dd645e16386eb226d0f10c8731shiqian 534b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(Abc, Xyz) { 544b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 554b6829f0d28990dd645e16386eb226d0f10c8731shiqian 564b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(Abc, Def) { 574b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 584b6829f0d28990dd645e16386eb226d0f10c8731shiqian 594b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(FooBar, Baz) { 604b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 614b6829f0d28990dd645e16386eb226d0f10c8731shiqian 624b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass FooTest : public testing::Test { 634b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 644b6829f0d28990dd645e16386eb226d0f10c8731shiqian 654b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FooTest, Test1) { 664b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 674b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6893a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wanTEST_F(FooTest, DISABLED_Test2) { 694b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 704b6829f0d28990dd645e16386eb226d0f10c8731shiqian 714b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FooTest, Test3) { 724b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 734b6829f0d28990dd645e16386eb226d0f10c8731shiqian 744b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(FooDeathTest, Test1) { 754b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 764b6829f0d28990dd645e16386eb226d0f10c8731shiqian 77b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan// A group of value-parameterized tests. 78b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 79b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanclass MyType { 80b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan public: 81b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan explicit MyType(const std::string& a_value) : value_(a_value) {} 82b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 83b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan const std::string& value() const { return value_; } 84b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 85b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan private: 86b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan std::string value_; 87b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan}; 88b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 89b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan// Teaches Google Test how to print a MyType. 90b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanvoid PrintTo(const MyType& x, std::ostream* os) { 91b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan *os << x.value(); 92b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan} 93b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 94b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanclass ValueParamTest : public testing::TestWithParam<MyType> { 95b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan}; 96b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 97b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanTEST_P(ValueParamTest, TestA) { 98b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan} 99b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 100b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanTEST_P(ValueParamTest, TestB) { 101b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan} 102b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 103b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanINSTANTIATE_TEST_CASE_P( 104b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan MyInstantiation, ValueParamTest, 105b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan testing::Values(MyType("one line"), 106b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan MyType("two\nlines"), 107b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan MyType("a very\nloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong line"))); // NOLINT 108b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 109b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan// A group of typed tests. 110b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 111b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan// A deliberately long type name for testing the line-truncating 112b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan// behavior when printing a type parameter. 113b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanclass VeryLoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooogName { // NOLINT 114b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan}; 115b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 116b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wantemplate <typename T> 117b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanclass TypedTest : public testing::Test { 118b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan}; 119b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 120b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wantemplate <typename T, int kSize> 121b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanclass MyArray { 122b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan}; 123b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 124b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wantypedef testing::Types<VeryLoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooogName, // NOLINT 125b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan int*, MyArray<bool, 42> > MyTypes; 126b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 127b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanTYPED_TEST_CASE(TypedTest, MyTypes); 128b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 129b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanTYPED_TEST(TypedTest, TestA) { 130b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan} 131b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 132b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanTYPED_TEST(TypedTest, TestB) { 133b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan} 134b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 135b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan// A group of type-parameterized tests. 136b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 137b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wantemplate <typename T> 138b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanclass TypeParamTest : public testing::Test { 139b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan}; 140b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 141b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanTYPED_TEST_CASE_P(TypeParamTest); 142b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 143b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanTYPED_TEST_P(TypeParamTest, TestA) { 144b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan} 145b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 146b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanTYPED_TEST_P(TypeParamTest, TestB) { 147b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan} 148b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 149b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanREGISTER_TYPED_TEST_CASE_P(TypeParamTest, TestA, TestB); 150b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 151b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanINSTANTIATE_TYPED_TEST_CASE_P(My, TypeParamTest, MyTypes); 1524b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1534b6829f0d28990dd645e16386eb226d0f10c8731shiqianint main(int argc, char **argv) { 154cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan ::testing::InitGoogleTest(&argc, argv); 1554b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1564b6829f0d28990dd645e16386eb226d0f10c8731shiqian return RUN_ALL_TESTS(); 1574b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 158