gtest-unittest-api_test.cc revision fbaaef999ba563838ebd00874ed8a1c01fbf286d
1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Copyright 2009 Google Inc.  All rights reserved.
2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Redistribution and use in source and binary forms, with or without
4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// modification, are permitted provided that the following conditions are
5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// met:
6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//     * Redistributions of source code must retain the above copyright
8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// notice, this list of conditions and the following disclaimer.
9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//     * Redistributions in binary form must reproduce the above
10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// copyright notice, this list of conditions and the following disclaimer
11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// in the documentation and/or other materials provided with the
12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// distribution.
13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//     * Neither the name of Google Inc. nor the names of its
14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// contributors may be used to endorse or promote products derived from
15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// this software without specific prior written permission.
16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Author: vladl@google.com (Vlad Losev)
30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// The Google C++ Testing Framework (Google Test)
32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// This file contains tests verifying correctness of data provided via
34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// UnitTest's public methods.
35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <string.h>  // For strcmp.
39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <algorithm>
40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing ::testing::AddGlobalTestEnvironment;
42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing ::testing::Environment;
43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing ::testing::InitGoogleTest;
44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing ::testing::Test;
45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing ::testing::TestInfo;
46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing ::testing::TestPartResult;
47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing ::testing::UnitTest;
48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing ::testing::internal::TestCase;
49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing ::testing::internal::TestProperty;
50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#if GTEST_HAS_TYPED_TEST
52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing ::testing::Types;
53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing ::testing::internal::GetTypeName;
54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing ::testing::internal::String;
55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#endif  // GTEST_HAS_TYPED_TEST
56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace testing {
58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace internal {
59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate <typename T>
61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillestruct LessByName {
62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  bool operator()(const T* a, const T* b) {
63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    return strcmp(a->name(), b->name()) < 0;
64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  }
65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass UnitTestAccessor {
68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public:
69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // Returns the array of pointers to all test cases sorted by the test case
70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // name.  The caller is responsible for deleting the array.
71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  static TestCase const** const GetSortedTestCases() {
72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    UnitTest* unit_test = UnitTest::GetInstance();
73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    TestCase const** const test_cases =
74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville        new const TestCase*[unit_test->total_test_case_count()];
75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    for (int i = 0; i < unit_test->total_test_case_count(); ++i)
77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      test_cases[i] = unit_test->GetTestCase(i);
78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    std::sort(test_cases,
80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              test_cases + unit_test->total_test_case_count(),
81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              LessByName<TestCase>());
82fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    return test_cases;
83fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  }
84fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
85fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // Returns the test case by its name.  The caller doesn't own the returned
86fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // pointer.
87fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  static const TestCase* FindTestCase(const char* name) {
88fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    UnitTest* unit_test = UnitTest::GetInstance();
89fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    for (int i = 0; i < unit_test->total_test_case_count(); ++i) {
90fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      const TestCase* test_case = unit_test->GetTestCase(i);
91fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      if (0 == strcmp(test_case->name(), name))
92fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville        return test_case;
93fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    }
94fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    return NULL;
95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  }
96fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // Returns the array of pointers to all tests in a particular test case
98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // sorted by the test name.  The caller is responsible for deleting the
99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // array.
100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  static TestInfo const** const GetSortedTests(const TestCase* test_case) {
101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    TestInfo const** const tests =
102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville        new const TestInfo*[test_case->total_test_count()];
103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    for (int i = 0; i < test_case->total_test_count(); ++i)
105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      tests[i] = test_case->GetTestInfo(i);
106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    std::sort(tests,
108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              tests + test_case->total_test_count(),
109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              LessByName<TestInfo>());
110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    return tests;
111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  }
112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// TODO(vladl@google.com): Put tests into the internal namespace after
115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// UnitTest methods are published.
116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}  // namespace internal
117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing internal::UnitTestAccessor;
119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#if GTEST_HAS_TYPED_TEST
121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate <typename T> class TestCaseWithCommentTest : public Test {};
122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTYPED_TEST_CASE(TestCaseWithCommentTest, Types<int>);
123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTYPED_TEST(TestCaseWithCommentTest, Dummy) {}
124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleconst int kTypedTestCases = 1;
126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleconst int kTypedTests = 1;
127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleString GetExpectedTestCaseComment() {
129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Message comment;
130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  comment << "TypeParam = " << GetTypeName<int>().c_str();
131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  return comment.GetString();
132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#else
134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleconst int kTypedTestCases = 0;
135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleconst int kTypedTests = 0;
136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#endif  // GTEST_HAS_TYPED_TEST
137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// We can only test the accessors that do not change value while tests run.
139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Since tests can be run in any order, the values the accessors that track
140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// test execution (such as failed_test_count) can not be predicted.
141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(ApiTest, UnitTestImmutableAccessorsWork) {
142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  UnitTest* unit_test = UnitTest::GetInstance();
143fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
144fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  ASSERT_EQ(2 + kTypedTestCases, unit_test->total_test_case_count());
145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_EQ(1 + kTypedTestCases, unit_test->test_case_to_run_count());
146fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_EQ(2, unit_test->disabled_test_count());
147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_EQ(5 + kTypedTests, unit_test->total_test_count());
148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_EQ(3 + kTypedTests, unit_test->test_to_run_count());
149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  const TestCase** const test_cases = UnitTestAccessor::GetSortedTestCases();
151fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
152fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("ApiTest", test_cases[0]->name());
153fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("DISABLED_Test", test_cases[1]->name());
154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#if GTEST_HAS_TYPED_TEST
155fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("TestCaseWithCommentTest/0", test_cases[2]->name());
156fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#endif  // GTEST_HAS_TYPED_TEST
157fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
158fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  delete[] test_cases;
159fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
160fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // The following lines initiate actions to verify certain methods in
161fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // FinalSuccessChecker::TearDown.
162fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
163fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // Records a test property to verify TestResult::GetTestProperty().
164fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  RecordProperty("key", "value");
165fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
166fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
167fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(ApiTest, TestCaseImmutableAccessorsWork) {
168fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  const TestCase* test_case = UnitTestAccessor::FindTestCase("ApiTest");
169fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  ASSERT_TRUE(test_case != NULL);
170fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
171fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("ApiTest", test_case->name());
172fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("", test_case->comment());
173fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(test_case->should_run());
174fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_EQ(1, test_case->disabled_test_count());
175fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_EQ(3, test_case->test_to_run_count());
176fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  ASSERT_EQ(4, test_case->total_test_count());
177fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
178fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  const TestInfo** tests = UnitTestAccessor::GetSortedTests(test_case);
179fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
180fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("DISABLED_Dummy1", tests[0]->name());
181fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("ApiTest", tests[0]->test_case_name());
182fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("", tests[0]->comment());
183fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("", tests[0]->test_case_comment());
184fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_FALSE(tests[0]->should_run());
185fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
186fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("TestCaseDisabledAccessorsWork", tests[1]->name());
187fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("ApiTest", tests[1]->test_case_name());
188fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("", tests[1]->comment());
189fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("", tests[1]->test_case_comment());
190fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(tests[1]->should_run());
191fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
192fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("TestCaseImmutableAccessorsWork", tests[2]->name());
193fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("ApiTest", tests[2]->test_case_name());
194fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("", tests[2]->comment());
195fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("", tests[2]->test_case_comment());
196fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(tests[2]->should_run());
197fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
198fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("UnitTestImmutableAccessorsWork", tests[3]->name());
199fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("ApiTest", tests[3]->test_case_name());
200fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("", tests[3]->comment());
201fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("", tests[3]->test_case_comment());
202fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(tests[3]->should_run());
203fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
204fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  delete[] tests;
205fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  tests = NULL;
206fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
207fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#if GTEST_HAS_TYPED_TEST
208fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  test_case = UnitTestAccessor::FindTestCase("TestCaseWithCommentTest/0");
209fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  ASSERT_TRUE(test_case != NULL);
210fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
211fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("TestCaseWithCommentTest/0", test_case->name());
212fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ(GetExpectedTestCaseComment().c_str(), test_case->comment());
213fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(test_case->should_run());
214fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_EQ(0, test_case->disabled_test_count());
215fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_EQ(1, test_case->test_to_run_count());
216fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  ASSERT_EQ(1, test_case->total_test_count());
217fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
218fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  tests = UnitTestAccessor::GetSortedTests(test_case);
219fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
220fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("Dummy", tests[0]->name());
221fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("TestCaseWithCommentTest/0", tests[0]->test_case_name());
222fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("", tests[0]->comment());
223fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ(GetExpectedTestCaseComment().c_str(),
224fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               tests[0]->test_case_comment());
225fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(tests[0]->should_run());
226fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
227fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  delete[] tests;
228fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#endif  // GTEST_HAS_TYPED_TEST
229fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
230fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
231fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(ApiTest, TestCaseDisabledAccessorsWork) {
232fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  const TestCase* test_case = UnitTestAccessor::FindTestCase("DISABLED_Test");
233fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  ASSERT_TRUE(test_case != NULL);
234fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
235fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("DISABLED_Test", test_case->name());
236fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("", test_case->comment());
237fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_FALSE(test_case->should_run());
238fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_EQ(1, test_case->disabled_test_count());
239fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_EQ(0, test_case->test_to_run_count());
240fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  ASSERT_EQ(1, test_case->total_test_count());
241fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
242fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  const TestInfo* const test_info = test_case->GetTestInfo(0);
243fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("Dummy2", test_info->name());
244fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("DISABLED_Test", test_info->test_case_name());
245fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("", test_info->comment());
246fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("", test_info->test_case_comment());
247fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_FALSE(test_info->should_run());
248fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
249fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
250fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// These two tests are here to provide support for testing
251fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// test_case_to_run_count, disabled_test_count, and test_to_run_count.
252fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(ApiTest, DISABLED_Dummy1) {}
253fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(DISABLED_Test, Dummy2) {}
254fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
255fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass FinalSuccessChecker : public Environment {
256fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville protected:
257fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  virtual void TearDown() {
258fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    UnitTest* unit_test = UnitTest::GetInstance();
259fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
260fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(1 + kTypedTestCases, unit_test->successful_test_case_count());
261fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(3 + kTypedTests, unit_test->successful_test_count());
262fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(0, unit_test->failed_test_case_count());
263fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(0, unit_test->failed_test_count());
264fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_TRUE(unit_test->Passed());
265fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_FALSE(unit_test->Failed());
266fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    ASSERT_EQ(2 + kTypedTestCases, unit_test->total_test_case_count());
267fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
268fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    const TestCase** const test_cases = UnitTestAccessor::GetSortedTestCases();
269fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
270fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("ApiTest", test_cases[0]->name());
271fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("", test_cases[0]->comment());
272fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_TRUE(test_cases[0]->should_run());
273fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(1, test_cases[0]->disabled_test_count());
274fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    ASSERT_EQ(4, test_cases[0]->total_test_count());
275fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(3, test_cases[0]->successful_test_count());
276fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(0, test_cases[0]->failed_test_count());
277fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_TRUE(test_cases[0]->Passed());
278fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_FALSE(test_cases[0]->Failed());
279fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
280fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("DISABLED_Test", test_cases[1]->name());
281fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("", test_cases[1]->comment());
282fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_FALSE(test_cases[1]->should_run());
283fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(1, test_cases[1]->disabled_test_count());
284fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    ASSERT_EQ(1, test_cases[1]->total_test_count());
285fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(0, test_cases[1]->successful_test_count());
286fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(0, test_cases[1]->failed_test_count());
287fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
288fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#if GTEST_HAS_TYPED_TEST
289fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("TestCaseWithCommentTest/0", test_cases[2]->name());
290fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ(GetExpectedTestCaseComment().c_str(),
291fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                 test_cases[2]->comment());
292fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_TRUE(test_cases[2]->should_run());
293fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(0, test_cases[2]->disabled_test_count());
294fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    ASSERT_EQ(1, test_cases[2]->total_test_count());
295fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(1, test_cases[2]->successful_test_count());
296fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(0, test_cases[2]->failed_test_count());
297fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_TRUE(test_cases[2]->Passed());
298fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_FALSE(test_cases[2]->Failed());
299fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#endif  // GTEST_HAS_TYPED_TEST
300fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
301fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    const TestCase* test_case = UnitTestAccessor::FindTestCase("ApiTest");
302fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    const TestInfo** tests = UnitTestAccessor::GetSortedTests(test_case);
303fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("DISABLED_Dummy1", tests[0]->name());
304fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("ApiTest", tests[0]->test_case_name());
305fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_FALSE(tests[0]->should_run());
306fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
307fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("TestCaseDisabledAccessorsWork", tests[1]->name());
308fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("ApiTest", tests[1]->test_case_name());
309fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("", tests[1]->comment());
310fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("", tests[1]->test_case_comment());
311fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_TRUE(tests[1]->should_run());
312fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_TRUE(tests[1]->result()->Passed());
313fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(0, tests[1]->result()->test_property_count());
314fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
315fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("TestCaseImmutableAccessorsWork", tests[2]->name());
316fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("ApiTest", tests[2]->test_case_name());
317fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("", tests[2]->comment());
318fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("", tests[2]->test_case_comment());
319fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_TRUE(tests[2]->should_run());
320fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_TRUE(tests[2]->result()->Passed());
321fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(0, tests[2]->result()->test_property_count());
322fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
323fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("UnitTestImmutableAccessorsWork", tests[3]->name());
324fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("ApiTest", tests[3]->test_case_name());
325fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("", tests[3]->comment());
326fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("", tests[3]->test_case_comment());
327fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_TRUE(tests[3]->should_run());
328fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_TRUE(tests[3]->result()->Passed());
329fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(1, tests[3]->result()->test_property_count());
330fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    const TestProperty& property = tests[3]->result()->GetTestProperty(0);
331fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("key", property.key());
332fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("value", property.value());
333fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
334fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    delete[] tests;
335fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
336fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#if GTEST_HAS_TYPED_TEST
337fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    test_case = UnitTestAccessor::FindTestCase("TestCaseWithCommentTest/0");
338fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    tests = UnitTestAccessor::GetSortedTests(test_case);
339fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
340fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("Dummy", tests[0]->name());
341fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("TestCaseWithCommentTest/0", tests[0]->test_case_name());
342fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ("", tests[0]->comment());
343fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STREQ(GetExpectedTestCaseComment().c_str(),
344fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                 tests[0]->test_case_comment());
345fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_TRUE(tests[0]->should_run());
346fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_TRUE(tests[0]->result()->Passed());
347fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_EQ(0, tests[0]->result()->test_property_count());
348fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
349fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    delete[] tests;
350fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#endif  // GTEST_HAS_TYPED_TEST
351fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    delete[] test_cases;
352fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  }
353fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
354fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
355fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}  // namespace testing
356fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
357fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleint main(int argc, char **argv) {
358fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  InitGoogleTest(&argc, argv);
359fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
360fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  AddGlobalTestEnvironment(new testing::FinalSuccessChecker());
361fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
362fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  return RUN_ALL_TESTS();
363fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
364