Home | History | Annotate | Download | only in test
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CONTENT_TEST_BROWSER_TEST_H_
      6 #define CONTENT_TEST_BROWSER_TEST_H_
      7 
      8 // We only want to use InProcessBrowserTest in test targets which properly
      9 // isolate each test case by running each test in a separate process.
     10 // This way if a test hangs the test launcher can reliably terminate it.
     11 //
     12 // InProcessBrowserTest cannot be run more than once in the same address space
     13 // anyway - otherwise the second test crashes.
     14 #if defined(HAS_OUT_OF_PROC_TEST_RUNNER)
     15 
     16 #include "base/compiler_specific.h"
     17 #include "testing/gtest/include/gtest/gtest.h"
     18 
     19 #define IN_PROC_BROWSER_TEST_(test_case_name, test_name, parent_class,\
     20                               parent_id)\
     21 class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\
     22  public:\
     23   GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\
     24  protected:\
     25   virtual void RunTestOnMainThread() OVERRIDE;\
     26  private:\
     27   virtual void TestBody() OVERRIDE {}\
     28   static ::testing::TestInfo* const test_info_;\
     29   GTEST_DISALLOW_COPY_AND_ASSIGN_(\
     30       GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\
     31 };\
     32 \
     33 ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\
     34   ::test_info_ =\
     35     ::testing::internal::MakeAndRegisterTestInfo(\
     36         #test_case_name, #test_name, "", "", \
     37         (parent_id), \
     38         parent_class::SetUpTestCase, \
     39         parent_class::TearDownTestCase, \
     40         new ::testing::internal::TestFactoryImpl<\
     41             GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\
     42 void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::RunTestOnMainThread()
     43 
     44 #define IN_PROC_BROWSER_TEST_F(test_fixture, test_name)\
     45   IN_PROC_BROWSER_TEST_(test_fixture, test_name, test_fixture,\
     46                     ::testing::internal::GetTypeId<test_fixture>())
     47 
     48 #define IN_PROC_BROWSER_TEST_P_(test_case_name, test_name) \
     49   class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
     50       : public test_case_name { \
     51    public: \
     52     GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \
     53    protected: \
     54     virtual void RunTestOnMainThread() OVERRIDE; \
     55    private: \
     56     virtual void TestBody() OVERRIDE {} \
     57     static int AddToRegistry() { \
     58       ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
     59           GetTestCasePatternHolder<test_case_name>(\
     60               #test_case_name, __FILE__, __LINE__)->AddTestPattern(\
     61                   #test_case_name, \
     62                   #test_name, \
     63                   new ::testing::internal::TestMetaFactory< \
     64                       GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \
     65       return 0; \
     66     } \
     67     static int gtest_registering_dummy_; \
     68     GTEST_DISALLOW_COPY_AND_ASSIGN_(\
     69         GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \
     70   }; \
     71   int GTEST_TEST_CLASS_NAME_(test_case_name, \
     72                              test_name)::gtest_registering_dummy_ = \
     73       GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \
     74   void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::RunTestOnMainThread()
     75 
     76 // Wrap the real macro with an outer macro to ensure that the parameters are
     77 // evaluated (e.g., if |test_name| is prefixed with MAYBE_).
     78 #define IN_PROC_BROWSER_TEST_P(test_case_name, test_name) \
     79   IN_PROC_BROWSER_TEST_P_(test_case_name, test_name)
     80 
     81 #endif  // defined(HAS_OUT_OF_PROC_TEST_RUNNER)
     82 
     83 #endif  // CONTENT_TEST_BROWSER_TEST_H_
     84