browser_test.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
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
18#define IN_PROC_BROWSER_TEST_(test_case_name, test_name, parent_class,\
19                              parent_id)\
20class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\
21 public:\
22  GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\
23 protected:\
24  virtual void RunTestOnMainThread() OVERRIDE;\
25 private:\
26  virtual void TestBody() OVERRIDE {}\
27  static ::testing::TestInfo* const test_info_;\
28  GTEST_DISALLOW_COPY_AND_ASSIGN_(\
29      GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\
30};\
31\
32::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\
33  ::test_info_ =\
34    ::testing::internal::MakeAndRegisterTestInfo(\
35        #test_case_name, #test_name, "", "", \
36        (parent_id), \
37        parent_class::SetUpTestCase, \
38        parent_class::TearDownTestCase, \
39        new ::testing::internal::TestFactoryImpl<\
40            GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\
41void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::RunTestOnMainThread()
42
43#define IN_PROC_BROWSER_TEST_F(test_fixture, test_name)\
44  IN_PROC_BROWSER_TEST_(test_fixture, test_name, test_fixture,\
45                    ::testing::internal::GetTypeId<test_fixture>())
46
47#define IN_PROC_BROWSER_TEST_P(test_case_name, test_name) \
48  class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
49      : public test_case_name { \
50   public: \
51    GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \
52   protected: \
53    virtual void RunTestOnMainThread() OVERRIDE; \
54   private: \
55    virtual void TestBody() OVERRIDE {} \
56    static int AddToRegistry() { \
57      ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
58          GetTestCasePatternHolder<test_case_name>(\
59              #test_case_name, __FILE__, __LINE__)->AddTestPattern(\
60                  #test_case_name, \
61                  #test_name, \
62                  new ::testing::internal::TestMetaFactory< \
63                      GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \
64      return 0; \
65    } \
66    static int gtest_registering_dummy_; \
67    GTEST_DISALLOW_COPY_AND_ASSIGN_(\
68        GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \
69  }; \
70  int GTEST_TEST_CLASS_NAME_(test_case_name, \
71                             test_name)::gtest_registering_dummy_ = \
72      GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \
73  void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::RunTestOnMainThread()
74
75#endif  // defined(HAS_OUT_OF_PROC_TEST_RUNNER)
76
77#endif  // CONTENT_TEST_BROWSER_TEST_H_
78