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