| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CONTENT_TEST_BROWSER_TEST_H_ |
| #define CONTENT_TEST_BROWSER_TEST_H_ |
| |
| // We only want to use InProcessBrowserTest in test targets which properly |
| // isolate each test case by running each test in a separate process. |
| // This way if a test hangs the test launcher can reliably terminate it. |
| // |
| // InProcessBrowserTest cannot be run more than once in the same address space |
| // anyway - otherwise the second test crashes. |
| #if defined(HAS_OUT_OF_PROC_TEST_RUNNER) |
| |
| #include "base/compiler_specific.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| #define IN_PROC_BROWSER_TEST_(test_case_name, test_name, parent_class,\ |
| parent_id)\ |
| class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\ |
| public:\ |
| GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\ |
| protected:\ |
| virtual void RunTestOnMainThread() OVERRIDE;\ |
| private:\ |
| virtual void TestBody() OVERRIDE {}\ |
| static ::testing::TestInfo* const test_info_;\ |
| GTEST_DISALLOW_COPY_AND_ASSIGN_(\ |
| GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\ |
| };\ |
| \ |
| ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\ |
| ::test_info_ =\ |
| ::testing::internal::MakeAndRegisterTestInfo(\ |
| #test_case_name, #test_name, "", "", \ |
| (parent_id), \ |
| parent_class::SetUpTestCase, \ |
| parent_class::TearDownTestCase, \ |
| new ::testing::internal::TestFactoryImpl<\ |
| GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\ |
| void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::RunTestOnMainThread() |
| |
| #define IN_PROC_BROWSER_TEST_F(test_fixture, test_name)\ |
| IN_PROC_BROWSER_TEST_(test_fixture, test_name, test_fixture,\ |
| ::testing::internal::GetTypeId<test_fixture>()) |
| |
| #define IN_PROC_BROWSER_TEST_P_(test_case_name, test_name) \ |
| class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ |
| : public test_case_name { \ |
| public: \ |
| GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ |
| protected: \ |
| virtual void RunTestOnMainThread() OVERRIDE; \ |
| private: \ |
| virtual void TestBody() OVERRIDE {} \ |
| static int AddToRegistry() { \ |
| ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ |
| GetTestCasePatternHolder<test_case_name>(\ |
| #test_case_name, __FILE__, __LINE__)->AddTestPattern(\ |
| #test_case_name, \ |
| #test_name, \ |
| new ::testing::internal::TestMetaFactory< \ |
| GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \ |
| return 0; \ |
| } \ |
| static int gtest_registering_dummy_; \ |
| GTEST_DISALLOW_COPY_AND_ASSIGN_(\ |
| GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ |
| }; \ |
| int GTEST_TEST_CLASS_NAME_(test_case_name, \ |
| test_name)::gtest_registering_dummy_ = \ |
| GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ |
| void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::RunTestOnMainThread() |
| |
| // Wrap the real macro with an outer macro to ensure that the parameters are |
| // evaluated (e.g., if |test_name| is prefixed with MAYBE_). |
| #define IN_PROC_BROWSER_TEST_P(test_case_name, test_name) \ |
| IN_PROC_BROWSER_TEST_P_(test_case_name, test_name) |
| |
| #endif // defined(HAS_OUT_OF_PROC_TEST_RUNNER) |
| |
| #endif // CONTENT_TEST_BROWSER_TEST_H_ |