1*635a8641SAndroid Build Coastguard Worker // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file. 4*635a8641SAndroid Build Coastguard Worker 5*635a8641SAndroid Build Coastguard Worker #ifndef BASE_GTEST_PROD_UTIL_H_ 6*635a8641SAndroid Build Coastguard Worker #define BASE_GTEST_PROD_UTIL_H_ 7*635a8641SAndroid Build Coastguard Worker 8*635a8641SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest_prod.h" // nogncheck 9*635a8641SAndroid Build Coastguard Worker 10*635a8641SAndroid Build Coastguard Worker // This is a wrapper for gtest's FRIEND_TEST macro that friends 11*635a8641SAndroid Build Coastguard Worker // test with all possible prefixes. This is very helpful when changing the test 12*635a8641SAndroid Build Coastguard Worker // prefix, because the friend declarations don't need to be updated. 13*635a8641SAndroid Build Coastguard Worker // 14*635a8641SAndroid Build Coastguard Worker // Example usage: 15*635a8641SAndroid Build Coastguard Worker // 16*635a8641SAndroid Build Coastguard Worker // class MyClass { 17*635a8641SAndroid Build Coastguard Worker // private: 18*635a8641SAndroid Build Coastguard Worker // void MyMethod(); 19*635a8641SAndroid Build Coastguard Worker // FRIEND_TEST_ALL_PREFIXES(MyClassTest, MyMethod); 20*635a8641SAndroid Build Coastguard Worker // }; 21*635a8641SAndroid Build Coastguard Worker #define FRIEND_TEST_ALL_PREFIXES(test_case_name, test_name) \ 22*635a8641SAndroid Build Coastguard Worker FRIEND_TEST(test_case_name, test_name); \ 23*635a8641SAndroid Build Coastguard Worker FRIEND_TEST(test_case_name, DISABLED_##test_name); \ 24*635a8641SAndroid Build Coastguard Worker FRIEND_TEST(test_case_name, FLAKY_##test_name) 25*635a8641SAndroid Build Coastguard Worker 26*635a8641SAndroid Build Coastguard Worker // C++ compilers will refuse to compile the following code: 27*635a8641SAndroid Build Coastguard Worker // 28*635a8641SAndroid Build Coastguard Worker // namespace foo { 29*635a8641SAndroid Build Coastguard Worker // class MyClass { 30*635a8641SAndroid Build Coastguard Worker // private: 31*635a8641SAndroid Build Coastguard Worker // FRIEND_TEST_ALL_PREFIXES(MyClassTest, TestMethod); 32*635a8641SAndroid Build Coastguard Worker // bool private_var; 33*635a8641SAndroid Build Coastguard Worker // }; 34*635a8641SAndroid Build Coastguard Worker // } // namespace foo 35*635a8641SAndroid Build Coastguard Worker // 36*635a8641SAndroid Build Coastguard Worker // class MyClassTest::TestMethod() { 37*635a8641SAndroid Build Coastguard Worker // foo::MyClass foo_class; 38*635a8641SAndroid Build Coastguard Worker // foo_class.private_var = true; 39*635a8641SAndroid Build Coastguard Worker // } 40*635a8641SAndroid Build Coastguard Worker // 41*635a8641SAndroid Build Coastguard Worker // Unless you forward declare MyClassTest::TestMethod outside of namespace foo. 42*635a8641SAndroid Build Coastguard Worker // Use FORWARD_DECLARE_TEST to do so for all possible prefixes. 43*635a8641SAndroid Build Coastguard Worker // 44*635a8641SAndroid Build Coastguard Worker // Example usage: 45*635a8641SAndroid Build Coastguard Worker // 46*635a8641SAndroid Build Coastguard Worker // FORWARD_DECLARE_TEST(MyClassTest, TestMethod); 47*635a8641SAndroid Build Coastguard Worker // 48*635a8641SAndroid Build Coastguard Worker // namespace foo { 49*635a8641SAndroid Build Coastguard Worker // class MyClass { 50*635a8641SAndroid Build Coastguard Worker // private: 51*635a8641SAndroid Build Coastguard Worker // FRIEND_TEST_ALL_PREFIXES(::MyClassTest, TestMethod); // NOTE use of :: 52*635a8641SAndroid Build Coastguard Worker // bool private_var; 53*635a8641SAndroid Build Coastguard Worker // }; 54*635a8641SAndroid Build Coastguard Worker // } // namespace foo 55*635a8641SAndroid Build Coastguard Worker // 56*635a8641SAndroid Build Coastguard Worker // class MyClassTest::TestMethod() { 57*635a8641SAndroid Build Coastguard Worker // foo::MyClass foo_class; 58*635a8641SAndroid Build Coastguard Worker // foo_class.private_var = true; 59*635a8641SAndroid Build Coastguard Worker // } 60*635a8641SAndroid Build Coastguard Worker 61*635a8641SAndroid Build Coastguard Worker #define FORWARD_DECLARE_TEST(test_case_name, test_name) \ 62*635a8641SAndroid Build Coastguard Worker class test_case_name##_##test_name##_Test; \ 63*635a8641SAndroid Build Coastguard Worker class test_case_name##_##DISABLED_##test_name##_Test; \ 64*635a8641SAndroid Build Coastguard Worker class test_case_name##_##FLAKY_##test_name##_Test 65*635a8641SAndroid Build Coastguard Worker 66*635a8641SAndroid Build Coastguard Worker #endif // BASE_GTEST_PROD_UTIL_H_ 67