Name: Google Test: Google's C++ Testing Framework
Short Name: googletest
URL: https://github.com/google/googletest.git
Version: unknown
License: BSD
License File: NOT_SHIPPED
Security critical: no

Google Test is imported as-is, to facilitate version bumping. However, the
file/directory layout of Google Test is not yet considered stable. Therefore,
until Google Test's layout stabilizes, Chromium code MUST NOT depend on it
directly. Instead, Chromium code MUST:

* #include the headers in testing/gtest and testing/gmock
* use //testing/gtest(:gtest_main) and //testing/gmock(:gmock_main) in BUILD.gn
  deps

This will allow us to adapt to Google Test changes with minimal disruption.


## Resources for Rolling Googletest in Chrome

### What is Googletest

Googletest is an open source C++ testing framework developed by Google and used
by Chromium. See the [User Guide](https://google.github.io/googletest/).

### Where is Googletest

Googletest is developed in google3 and uses
[copybara](https://github.com/google/copybara) to sync with the public GitHub
repository.

* Development (Googler only): [google3/third\_party/googletest](http://google3/third_party/googletest/)
* GitHub: https://github.com/google/googletest
* Chromium mirror: https://chromium.googlesource.com/external/github.com/google/googletest/
* Locally, [third\_party/googletest/src/](https://source.chromium.org/chromium/chromium/src/+/master:third_party/googletest/src/)
  is a copy of Googletest which is updated via `gclient sync` according to the
  `googletest revision` commit hash in the
  [DEPS file](https://source.chromium.org/chromium/chromium/src/+/master:DEPS;l=244?q=DEPS%20googletest)

### Unblocking Googletest Rolls

1. Roll Googletest to include the breaking change
* Find the hash (on GitHub) of the offending commit
  * If the change came from google3, the CL number can be found in the
    `PiperOrigin-RevId` footer of Copybara commits
* On a fresh checkout, pull in the relevant change. Either:
  * Sync using the DEPS file
```
roll-dep --roll-to=commitish src/third_party/googletest/src/
gclient sync
```
  * Check out the commit directly
```
cd third_party/googletest/src
git remote add up https://github.com/google/googletest.git
git checkout commitish
```

2. Observe errors
* Ideally, this can be done by building locally.
  If the build is successful, this means the change does not affect your OS or
  your compiler flags differ from the trybots
* Upload a CL with the added trybots from
  [Testing Changes to Chromium in Chromium](#testing-changes-to-chromium-in-chromium)

3. Make changes
* To Chromium: create a CL including both the roll and other changes
* To Googletest:
  * Make changes to [third\_party/googletest/src/](https://source.chromium.org/chromium/chromium/src/+/master:third_party/googletest/src/)
    and try building locally. If the fix is successful and you’re confident
    this change will work across all the trybots, create a PR on GitHub or a
    CL to google3 (Googler only) of the changes you made locally to
    [third\_party/googletest/src/](https://source.chromium.org/chromium/chromium/src/+/master:third_party/googletest/src/).
    See [Testing Changes to Googletest in Googletest](#testing-changes-to-googletest-in-googletest)
  * What if I need to make a change to Googletest, but I’m not confident it
    will work with Chromium? Maybe it has to do with a tricky compiler error
    that only affects a specific OS. See
    [Testing Changes to Googletest in Chromium](#testing-changes-to-googletest-in-chromium)
  * Once your Googletest change lands, create a roll which includes both the
    offending commit and your change

### Testing Changes to Chromium in Chromium

Most changes should only require testing via the trybots,
with the following added:

`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`

### Testing Changes to Googletest in Googletest

External: Upload a PR with your proposed changes to GitHub.
This will trigger automated testing.

Googlers: See the [Googletest Developer’s Guide](http://go/gunitdev).

### Testing Changes to Googletest in Chromium

In most cases, testing locally with changes to
[third\_party/googletest/src/](https://source.chromium.org/chromium/chromium/src/+/master:third_party/googletest/src/)
should be enough. But how can you make sure the changes to Googletest actually
work in Chromium? Sometimes it’s not possible to test these changes locally
(different compiler flags, error that only affects a specific OS, etc).
Insert the pwnall repo:

* Development: https://github.com/pwnall/googletest
* Chromium mirror: https://chromium.googlesource.com/external/github.com/pwnall/googletest/

The pwnall repo allows you to make speculative changes to Googletest and run
them against the Chromium trybots. The flow is as follows:

* Create a local remote to the pwnall repo (alternatively, clone it elsewhere):
```
cd third_party/googletest/src
git remote
git remote add up https://github.com/google/googletest.git
git remote add pwnall git@github.com:pwnall/googletest.git
```
* Sync the pwnall repo:
```
git checkout master
git pull up master
git push pwnall master
```
* Make changes on a new branch
* `git push pwnall branch-name`
* Update the `googletest revision` in the
  [DEPS file](https://source.chromium.org/chromium/chromium/src/+/master:DEPS)
  with the commit hash and `/external/github.com/google/googletest.git` to
  `/external/github.com/pwnall/googletest.git`
* Upload the CL to run the change against the Chromium trybots

### Common Problems

* Differences in C++ version and clang compiler flags between Chromium and Googletest
  * Chromium is on C++14, though its dependencies,
    which may use Googletest, may be further behind
  * Look for NACL in build errors. You may need to update your GN args with
    `enable_nacl=true` to reproduce these errors locally
* [A Googletest interface is changed](https://github.com/google/googletest/pull/2718/)
  * Rolling past the commit will fail, since Chromium still uses the old interface
  * Roll past the affecting commit and update uses in Chromium [in one CL](https://crrev.com/c/2709263)
* [A Googletest header is removed](https://github.com/google/googletest/commit/df6b75949b1efab7606ba60c0f0a0125ac95c5af)
  * Rolling past the commit will fail, since Chromium still expects the header to exist
  * Roll past the affecting commit and updates uses in Chromium [in one CL](https://crrev.com/c/2713029)
* [A new Googletest feature](https://github.com/google/googletest/commit/ec94d9f24c92a5090fda5567156d6dde99cdbf31)
  requires [updating tests in Chromium](https://crbug.com/1163396#c8)

### Other Resources

* [AutoRoller](https://autoroll.skia.org/r/googletest-chromium-autoroll) and
  accompanying [configuration file](https://skia.googlesource.com/skia-autoroll-internal-config.git/+/main/skia-public/googletest-chromium.cfg)
* [Bug tracking substantial roll](https://crbug.com/1163396)
