xref: /aosp_15_r20/external/cronet/base/gtest_prod_util.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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