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 BASE_GTEST_PROD_UTIL_H_ 6#define BASE_GTEST_PROD_UTIL_H_ 7 8#include "testing/gtest/include/gtest/gtest_prod.h" 9 10// This is a wrapper for gtest's FRIEND_TEST macro that friends 11// test with all possible prefixes. This is very helpful when changing the test 12// prefix, because the friend declarations don't need to be updated. 13// 14// Example usage: 15// 16// class MyClass { 17// private: 18// void MyMethod(); 19// FRIEND_TEST_ALL_PREFIXES(MyClassTest, MyMethod); 20// }; 21#define FRIEND_TEST_ALL_PREFIXES(test_case_name, test_name) \ 22 FRIEND_TEST(test_case_name, test_name); \ 23 FRIEND_TEST(test_case_name, DISABLED_##test_name); \ 24 FRIEND_TEST(test_case_name, FLAKY_##test_name) 25 26// C++ compilers will refuse to compile the following code: 27// 28// namespace foo { 29// class MyClass { 30// private: 31// FRIEND_TEST_ALL_PREFIXES(MyClassTest, TestMethod); 32// bool private_var; 33// }; 34// } // namespace foo 35// 36// class MyClassTest::TestMethod() { 37// foo::MyClass foo_class; 38// foo_class.private_var = true; 39// } 40// 41// Unless you forward declare MyClassTest::TestMethod outside of namespace foo. 42// Use FORWARD_DECLARE_TEST to do so for all possible prefixes. 43// 44// Example usage: 45// 46// FORWARD_DECLARE_TEST(MyClassTest, TestMethod); 47// 48// namespace foo { 49// class MyClass { 50// private: 51// FRIEND_TEST_ALL_PREFIXES(::MyClassTest, TestMethod); // NOTE use of :: 52// bool private_var; 53// }; 54// } // namespace foo 55// 56// class MyClassTest::TestMethod() { 57// foo::MyClass foo_class; 58// foo_class.private_var = true; 59// } 60 61#define FORWARD_DECLARE_TEST(test_case_name, test_name) \ 62 class test_case_name##_##test_name##_Test; \ 63 class test_case_name##_##DISABLED_##test_name##_Test; \ 64 class test_case_name##_##FLAKY_##test_name##_Test 65 66#endif // BASE_GTEST_PROD_UTIL_H_ 67