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