111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Copyright 2009 Google Inc.  All rights reserved.
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Redistribution and use in source and binary forms, with or without
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// modification, are permitted provided that the following conditions are
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// met:
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//     * Redistributions of source code must retain the above copyright
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// notice, this list of conditions and the following disclaimer.
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//     * Redistributions in binary form must reproduce the above
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// copyright notice, this list of conditions and the following disclaimer
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// in the documentation and/or other materials provided with the
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// distribution.
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//     * Neither the name of Google Inc. nor the names of its
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// contributors may be used to endorse or promote products derived from
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// this software without specific prior written permission.
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Author: vladl@google.com (Vlad Losev)
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// The Google C++ Testing Framework (Google Test)
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file contains tests verifying correctness of data provided via
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// UnitTest's public methods.
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "gtest/gtest.h"
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <string.h>  // For strcmp.
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <algorithm>
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertusing ::testing::InitGoogleTest;
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertnamespace testing {
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertnamespace internal {
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <typename T>
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct LessByName {
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  bool operator()(const T* a, const T* b) {
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    return strcmp(a->name(), b->name()) < 0;
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  }
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass UnitTestHelper {
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert public:
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  // Returns the array of pointers to all test cases sorted by the test case
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  // name.  The caller is responsible for deleting the array.
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  static TestCase const** const GetSortedTestCases() {
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    UnitTest& unit_test = *UnitTest::GetInstance();
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    TestCase const** const test_cases =
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        new const TestCase*[unit_test.total_test_case_count()];
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    for (int i = 0; i < unit_test.total_test_case_count(); ++i)
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      test_cases[i] = unit_test.GetTestCase(i);
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    std::sort(test_cases,
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert              test_cases + unit_test.total_test_case_count(),
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert              LessByName<TestCase>());
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    return test_cases;
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  }
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  // Returns the test case by its name.  The caller doesn't own the returned
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  // pointer.
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  static const TestCase* FindTestCase(const char* name) {
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    UnitTest& unit_test = *UnitTest::GetInstance();
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    for (int i = 0; i < unit_test.total_test_case_count(); ++i) {
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      const TestCase* test_case = unit_test.GetTestCase(i);
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      if (0 == strcmp(test_case->name(), name))
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        return test_case;
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    return NULL;
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  }
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  // Returns the array of pointers to all tests in a particular test case
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  // sorted by the test name.  The caller is responsible for deleting the
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  // array.
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  static TestInfo const** const GetSortedTests(const TestCase* test_case) {
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    TestInfo const** const tests =
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        new const TestInfo*[test_case->total_test_count()];
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    for (int i = 0; i < test_case->total_test_count(); ++i)
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      tests[i] = test_case->GetTestInfo(i);
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    std::sort(tests, tests + test_case->total_test_count(),
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert              LessByName<TestInfo>());
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    return tests;
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  }
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if GTEST_HAS_TYPED_TEST
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <typename T> class TestCaseWithCommentTest : public Test {};
10111cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertTYPED_TEST_CASE(TestCaseWithCommentTest, Types<int>);
10211cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertTYPED_TEST(TestCaseWithCommentTest, Dummy) {}
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst int kTypedTestCases = 1;
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst int kTypedTests = 1;
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst int kTypedTestCases = 0;
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst int kTypedTests = 0;
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif  // GTEST_HAS_TYPED_TEST
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// We can only test the accessors that do not change value while tests run.
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Since tests can be run in any order, the values the accessors that track
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// test execution (such as failed_test_count) can not be predicted.
11411cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertTEST(ApiTest, UnitTestImmutableAccessorsWork) {
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  UnitTest* unit_test = UnitTest::GetInstance();
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  ASSERT_EQ(2 + kTypedTestCases, unit_test->total_test_case_count());
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_EQ(1 + kTypedTestCases, unit_test->test_case_to_run_count());
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_EQ(2, unit_test->disabled_test_count());
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_EQ(5 + kTypedTests, unit_test->total_test_count());
12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_EQ(3 + kTypedTests, unit_test->test_to_run_count());
12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  const TestCase** const test_cases = UnitTestHelper::GetSortedTestCases();
12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("ApiTest", test_cases[0]->name());
12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("DISABLED_Test", test_cases[1]->name());
12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if GTEST_HAS_TYPED_TEST
12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("TestCaseWithCommentTest/0", test_cases[2]->name());
12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif  // GTEST_HAS_TYPED_TEST
13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  delete[] test_cases;
13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  // The following lines initiate actions to verify certain methods in
13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  // FinalSuccessChecker::TearDown.
13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  // Records a test property to verify TestResult::GetTestProperty().
13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  RecordProperty("key", "value");
13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14011cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertAssertionResult IsNull(const char* str) {
14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  if (str != NULL) {
14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    return testing::AssertionFailure() << "argument is " << str;
14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  }
14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return AssertionSuccess();
14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14711cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertTEST(ApiTest, TestCaseImmutableAccessorsWork) {
14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  const TestCase* test_case = UnitTestHelper::FindTestCase("ApiTest");
14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  ASSERT_TRUE(test_case != NULL);
15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("ApiTest", test_case->name());
15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(IsNull(test_case->type_param()));
15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(test_case->should_run());
15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_EQ(1, test_case->disabled_test_count());
15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_EQ(3, test_case->test_to_run_count());
15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  ASSERT_EQ(4, test_case->total_test_count());
15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  const TestInfo** tests = UnitTestHelper::GetSortedTests(test_case);
15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("DISABLED_Dummy1", tests[0]->name());
16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("ApiTest", tests[0]->test_case_name());
16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(IsNull(tests[0]->value_param()));
16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(IsNull(tests[0]->type_param()));
16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_FALSE(tests[0]->should_run());
16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("TestCaseDisabledAccessorsWork", tests[1]->name());
16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("ApiTest", tests[1]->test_case_name());
16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(IsNull(tests[1]->value_param()));
16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(IsNull(tests[1]->type_param()));
17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(tests[1]->should_run());
17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("TestCaseImmutableAccessorsWork", tests[2]->name());
17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("ApiTest", tests[2]->test_case_name());
17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(IsNull(tests[2]->value_param()));
17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(IsNull(tests[2]->type_param()));
17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(tests[2]->should_run());
17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("UnitTestImmutableAccessorsWork", tests[3]->name());
17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("ApiTest", tests[3]->test_case_name());
18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(IsNull(tests[3]->value_param()));
18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(IsNull(tests[3]->type_param()));
18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(tests[3]->should_run());
18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  delete[] tests;
18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  tests = NULL;
18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if GTEST_HAS_TYPED_TEST
18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  test_case = UnitTestHelper::FindTestCase("TestCaseWithCommentTest/0");
18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  ASSERT_TRUE(test_case != NULL);
19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("TestCaseWithCommentTest/0", test_case->name());
19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ(GetTypeName<int>().c_str(), test_case->type_param());
19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(test_case->should_run());
19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_EQ(0, test_case->disabled_test_count());
19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_EQ(1, test_case->test_to_run_count());
19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  ASSERT_EQ(1, test_case->total_test_count());
19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  tests = UnitTestHelper::GetSortedTests(test_case);
19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("Dummy", tests[0]->name());
20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("TestCaseWithCommentTest/0", tests[0]->test_case_name());
20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(IsNull(tests[0]->value_param()));
20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ(GetTypeName<int>().c_str(), tests[0]->type_param());
20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(tests[0]->should_run());
20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  delete[] tests;
20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif  // GTEST_HAS_TYPED_TEST
20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
21011cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertTEST(ApiTest, TestCaseDisabledAccessorsWork) {
21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  const TestCase* test_case = UnitTestHelper::FindTestCase("DISABLED_Test");
21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  ASSERT_TRUE(test_case != NULL);
21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("DISABLED_Test", test_case->name());
21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(IsNull(test_case->type_param()));
21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_FALSE(test_case->should_run());
21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_EQ(1, test_case->disabled_test_count());
21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_EQ(0, test_case->test_to_run_count());
21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  ASSERT_EQ(1, test_case->total_test_count());
22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  const TestInfo* const test_info = test_case->GetTestInfo(0);
22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("Dummy2", test_info->name());
22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_STREQ("DISABLED_Test", test_info->test_case_name());
22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(IsNull(test_info->value_param()));
22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_TRUE(IsNull(test_info->type_param()));
22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  EXPECT_FALSE(test_info->should_run());
22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// These two tests are here to provide support for testing
23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// test_case_to_run_count, disabled_test_count, and test_to_run_count.
23111cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertTEST(ApiTest, DISABLED_Dummy1) {}
23211cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertTEST(DISABLED_Test, Dummy2) {}
23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass FinalSuccessChecker : public Environment {
23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert protected:
23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  virtual void TearDown() {
23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    UnitTest* unit_test = UnitTest::GetInstance();
23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(1 + kTypedTestCases, unit_test->successful_test_case_count());
24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(3 + kTypedTests, unit_test->successful_test_count());
24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(0, unit_test->failed_test_case_count());
24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(0, unit_test->failed_test_count());
24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(unit_test->Passed());
24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_FALSE(unit_test->Failed());
24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ASSERT_EQ(2 + kTypedTestCases, unit_test->total_test_case_count());
24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    const TestCase** const test_cases = UnitTestHelper::GetSortedTestCases();
24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ("ApiTest", test_cases[0]->name());
25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(IsNull(test_cases[0]->type_param()));
25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(test_cases[0]->should_run());
25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(1, test_cases[0]->disabled_test_count());
25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ASSERT_EQ(4, test_cases[0]->total_test_count());
25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(3, test_cases[0]->successful_test_count());
25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(0, test_cases[0]->failed_test_count());
25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(test_cases[0]->Passed());
25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_FALSE(test_cases[0]->Failed());
25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ("DISABLED_Test", test_cases[1]->name());
26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(IsNull(test_cases[1]->type_param()));
26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_FALSE(test_cases[1]->should_run());
26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(1, test_cases[1]->disabled_test_count());
26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ASSERT_EQ(1, test_cases[1]->total_test_count());
26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(0, test_cases[1]->successful_test_count());
26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(0, test_cases[1]->failed_test_count());
26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if GTEST_HAS_TYPED_TEST
26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ("TestCaseWithCommentTest/0", test_cases[2]->name());
26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ(GetTypeName<int>().c_str(), test_cases[2]->type_param());
27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(test_cases[2]->should_run());
27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(0, test_cases[2]->disabled_test_count());
27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ASSERT_EQ(1, test_cases[2]->total_test_count());
27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(1, test_cases[2]->successful_test_count());
27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(0, test_cases[2]->failed_test_count());
27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(test_cases[2]->Passed());
27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_FALSE(test_cases[2]->Failed());
27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif  // GTEST_HAS_TYPED_TEST
27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    const TestCase* test_case = UnitTestHelper::FindTestCase("ApiTest");
28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    const TestInfo** tests = UnitTestHelper::GetSortedTests(test_case);
28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ("DISABLED_Dummy1", tests[0]->name());
28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ("ApiTest", tests[0]->test_case_name());
28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_FALSE(tests[0]->should_run());
28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ("TestCaseDisabledAccessorsWork", tests[1]->name());
28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ("ApiTest", tests[1]->test_case_name());
28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(IsNull(tests[1]->value_param()));
28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(IsNull(tests[1]->type_param()));
28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(tests[1]->should_run());
29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(tests[1]->result()->Passed());
29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(0, tests[1]->result()->test_property_count());
29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ("TestCaseImmutableAccessorsWork", tests[2]->name());
29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ("ApiTest", tests[2]->test_case_name());
29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(IsNull(tests[2]->value_param()));
29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(IsNull(tests[2]->type_param()));
29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(tests[2]->should_run());
29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(tests[2]->result()->Passed());
29911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(0, tests[2]->result()->test_property_count());
30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ("UnitTestImmutableAccessorsWork", tests[3]->name());
30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ("ApiTest", tests[3]->test_case_name());
30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(IsNull(tests[3]->value_param()));
30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(IsNull(tests[3]->type_param()));
30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(tests[3]->should_run());
30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(tests[3]->result()->Passed());
30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(1, tests[3]->result()->test_property_count());
30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    const TestProperty& property = tests[3]->result()->GetTestProperty(0);
30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ("key", property.key());
31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ("value", property.value());
31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    delete[] tests;
31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if GTEST_HAS_TYPED_TEST
31511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    test_case = UnitTestHelper::FindTestCase("TestCaseWithCommentTest/0");
31611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    tests = UnitTestHelper::GetSortedTests(test_case);
31711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
31811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ("Dummy", tests[0]->name());
31911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ("TestCaseWithCommentTest/0", tests[0]->test_case_name());
32011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(IsNull(tests[0]->value_param()));
32111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_STREQ(GetTypeName<int>().c_str(), tests[0]->type_param());
32211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(tests[0]->should_run());
32311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_TRUE(tests[0]->result()->Passed());
32411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    EXPECT_EQ(0, tests[0]->result()->test_property_count());
32511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
32611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    delete[] tests;
32711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif  // GTEST_HAS_TYPED_TEST
32811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    delete[] test_cases;
32911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  }
33011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
33111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
33211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}  // namespace internal
33311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}  // namespace testing
33411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
33511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint main(int argc, char **argv) {
33611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  InitGoogleTest(&argc, argv);
33711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
33811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  AddGlobalTestEnvironment(new testing::internal::FinalSuccessChecker());
33911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
34011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return RUN_ALL_TESTS();
34111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
342