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