15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_TEST_BROWSER_TEST_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_TEST_BROWSER_TEST_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// We only want to use InProcessBrowserTest in test targets which properly 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// isolate each test case by running each test in a separate process. 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This way if a test hangs the test launcher can reliably terminate it. 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// InProcessBrowserTest cannot be run more than once in the same address space 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// anyway - otherwise the second test crashes. 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(HAS_OUT_OF_PROC_TEST_RUNNER) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IN_PROC_BROWSER_TEST_(test_case_name, test_name, parent_class,\ 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent_id)\ 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\ 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:\ 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\ 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:\ 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RunTestOnMainThread() OVERRIDE;\ 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:\ 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TestBody() OVERRIDE {}\ 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static ::testing::TestInfo* const test_info_;\ 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GTEST_DISALLOW_COPY_AND_ASSIGN_(\ 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\ 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};\ 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)\ 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\ 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::test_info_ =\ 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::testing::internal::MakeAndRegisterTestInfo(\ 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #test_case_name, #test_name, "", "", \ 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (parent_id), \ 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent_class::SetUpTestCase, \ 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent_class::TearDownTestCase, \ 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ::testing::internal::TestFactoryImpl<\ 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\ 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::RunTestOnMainThread() 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IN_PROC_BROWSER_TEST_F(test_fixture, test_name)\ 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IN_PROC_BROWSER_TEST_(test_fixture, test_name, test_fixture,\ 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::testing::internal::GetTypeId<test_fixture>()) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define IN_PROC_BROWSER_TEST_P_(test_case_name, test_name) \ 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public test_case_name { \ 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: \ 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: \ 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RunTestOnMainThread() OVERRIDE; \ 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: \ 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TestBody() OVERRIDE {} \ 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int AddToRegistry() { \ 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetTestCasePatternHolder<test_case_name>(\ 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #test_case_name, __FILE__, __LINE__)->AddTestPattern(\ 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #test_case_name, \ 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #test_name, \ 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ::testing::internal::TestMetaFactory< \ 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \ 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; \ 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } \ 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int gtest_registering_dummy_; \ 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GTEST_DISALLOW_COPY_AND_ASSIGN_(\ 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; \ 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int GTEST_TEST_CLASS_NAME_(test_case_name, \ 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_name)::gtest_registering_dummy_ = \ 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::RunTestOnMainThread() 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Wrap the real macro with an outer macro to ensure that the parameters are 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// evaluated (e.g., if |test_name| is prefixed with MAYBE_). 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define IN_PROC_BROWSER_TEST_P(test_case_name, test_name) \ 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IN_PROC_BROWSER_TEST_P_(test_case_name, test_name) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(HAS_OUT_OF_PROC_TEST_RUNNER) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_TEST_BROWSER_TEST_H_ 84