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