123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- 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)
|