xref: /aosp_15_r20/external/cronet/third_party/googletest/README.chromium (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard WorkerName: Google Test: Google's C++ Testing Framework
2*6777b538SAndroid Build Coastguard WorkerShort Name: googletest
3*6777b538SAndroid Build Coastguard WorkerURL: https://github.com/google/googletest.git
4*6777b538SAndroid Build Coastguard WorkerVersion: unknown
5*6777b538SAndroid Build Coastguard WorkerLicense: BSD
6*6777b538SAndroid Build Coastguard WorkerLicense File: src/LICENSE
7*6777b538SAndroid Build Coastguard WorkerShipped: no
8*6777b538SAndroid Build Coastguard WorkerSecurity critical: no
9*6777b538SAndroid Build Coastguard Worker
10*6777b538SAndroid Build Coastguard WorkerGoogle Test is imported as-is, to facilitate version bumping. However, the
11*6777b538SAndroid Build Coastguard Workerfile/directory layout of Google Test is not yet considered stable. Therefore,
12*6777b538SAndroid Build Coastguard Workeruntil Google Test's layout stabilizes, Chromium code MUST NOT depend on it
13*6777b538SAndroid Build Coastguard Workerdirectly. Instead, Chromium code MUST:
14*6777b538SAndroid Build Coastguard Worker
15*6777b538SAndroid Build Coastguard Worker* #include the headers in testing/gtest and testing/gmock
16*6777b538SAndroid Build Coastguard Worker* use //testing/gtest(:gtest_main) and //testing/gmock(:gmock_main) in BUILD.gn
17*6777b538SAndroid Build Coastguard Worker  deps
18*6777b538SAndroid Build Coastguard Worker
19*6777b538SAndroid Build Coastguard WorkerThis will allow us to adapt to Google Test changes with minimal disruption.
20*6777b538SAndroid Build Coastguard Worker
21*6777b538SAndroid Build Coastguard Worker
22*6777b538SAndroid Build Coastguard Worker## Resources for Rolling Googletest in Chrome
23*6777b538SAndroid Build Coastguard Worker
24*6777b538SAndroid Build Coastguard Worker### What is Googletest
25*6777b538SAndroid Build Coastguard Worker
26*6777b538SAndroid Build Coastguard WorkerGoogletest is an open source C++ testing framework developed by Google and used
27*6777b538SAndroid Build Coastguard Workerby Chromium. See the [User Guide](https://google.github.io/googletest/).
28*6777b538SAndroid Build Coastguard Worker
29*6777b538SAndroid Build Coastguard Worker### Where is Googletest
30*6777b538SAndroid Build Coastguard Worker
31*6777b538SAndroid Build Coastguard WorkerGoogletest is developed in google3 and uses
32*6777b538SAndroid Build Coastguard Worker[copybara](https://github.com/google/copybara) to sync with the public GitHub
33*6777b538SAndroid Build Coastguard Workerrepository.
34*6777b538SAndroid Build Coastguard Worker
35*6777b538SAndroid Build Coastguard Worker* Development (Googler only): [google3/third\_party/googletest](http://google3/third_party/googletest/)
36*6777b538SAndroid Build Coastguard Worker* GitHub: https://github.com/google/googletest
37*6777b538SAndroid Build Coastguard Worker* Chromium mirror: https://chromium.googlesource.com/external/github.com/google/googletest/
38*6777b538SAndroid Build Coastguard Worker* Locally, [third\_party/googletest/src/](https://source.chromium.org/chromium/chromium/src/+/master:third_party/googletest/src/)
39*6777b538SAndroid Build Coastguard Worker  is a copy of Googletest which is updated via `gclient sync` according to the
40*6777b538SAndroid Build Coastguard Worker  `googletest revision` commit hash in the
41*6777b538SAndroid Build Coastguard Worker  [DEPS file](https://source.chromium.org/chromium/chromium/src/+/master:DEPS;l=244?q=DEPS%20googletest)
42*6777b538SAndroid Build Coastguard Worker
43*6777b538SAndroid Build Coastguard Worker### Unblocking Googletest Rolls
44*6777b538SAndroid Build Coastguard Worker
45*6777b538SAndroid Build Coastguard Worker1. Roll Googletest to include the breaking change
46*6777b538SAndroid Build Coastguard Worker* Find the hash (on GitHub) of the offending commit
47*6777b538SAndroid Build Coastguard Worker  * If the change came from google3, the CL number can be found in the
48*6777b538SAndroid Build Coastguard Worker    `PiperOrigin-RevId` footer of Copybara commits
49*6777b538SAndroid Build Coastguard Worker* On a fresh checkout, pull in the relevant change. Either:
50*6777b538SAndroid Build Coastguard Worker  * Sync using the DEPS file
51*6777b538SAndroid Build Coastguard Worker```
52*6777b538SAndroid Build Coastguard Workerroll-dep --roll-to=commitish src/third_party/googletest/src/
53*6777b538SAndroid Build Coastguard Workergclient sync
54*6777b538SAndroid Build Coastguard Worker```
55*6777b538SAndroid Build Coastguard Worker  * Check out the commit directly
56*6777b538SAndroid Build Coastguard Worker```
57*6777b538SAndroid Build Coastguard Workercd third_party/googletest/src
58*6777b538SAndroid Build Coastguard Workergit remote add up https://github.com/google/googletest.git
59*6777b538SAndroid Build Coastguard Workergit checkout commitish
60*6777b538SAndroid Build Coastguard Worker```
61*6777b538SAndroid Build Coastguard Worker
62*6777b538SAndroid Build Coastguard Worker2. Observe errors
63*6777b538SAndroid Build Coastguard Worker* Ideally, this can be done by building locally.
64*6777b538SAndroid Build Coastguard Worker  If the build is successful, this means the change does not affect your OS or
65*6777b538SAndroid Build Coastguard Worker  your compiler flags differ from the trybots
66*6777b538SAndroid Build Coastguard Worker* Upload a CL with the added trybots from
67*6777b538SAndroid Build Coastguard Worker  [Testing Changes to Chromium in Chromium](#testing-changes-to-chromium-in-chromium)
68*6777b538SAndroid Build Coastguard Worker
69*6777b538SAndroid Build Coastguard Worker3. Make changes
70*6777b538SAndroid Build Coastguard Worker* To Chromium: create a CL including both the roll and other changes
71*6777b538SAndroid Build Coastguard Worker* To Googletest:
72*6777b538SAndroid Build Coastguard Worker  * Make changes to [third\_party/googletest/src/](https://source.chromium.org/chromium/chromium/src/+/master:third_party/googletest/src/)
73*6777b538SAndroid Build Coastguard Worker    and try building locally. If the fix is successful and you’re confident
74*6777b538SAndroid Build Coastguard Worker    this change will work across all the trybots, create a PR on GitHub or a
75*6777b538SAndroid Build Coastguard Worker    CL to google3 (Googler only) of the changes you made locally to
76*6777b538SAndroid Build Coastguard Worker    [third\_party/googletest/src/](https://source.chromium.org/chromium/chromium/src/+/master:third_party/googletest/src/).
77*6777b538SAndroid Build Coastguard Worker    See [Testing Changes to Googletest in Googletest](#testing-changes-to-googletest-in-googletest)
78*6777b538SAndroid Build Coastguard Worker  * What if I need to make a change to Googletest, but I’m not confident it
79*6777b538SAndroid Build Coastguard Worker    will work with Chromium? Maybe it has to do with a tricky compiler error
80*6777b538SAndroid Build Coastguard Worker    that only affects a specific OS. See
81*6777b538SAndroid Build Coastguard Worker    [Testing Changes to Googletest in Chromium](#testing-changes-to-googletest-in-chromium)
82*6777b538SAndroid Build Coastguard Worker  * Once your Googletest change lands, create a roll which includes both the
83*6777b538SAndroid Build Coastguard Worker    offending commit and your change
84*6777b538SAndroid Build Coastguard Worker
85*6777b538SAndroid Build Coastguard Worker### Testing Changes to Chromium in Chromium
86*6777b538SAndroid Build Coastguard Worker
87*6777b538SAndroid Build Coastguard WorkerMost changes should only require testing via the trybots,
88*6777b538SAndroid Build Coastguard Workerwith the following added:
89*6777b538SAndroid Build Coastguard Worker
90*6777b538SAndroid Build Coastguard Worker`Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:linux_chromium_cfi_rel_ng;luci.chrome.try:win-chrome`
91*6777b538SAndroid Build Coastguard Worker
92*6777b538SAndroid Build Coastguard Worker### Testing Changes to Googletest in Googletest
93*6777b538SAndroid Build Coastguard Worker
94*6777b538SAndroid Build Coastguard WorkerExternal: Upload a PR with your proposed changes to GitHub.
95*6777b538SAndroid Build Coastguard WorkerThis will trigger automated testing.
96*6777b538SAndroid Build Coastguard Worker
97*6777b538SAndroid Build Coastguard WorkerGooglers: See the [Googletest Developer’s Guide](http://go/gunitdev).
98*6777b538SAndroid Build Coastguard Worker
99*6777b538SAndroid Build Coastguard Worker### Testing Changes to Googletest in Chromium
100*6777b538SAndroid Build Coastguard Worker
101*6777b538SAndroid Build Coastguard WorkerIn most cases, testing locally with changes to
102*6777b538SAndroid Build Coastguard Worker[third\_party/googletest/src/](https://source.chromium.org/chromium/chromium/src/+/master:third_party/googletest/src/)
103*6777b538SAndroid Build Coastguard Workershould be enough. But how can you make sure the changes to Googletest actually
104*6777b538SAndroid Build Coastguard Workerwork in Chromium? Sometimes it’s not possible to test these changes locally
105*6777b538SAndroid Build Coastguard Worker(different compiler flags, error that only affects a specific OS, etc).
106*6777b538SAndroid Build Coastguard WorkerInsert the pwnall repo:
107*6777b538SAndroid Build Coastguard Worker
108*6777b538SAndroid Build Coastguard Worker* Development: https://github.com/pwnall/googletest
109*6777b538SAndroid Build Coastguard Worker* Chromium mirror: https://chromium.googlesource.com/external/github.com/pwnall/googletest/
110*6777b538SAndroid Build Coastguard Worker
111*6777b538SAndroid Build Coastguard WorkerThe pwnall repo allows you to make speculative changes to Googletest and run
112*6777b538SAndroid Build Coastguard Workerthem against the Chromium trybots. The flow is as follows:
113*6777b538SAndroid Build Coastguard Worker
114*6777b538SAndroid Build Coastguard Worker* Create a local remote to the pwnall repo (alternatively, clone it elsewhere):
115*6777b538SAndroid Build Coastguard Worker```
116*6777b538SAndroid Build Coastguard Workercd third_party/googletest/src
117*6777b538SAndroid Build Coastguard Workergit remote
118*6777b538SAndroid Build Coastguard Workergit remote add up https://github.com/google/googletest.git
119*6777b538SAndroid Build Coastguard Workergit remote add pwnall [email protected]:pwnall/googletest.git
120*6777b538SAndroid Build Coastguard Worker```
121*6777b538SAndroid Build Coastguard Worker* Sync the pwnall repo:
122*6777b538SAndroid Build Coastguard Worker```
123*6777b538SAndroid Build Coastguard Workergit checkout master
124*6777b538SAndroid Build Coastguard Workergit pull up master
125*6777b538SAndroid Build Coastguard Workergit push pwnall master
126*6777b538SAndroid Build Coastguard Worker```
127*6777b538SAndroid Build Coastguard Worker* Make changes on a new branch
128*6777b538SAndroid Build Coastguard Worker* `git push pwnall branch-name`
129*6777b538SAndroid Build Coastguard Worker* Update the `googletest revision` in the
130*6777b538SAndroid Build Coastguard Worker  [DEPS file](https://source.chromium.org/chromium/chromium/src/+/master:DEPS)
131*6777b538SAndroid Build Coastguard Worker  with the commit hash and `/external/github.com/google/googletest.git` to
132*6777b538SAndroid Build Coastguard Worker  `/external/github.com/pwnall/googletest.git`
133*6777b538SAndroid Build Coastguard Worker* Upload the CL to run the change against the Chromium trybots
134*6777b538SAndroid Build Coastguard Worker
135*6777b538SAndroid Build Coastguard Worker### Common Problems
136*6777b538SAndroid Build Coastguard Worker
137*6777b538SAndroid Build Coastguard Worker* Differences in C++ version and clang compiler flags between Chromium and Googletest
138*6777b538SAndroid Build Coastguard Worker  * Chromium is on C++14, though its dependencies,
139*6777b538SAndroid Build Coastguard Worker    which may use Googletest, may be further behind
140*6777b538SAndroid Build Coastguard Worker  * Look for NACL in build errors. You may need to update your GN args with
141*6777b538SAndroid Build Coastguard Worker    `enable_nacl=true` to reproduce these errors locally
142*6777b538SAndroid Build Coastguard Worker* [A Googletest interface is changed](https://github.com/google/googletest/pull/2718/)
143*6777b538SAndroid Build Coastguard Worker  * Rolling past the commit will fail, since Chromium still uses the old interface
144*6777b538SAndroid Build Coastguard Worker  * Roll past the affecting commit and update uses in Chromium [in one CL](https://crrev.com/c/2709263)
145*6777b538SAndroid Build Coastguard Worker* [A Googletest header is removed](https://github.com/google/googletest/commit/df6b75949b1efab7606ba60c0f0a0125ac95c5af)
146*6777b538SAndroid Build Coastguard Worker  * Rolling past the commit will fail, since Chromium still expects the header to exist
147*6777b538SAndroid Build Coastguard Worker  * Roll past the affecting commit and updates uses in Chromium [in one CL](https://crrev.com/c/2713029)
148*6777b538SAndroid Build Coastguard Worker* [A new Googletest feature](https://github.com/google/googletest/commit/ec94d9f24c92a5090fda5567156d6dde99cdbf31)
149*6777b538SAndroid Build Coastguard Worker  requires [updating tests in Chromium](https://crbug.com/1163396#c8)
150*6777b538SAndroid Build Coastguard Worker
151*6777b538SAndroid Build Coastguard Worker### Other Resources
152*6777b538SAndroid Build Coastguard Worker
153*6777b538SAndroid Build Coastguard Worker* [AutoRoller](https://autoroll.skia.org/r/googletest-chromium-autoroll) and
154*6777b538SAndroid Build Coastguard Worker  accompanying [configuration file](https://skia.googlesource.com/skia-autoroll-internal-config.git/+/main/skia-public/googletest-chromium.cfg)
155*6777b538SAndroid Build Coastguard Worker* [Bug tracking substantial roll](https://crbug.com/1163396)
156