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