11cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// Copyright 2009 Google Inc. All rights reserved. 21cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// 31cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// Redistribution and use in source and binary forms, with or without 41cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// modification, are permitted provided that the following conditions are 51cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// met: 61cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// 71cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// * Redistributions of source code must retain the above copyright 81cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// notice, this list of conditions and the following disclaimer. 91cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// * Redistributions in binary form must reproduce the above 101cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// copyright notice, this list of conditions and the following disclaimer 111cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// in the documentation and/or other materials provided with the 121cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// distribution. 131cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// * Neither the name of Google Inc. nor the names of its 141cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// contributors may be used to endorse or promote products derived from 151cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// this software without specific prior written permission. 161cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// 171cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 181cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 191cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 201cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 211cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 221cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 231cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 241cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 251cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 261cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 271cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 281cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// 291cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// Author: vladl@google.com (Vlad Losev) 301cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// 311cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// The Google C++ Testing Framework (Google Test) 321cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// 331cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// This file contains tests verifying correctness of data provided via 341cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// UnitTest's public methods. 351cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 362620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/gtest.h" 371cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 381cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan#include <string.h> // For strcmp. 391cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan#include <algorithm> 401cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 411cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanusing ::testing::InitGoogleTest; 421cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 431cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wannamespace testing { 441cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wannamespace internal { 451cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 461cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wantemplate <typename T> 471cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanstruct LessByName { 481cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan bool operator()(const T* a, const T* b) { 491cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan return strcmp(a->name(), b->name()) < 0; 501cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan } 511cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan}; 521cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 53fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wanclass UnitTestHelper { 541cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan public: 551cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan // Returns the array of pointers to all test cases sorted by the test case 561cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan // name. The caller is responsible for deleting the array. 572ba84be6837768b0bb204ea9b11b0aee8cb95883kosak@google.com static TestCase const** GetSortedTestCases() { 58fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan UnitTest& unit_test = *UnitTest::GetInstance(); 591cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan TestCase const** const test_cases = 60fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan new const TestCase*[unit_test.total_test_case_count()]; 611cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 62fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan for (int i = 0; i < unit_test.total_test_case_count(); ++i) 63fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan test_cases[i] = unit_test.GetTestCase(i); 641cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 651cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan std::sort(test_cases, 66fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan test_cases + unit_test.total_test_case_count(), 671cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan LessByName<TestCase>()); 681cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan return test_cases; 691cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan } 701cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 711cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan // Returns the test case by its name. The caller doesn't own the returned 721cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan // pointer. 731cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan static const TestCase* FindTestCase(const char* name) { 74fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan UnitTest& unit_test = *UnitTest::GetInstance(); 75fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan for (int i = 0; i < unit_test.total_test_case_count(); ++i) { 76fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan const TestCase* test_case = unit_test.GetTestCase(i); 771cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan if (0 == strcmp(test_case->name(), name)) 781cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan return test_case; 791cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan } 801cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan return NULL; 811cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan } 821cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 831cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan // Returns the array of pointers to all tests in a particular test case 841cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan // sorted by the test name. The caller is responsible for deleting the 851cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan // array. 862ba84be6837768b0bb204ea9b11b0aee8cb95883kosak@google.com static TestInfo const** GetSortedTests(const TestCase* test_case) { 871cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan TestInfo const** const tests = 881cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan new const TestInfo*[test_case->total_test_count()]; 891cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 901cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan for (int i = 0; i < test_case->total_test_count(); ++i) 911cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan tests[i] = test_case->GetTestInfo(i); 921cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 93fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan std::sort(tests, tests + test_case->total_test_count(), 941cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan LessByName<TestInfo>()); 951cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan return tests; 961cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan } 971cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan}; 981cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 991cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan#if GTEST_HAS_TYPED_TEST 1001cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wantemplate <typename T> class TestCaseWithCommentTest : public Test {}; 1011cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanTYPED_TEST_CASE(TestCaseWithCommentTest, Types<int>); 1021cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanTYPED_TEST(TestCaseWithCommentTest, Dummy) {} 1031cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 1041cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanconst int kTypedTestCases = 1; 1051cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanconst int kTypedTests = 1; 1061cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan#else 1071cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanconst int kTypedTestCases = 0; 1081cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanconst int kTypedTests = 0; 1091cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan#endif // GTEST_HAS_TYPED_TEST 1101cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 1111cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// We can only test the accessors that do not change value while tests run. 1121cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// Since tests can be run in any order, the values the accessors that track 1131cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// test execution (such as failed_test_count) can not be predicted. 1141cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanTEST(ApiTest, UnitTestImmutableAccessorsWork) { 1151cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan UnitTest* unit_test = UnitTest::GetInstance(); 1161cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 1171cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan ASSERT_EQ(2 + kTypedTestCases, unit_test->total_test_case_count()); 1181cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(1 + kTypedTestCases, unit_test->test_case_to_run_count()); 1191cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(2, unit_test->disabled_test_count()); 1201cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(5 + kTypedTests, unit_test->total_test_count()); 1211cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(3 + kTypedTests, unit_test->test_to_run_count()); 1221cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 123fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan const TestCase** const test_cases = UnitTestHelper::GetSortedTestCases(); 1241cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 1251cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("ApiTest", test_cases[0]->name()); 1261cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("DISABLED_Test", test_cases[1]->name()); 1271cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan#if GTEST_HAS_TYPED_TEST 1281cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("TestCaseWithCommentTest/0", test_cases[2]->name()); 1291cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan#endif // GTEST_HAS_TYPED_TEST 1301cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 1311cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan delete[] test_cases; 1321cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 1331cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan // The following lines initiate actions to verify certain methods in 1341cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan // FinalSuccessChecker::TearDown. 1351cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 1361cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan // Records a test property to verify TestResult::GetTestProperty(). 1371cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan RecordProperty("key", "value"); 1381cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan} 1391cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 140a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wanAssertionResult IsNull(const char* str) { 141a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan if (str != NULL) { 142a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan return testing::AssertionFailure() << "argument is " << str; 143a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan } 144a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan return AssertionSuccess(); 145a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan} 146a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan 1471cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanTEST(ApiTest, TestCaseImmutableAccessorsWork) { 148fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan const TestCase* test_case = UnitTestHelper::FindTestCase("ApiTest"); 1491cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan ASSERT_TRUE(test_case != NULL); 1501cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 1511cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("ApiTest", test_case->name()); 152a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(test_case->type_param())); 1531cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(test_case->should_run()); 1541cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(1, test_case->disabled_test_count()); 1551cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(3, test_case->test_to_run_count()); 1561cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan ASSERT_EQ(4, test_case->total_test_count()); 1571cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 158fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan const TestInfo** tests = UnitTestHelper::GetSortedTests(test_case); 1591cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 1601cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("DISABLED_Dummy1", tests[0]->name()); 1611cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("ApiTest", tests[0]->test_case_name()); 162a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(tests[0]->value_param())); 163a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(tests[0]->type_param())); 1641cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_FALSE(tests[0]->should_run()); 1651cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 1661cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("TestCaseDisabledAccessorsWork", tests[1]->name()); 1671cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("ApiTest", tests[1]->test_case_name()); 168a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(tests[1]->value_param())); 169a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(tests[1]->type_param())); 1701cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(tests[1]->should_run()); 1711cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 1721cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("TestCaseImmutableAccessorsWork", tests[2]->name()); 1731cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("ApiTest", tests[2]->test_case_name()); 174a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(tests[2]->value_param())); 175a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(tests[2]->type_param())); 1761cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(tests[2]->should_run()); 1771cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 1781cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("UnitTestImmutableAccessorsWork", tests[3]->name()); 1791cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("ApiTest", tests[3]->test_case_name()); 180a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(tests[3]->value_param())); 181a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(tests[3]->type_param())); 1821cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(tests[3]->should_run()); 1831cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 1841cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan delete[] tests; 1851cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan tests = NULL; 1861cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 1871cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan#if GTEST_HAS_TYPED_TEST 188fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan test_case = UnitTestHelper::FindTestCase("TestCaseWithCommentTest/0"); 1891cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan ASSERT_TRUE(test_case != NULL); 1901cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 1911cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("TestCaseWithCommentTest/0", test_case->name()); 192a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_STREQ(GetTypeName<int>().c_str(), test_case->type_param()); 1931cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(test_case->should_run()); 1941cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(0, test_case->disabled_test_count()); 1951cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(1, test_case->test_to_run_count()); 1961cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan ASSERT_EQ(1, test_case->total_test_count()); 1971cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 198fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan tests = UnitTestHelper::GetSortedTests(test_case); 1991cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 2001cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("Dummy", tests[0]->name()); 2011cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("TestCaseWithCommentTest/0", tests[0]->test_case_name()); 202a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(tests[0]->value_param())); 203a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_STREQ(GetTypeName<int>().c_str(), tests[0]->type_param()); 2041cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(tests[0]->should_run()); 2051cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 2061cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan delete[] tests; 2071cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan#endif // GTEST_HAS_TYPED_TEST 2081cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan} 2091cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 2101cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanTEST(ApiTest, TestCaseDisabledAccessorsWork) { 211fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan const TestCase* test_case = UnitTestHelper::FindTestCase("DISABLED_Test"); 2121cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan ASSERT_TRUE(test_case != NULL); 2131cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 2141cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("DISABLED_Test", test_case->name()); 215a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(test_case->type_param())); 2161cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_FALSE(test_case->should_run()); 2171cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(1, test_case->disabled_test_count()); 2181cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(0, test_case->test_to_run_count()); 2191cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan ASSERT_EQ(1, test_case->total_test_count()); 2201cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 2211cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan const TestInfo* const test_info = test_case->GetTestInfo(0); 2221cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("Dummy2", test_info->name()); 2231cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("DISABLED_Test", test_info->test_case_name()); 224a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(test_info->value_param())); 225a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(test_info->type_param())); 2261cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_FALSE(test_info->should_run()); 2271cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan} 2281cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 2291cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// These two tests are here to provide support for testing 2301cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan// test_case_to_run_count, disabled_test_count, and test_to_run_count. 2311cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanTEST(ApiTest, DISABLED_Dummy1) {} 2321cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanTEST(DISABLED_Test, Dummy2) {} 2331cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 2341cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanclass FinalSuccessChecker : public Environment { 2351cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan protected: 2361cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan virtual void TearDown() { 2371cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan UnitTest* unit_test = UnitTest::GetInstance(); 2381cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 2391cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(1 + kTypedTestCases, unit_test->successful_test_case_count()); 2401cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(3 + kTypedTests, unit_test->successful_test_count()); 2411cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(0, unit_test->failed_test_case_count()); 2421cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(0, unit_test->failed_test_count()); 2431cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(unit_test->Passed()); 2441cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_FALSE(unit_test->Failed()); 2451cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan ASSERT_EQ(2 + kTypedTestCases, unit_test->total_test_case_count()); 2461cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 247fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan const TestCase** const test_cases = UnitTestHelper::GetSortedTestCases(); 2481cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 2491cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("ApiTest", test_cases[0]->name()); 250a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(test_cases[0]->type_param())); 2511cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(test_cases[0]->should_run()); 2521cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(1, test_cases[0]->disabled_test_count()); 2531cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan ASSERT_EQ(4, test_cases[0]->total_test_count()); 2541cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(3, test_cases[0]->successful_test_count()); 2551cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(0, test_cases[0]->failed_test_count()); 2561cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(test_cases[0]->Passed()); 2571cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_FALSE(test_cases[0]->Failed()); 2581cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 2591cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("DISABLED_Test", test_cases[1]->name()); 260a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(test_cases[1]->type_param())); 2611cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_FALSE(test_cases[1]->should_run()); 2621cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(1, test_cases[1]->disabled_test_count()); 2631cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan ASSERT_EQ(1, test_cases[1]->total_test_count()); 2641cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(0, test_cases[1]->successful_test_count()); 2651cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(0, test_cases[1]->failed_test_count()); 2661cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 2671cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan#if GTEST_HAS_TYPED_TEST 2681cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("TestCaseWithCommentTest/0", test_cases[2]->name()); 269a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_STREQ(GetTypeName<int>().c_str(), test_cases[2]->type_param()); 2701cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(test_cases[2]->should_run()); 2711cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(0, test_cases[2]->disabled_test_count()); 2721cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan ASSERT_EQ(1, test_cases[2]->total_test_count()); 2731cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(1, test_cases[2]->successful_test_count()); 2741cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(0, test_cases[2]->failed_test_count()); 2751cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(test_cases[2]->Passed()); 2761cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_FALSE(test_cases[2]->Failed()); 2771cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan#endif // GTEST_HAS_TYPED_TEST 2781cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 279fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan const TestCase* test_case = UnitTestHelper::FindTestCase("ApiTest"); 280fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan const TestInfo** tests = UnitTestHelper::GetSortedTests(test_case); 2811cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("DISABLED_Dummy1", tests[0]->name()); 2821cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("ApiTest", tests[0]->test_case_name()); 2831cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_FALSE(tests[0]->should_run()); 2841cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 2851cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("TestCaseDisabledAccessorsWork", tests[1]->name()); 2861cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("ApiTest", tests[1]->test_case_name()); 287a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(tests[1]->value_param())); 288a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(tests[1]->type_param())); 2891cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(tests[1]->should_run()); 2901cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(tests[1]->result()->Passed()); 2911cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(0, tests[1]->result()->test_property_count()); 2921cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 2931cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("TestCaseImmutableAccessorsWork", tests[2]->name()); 2941cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("ApiTest", tests[2]->test_case_name()); 295a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(tests[2]->value_param())); 296a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(tests[2]->type_param())); 2971cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(tests[2]->should_run()); 2981cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(tests[2]->result()->Passed()); 2991cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(0, tests[2]->result()->test_property_count()); 3001cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 3011cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("UnitTestImmutableAccessorsWork", tests[3]->name()); 3021cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("ApiTest", tests[3]->test_case_name()); 303a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(tests[3]->value_param())); 304a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(tests[3]->type_param())); 3051cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(tests[3]->should_run()); 3061cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(tests[3]->result()->Passed()); 3071cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(1, tests[3]->result()->test_property_count()); 3081cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan const TestProperty& property = tests[3]->result()->GetTestProperty(0); 3091cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("key", property.key()); 3101cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("value", property.value()); 3111cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 3121cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan delete[] tests; 3131cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 3141cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan#if GTEST_HAS_TYPED_TEST 315fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan test_case = UnitTestHelper::FindTestCase("TestCaseWithCommentTest/0"); 316fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan tests = UnitTestHelper::GetSortedTests(test_case); 3171cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 3181cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("Dummy", tests[0]->name()); 3191cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_STREQ("TestCaseWithCommentTest/0", tests[0]->test_case_name()); 320a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_TRUE(IsNull(tests[0]->value_param())); 321a33163a3ddbb60a6c45340e436310f78044c1a7dzhanyong.wan EXPECT_STREQ(GetTypeName<int>().c_str(), tests[0]->type_param()); 3221cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(tests[0]->should_run()); 3231cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_TRUE(tests[0]->result()->Passed()); 3241cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan EXPECT_EQ(0, tests[0]->result()->test_property_count()); 3251cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 3261cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan delete[] tests; 3271cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan#endif // GTEST_HAS_TYPED_TEST 3281cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan delete[] test_cases; 3291cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan } 3301cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan}; 3311cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 332fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan} // namespace internal 3331cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan} // namespace testing 3341cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 3351cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wanint main(int argc, char **argv) { 3361cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan InitGoogleTest(&argc, argv); 3371cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 338fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan AddGlobalTestEnvironment(new testing::internal::FinalSuccessChecker()); 3391cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan 3401cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan return RUN_ALL_TESTS(); 3411cdc76325936ad3312be0d456b4936c8b8e6bf70zhanyong.wan} 342