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