xref: /aosp_15_r20/external/libchrome/base/gtest_prod_util.h (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
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