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