github.com/jlmucb/cloudproxy@v0.0.0-20170830161738-b5aa0b619bc4/src/third_party/googlemock/gtest/test/gtest-unittest-api_test.cc (about)

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