blob: dff9324b56391342dea14193331a36cb6b9f870e [file] [log] [blame] [view]
foolipeda32ab2017-02-16 19:21:581# web-platform-tests
qyearsley4f0acca42017-01-30 08:18:432
rbyers6299b9132017-02-10 18:06:573Interoperability between browsers is
qyearsley9c9781a2017-02-11 00:08:394[critical](https://www.chromium.org/blink/platform-predictability) to Chromium's
5mission of improving the web. We believe that leveraging and contributing to a
6shared test suite is one of the most important tools in achieving
7interoperability between browsers. The [web-platform-tests
Philip Jägenstedt3a3d5b82018-05-31 15:25:358repository](https://github.com/web-platform-tests/wpt) is the primary shared
Quinten Yearsleyfab627a2017-03-29 22:30:189test suite where all browser engines are collaborating.
qyearsley4f0acca42017-01-30 08:18:4310
Jeff Carpenterabd13602017-03-29 22:49:5911Chromium has a 2-way import/export process with the upstream web-platform-tests
foolipdf2a8632017-02-15 15:03:1612repository, where tests are imported into
Kent Tamura59ffb022018-11-27 05:30:5613[web_tests/external/wpt](../../third_party/blink/web_tests/external/wpt)
foolipdf2a8632017-02-15 15:03:1614and any changes to the imported tests are also exported to web-platform-tests.
15
Philip Jägenstedt3a3d5b82018-05-31 15:25:3516See https://web-platform-tests.org/ for general documentation on
foolipeda32ab2017-02-16 19:21:5817web-platform-tests, including tips for writing and reviewing tests.
18
qyearsley4f0acca42017-01-30 08:18:4319[TOC]
20
foolipdf2a8632017-02-15 15:03:1621## Importing tests
qyearsley4f0acca42017-01-30 08:18:4322
Jeff Carpenterd66c6892017-11-03 00:13:5323Chromium has a [mirror](https://chromium.googlesource.com/external/w3c/web-platform-tests/)
24of the GitHub repo and periodically imports a subset of the tests to
Kent Tamura59ffb022018-11-27 05:30:5625run as part of the regular Blink web test testing process.
qyearsley4f0acca42017-01-30 08:18:4326
raphael.kubo.da.costa21ed71a2017-04-12 10:50:4427The goals of this process are to be able to run web-platform-tests unmodified
qyearsley4f0acca42017-01-30 08:18:4328locally just as easily as we can run the Blink tests, and ensure that we are
foolipeda32ab2017-02-16 19:21:5829tracking tip-of-tree in the web-platform-tests repository as closely as
qyearsley4f0acca42017-01-30 08:18:4330possible, and running as many of the tests as possible.
31
32### Automatic import process
33
foolipeda32ab2017-02-16 19:21:5834There is an automatic process for updating the Chromium copy of
Quinten Yearsleyfab627a2017-03-29 22:30:1835web-platform-tests. The import is done by the builder [wpt-importer
Robert Mac31beae2019-04-30 14:46:4636builder][wpt-importer].
qyearsley4f0acca42017-01-30 08:18:4337
38The easiest way to check the status of recent imports is to look at:
39
Robert Mac31beae2019-04-30 14:46:4640- Recent logs on LUCI for [wpt-importer builder][wpt-importer]
41- Recent CLs created by [WPT
42 Autoroller](https://chromium-review.googlesource.com/q/owner:wpt-autoroller%2540chops-service-accounts.iam.gserviceaccount.com).
qyearsley4f0acca42017-01-30 08:18:4343
Quinten Yearsley95fa3232017-08-18 16:10:5544The import jobs will generally be green if either there was nothing to do,
45or a CL was successfully submitted.
46
Robert Mac31beae2019-04-30 14:46:4647For maintainers:
48
49- The source lives in
50 [third_party/blink/tools/wpt_import.py](../../third_party/blink/tools/wpt_import.py).
51- If the importer starts misbehaving, it could be disabled by turning off the
52 auto-import mode by landing [this CL](https://crrev.com/c/617479/).
foolipdf2a8632017-02-15 15:03:1653
Quinten Yearsley12a15b72017-06-05 21:51:2354### Failures caused by automatic imports.
55
56If there are new test failures that start after an auto-import,
57there are several possible causes, including:
58
59 1. New baselines for flaky tests were added (http://crbug.com/701234).
60 2. Modified tests should have new results for non-Release builds but they weren't added (http://crbug.com/725160).
61 3. New baselines were added for tests with non-deterministic test results (http://crbug.com/705125).
62
63Because these tests are imported from the Web Platform tests, it is better
64to have them in the repository (and marked failing) than not, so prefer to
Kent Tamura59ffb022018-11-27 05:30:5665[add test expectations](web_test_expectations.md) rather than reverting.
Quinten Yearsley12a15b72017-06-05 21:51:2366However, if a huge number of tests are failing, please revert the CL so we
67can fix it manually.
68
Robert Mac31beae2019-04-30 14:46:4669[wpt-importer]: https://ci.chromium.org/p/infra/builders/luci.infra.cron/wpt-importer
70
Jeff Carpenterabd13602017-03-29 22:49:5971### Automatic export process
72
Jeff Carpenter4562d242017-07-14 22:10:4373If you upload a CL with any changes in
Kent Tamura59ffb022018-11-27 05:30:5674[third_party/blink/web_tests/external/wpt](../../third_party/blink/web_tests/external/wpt),
Jeff Carpenter4562d242017-07-14 22:10:4375once you add reviewers the exporter will create a provisional pull request with
Philip Jägenstedt3a3d5b82018-05-31 15:25:3576those changes in the [upstream WPT GitHub repository](https://github.com/web-platform-tests/wpt/).
Robert Mac31beae2019-04-30 14:46:4677The exporter runs on [wpt-exporter builder][wpt-exporter].
Jeff Carpenterabd13602017-03-29 22:49:5978
Robert Mac31beae2019-04-30 14:46:4679Once you're ready to land your CL, please follow the link posted by the bot and
80check the status of the required checks of the GitHub PR. If it's green, go
81ahead landing your CL and the exporter will automatically merge the PR.
Jeff Carpenter4562d242017-07-14 22:10:4382
Robert Mac31beae2019-04-30 14:46:4683If GitHub status is red on the PR, please try to resolve the failures before
84merging. If you run into any issues, or if you have a CL with WPT changes that
Jeff Carpenter4562d242017-07-14 22:10:4385the exporter did not pick up, please reach out to [email protected].
86
87Additional things to note:
88
89- CLs that change over 1000 files will not be exported.
90- All PRs use the
Philip Jägenstedt3a3d5b82018-05-31 15:25:3591 [`chromium-export`](https://github.com/web-platform-tests/wpt/pulls?utf8=%E2%9C%93&q=is%3Apr%20label%3Achromium-export) label.
Jeff Carpenter4562d242017-07-14 22:10:4392- All PRs for CLs that haven't yet been landed in Chromium also use the
Philip Jägenstedt3a3d5b82018-05-31 15:25:3593 [`do not merge yet`](https://github.com/web-platform-tests/wpt/pulls?q=is%3Apr+is%3Aopen+label%3A%22do+not+merge+yet%22) label.
Robert Mac31beae2019-04-30 14:46:4694- The exporter cannot create upstream PRs for in-flight CLs with binary files
95 (e.g. webm files). An export PR will still be made after the CL lands.
Jeff Carpenter4562d242017-07-14 22:10:4396
97For maintainers:
98
Jeff Carpenter4562d242017-07-14 22:10:4399- The source lives in
Kent Tamura5e69e912018-05-02 13:05:00100 [third_party/blink/tools/wpt_export.py](../../third_party/blink/tools/wpt_export.py).
Robert Mac31beae2019-04-30 14:46:46101- If the exporter starts misbehaving (for example, creating the same PR over
102 and over again), put it in "dry run" mode by landing [this CL](https://crrev.com/c/462381/).
Jeff Carpenterabd13602017-03-29 22:49:59103
Robert Mac31beae2019-04-30 14:46:46104[wpt-exporter]: https://ci.chromium.org/p/infra/builders/luci.infra.cron/wpt-exporter
qyearsley4f0acca42017-01-30 08:18:43105
Raphael Kubo da Costac089b562018-02-26 13:20:09106### GitHub credentials
107
108When manually running the `wpt-import` and `wpt-export` scripts, several
109requests are made to GitHub to query the status of pull requests, look for
110existing exported commits etc. GitHub has a [fairly
111low](https://developer.github.com/v3/#rate-limiting) request limit for
112unauthenticated requests, so it is recommended that you let `wpt-export` and
113`wpt-import` use your GitHub credentials when sending requests:
114
115 1. Generate a new [personal access token](https://github.com/settings/tokens)
Raphael Kubo da Costaac0fd252018-02-26 16:50:29116 1. Set up your credentials by either:
117 * Setting the `GH_USER` environment variable to your GitHub user name
118 and the `GH_TOKEN` environment variable to the access token you have
119 just created **or**
120 * Creating a JSON file with two keys: `GH_USER`, your GitHub user name,
121 and `GH_TOKEN`, the access token you have just generated. After that,
122 pass `--credentials-json <path-to-json>` to `wpt-export` and
123 `wpt-import`.
Raphael Kubo da Costac089b562018-02-26 13:20:09124
qyearsley4f0acca42017-01-30 08:18:43125### Manual import
126
127To pull the latest versions of the tests that are currently being imported, you
128can also directly invoke the
Kent Tamura5e69e912018-05-02 13:05:00129[wpt-import](../../third_party/blink/tools/wpt_import.py) script.
qyearsley4f0acca42017-01-30 08:18:43130
131That script will pull the latest version of the tests from our mirrors of the
132upstream repositories. If any new versions of tests are found, they will be
133committed locally to your local repository. You may then upload the changes.
134
Raphael Kubo da Costac089b562018-02-26 13:20:09135Remember your import might fail due to GitHub's limit for unauthenticated
136requests, so consider [passing your GitHub credentials](#GitHub-credentials) to
137the script.
138
Robert Mac31beae2019-04-30 14:46:46139### Skipped tests
140
141We control which tests are imported via a file called
142[W3CImportExpectations](../../third_party/blink/web_tests/W3CImportExpectations),
143which has a list of directories to skip while importing.
144
145In addition to the directories and tests explicitly skipped there, tests may
146also be skipped for a couple other reasons, e.g. if the file path is too long
147for Windows. To check what files are skipped in import, check the recent logs
148for [wpt-importer builder][wpt-importer].
149
qyearsley9c9781a2017-02-11 00:08:39150### Enabling import for a new directory
151
qyearsley4f0acca42017-01-30 08:18:43152If you wish to add more tests (by un-skipping some of the directories currently
153skipped in `W3CImportExpectations`), you can modify that file locally and commit
qyearsley9c9781a2017-02-11 00:08:39154it, and on the next auto-import, the new tests should be imported.
155
156If you want to import immediately (in order to try the tests out locally, etc)
Raphael Kubo da Costac089b562018-02-26 13:20:09157you can also run `wpt-import`, but this is not required.
158
159Remember your import might fail due to GitHub's limit for unauthenticated
160requests, so consider [passing your GitHub credentials](#GitHub-credentials) to
161the script.
qyearsley4f0acca42017-01-30 08:18:43162
foolipdf2a8632017-02-15 15:03:16163## Writing tests
qyearsley4f0acca42017-01-30 08:18:43164
foolipeda32ab2017-02-16 19:21:58165To contribute changes to web-platform-tests, just commit your changes directly
Kent Tamura59ffb022018-11-27 05:30:56166to [web_tests/external/wpt](../../third_party/blink/web_tests/external/wpt)
qyearsley4f0acca42017-01-30 08:18:43167and the changes will be automatically upstreamed within 24 hours.
168
foolipdf2a8632017-02-15 15:03:16169Changes involving adding, removing or modifying tests can all be upstreamed.
170Any changes outside of
Kent Tamura59ffb022018-11-27 05:30:56171[external/wpt](../../third_party/blink/web_tests/external/wpt) will not be
foolipdf2a8632017-02-15 15:03:16172upstreamed, and any changes `*-expected.txt`, `OWNERS`, and `MANIFEST.json`,
173will also not be upstreamed.
rbyers6299b9132017-02-10 18:06:57174
Kent Tamura59ffb022018-11-27 05:30:56175Running the web tests will automatically regenerate MANIFEST.json to pick up
Jeff Carpentereb1ff6b2017-03-02 23:21:58176any local modifications.
foolip2f198552017-02-24 16:42:35177
foolipdf2a8632017-02-15 15:03:16178Most tests are written using testharness.js, see
Kent Tamura59ffb022018-11-27 05:30:56179[Writing Web Tests](./writing_web_tests.md) and
180[Web Tests Tips](./web_tests_tips.md) for general guidelines.
qyearsley9c9781a2017-02-11 00:08:39181
foolipdf2a8632017-02-15 15:03:16182### Write tests against specifications
183
foolipeda32ab2017-02-16 19:21:58184Tests in web-platform-tests are expected to match behavior defined by the
foolipdf2a8632017-02-15 15:03:16185relevant specification. In other words, all assertions that a test makes
186should be derived from a specification's normative requirements, and not go
187beyond them. It is often necessary to change the specification to clarify what
188is and isn't required.
189
Philip Jägenstedt8bb32fa2018-01-27 14:39:26190When implementation experience is needed to inform the specification work,
Philip Jägenstedt3a3d5b82018-05-31 15:25:35191[tentative tests](https://web-platform-tests.org/writing-tests/file-names.html)
Philip Jägenstedt8bb32fa2018-01-27 14:39:26192can be appropriate. It should be apparent in context why the test is tentative
193and what needs to be resolved to make it non-tentative.
foolipdf2a8632017-02-15 15:03:16194
195### Tests that require testing APIs
196
Philip Jägenstedt3a3d5b82018-05-31 15:25:35197[testdriver.js](https://web-platform-tests.org/writing-tests/testdriver.html)
Philip Jägenstedt8bb32fa2018-01-27 14:39:26198provides a means to automate tests that cannot be written purely using web
199platform APIs, similar to `internals.*` and `eventSender.*` in regular Blink
Kent Tamura59ffb022018-11-27 05:30:56200web tests.
Philip Jägenstedt8bb32fa2018-01-27 14:39:26201
202If no testdriver.js API exists, check if it's a
Philip Jägenstedt3a3d5b82018-05-31 15:25:35203[known issue](https://github.com/web-platform-tests/wpt/labels/testdriver.js)
Philip Jägenstedt8bb32fa2018-01-27 14:39:26204and otherwise consider filing a new issue.
foolipdf2a8632017-02-15 15:03:16205
206An alternative is to write manual tests that are automated with scripts from
Kent Tamura59ffb022018-11-27 05:30:56207[wpt_automation](../../third_party/blink/web_tests/external/wpt_automation).
Quinten Yearsleye577029f2017-07-06 00:21:03208Injection of JS in manual tests is determined by `loadAutomationScript` in
Kent Tamura59ffb022018-11-27 05:30:56209[testharnessreport.js](../../third_party/blink/web_tests/resources/testharnessreport.js).
Quinten Yearsleye577029f2017-07-06 00:21:03210
foolipdf2a8632017-02-15 15:03:16211Such tests still require case-by-case automation to run for other browser
212engines, but are more valuable than purely manual tests.
213
Quinten Yearsleye577029f2017-07-06 00:21:03214Manual tests that have no automation are still imported, but skipped in
Kent Tamura59ffb022018-11-27 05:30:56215[NeverFixTests](../../third_party/blink/web_tests/NeverFixTests); see
Quinten Yearsleye577029f2017-07-06 00:21:03216[issue 738489](https://crbug.com/738489).
217
foolipdf2a8632017-02-15 15:03:16218### Adding new top-level directories
qyearsley9c9781a2017-02-11 00:08:39219
220Entirely new top-level directories should generally be added upstream, since
221that's the only way to add an OWNERS file upstream. After adding a new top-level
222directory upstream, you should add a line for it in `W3CImportExpectations`.
223
foolipdf2a8632017-02-15 15:03:16224Adding the new directory (and `W3CImportExpectations` entry) in Chromium and
225later adding an OWNERS file upstream also works.
226
qyearsley4f0acca42017-01-30 08:18:43227### Will the exported commits be linked to my GitHub profile?
228
229The email you commit with in Chromium will be the author of the commit on
230GitHub. You can [add it as a secondary address on your GitHub
231account](https://help.github.com/articles/adding-an-email-address-to-your-github-account/)
232to link your exported commits to your GitHub profile.
233
Philip Jägenstedtf7e99cf2018-01-22 15:54:29234If you are a Googler, you can also register your GitHub account at go/github,
235making it easier for other Googlers to find you.
236
qyearsley4f0acca42017-01-30 08:18:43237### What if there are conflicts?
238
239This cannot be avoided entirely as the two repositories are independent, but
240should be rare with frequent imports and exports. When it does happen, manual
241intervention will be needed and in non-trivial cases you may be asked to help
242resolve the conflict.
243
244### Direct pull requests
245
foolipeda32ab2017-02-16 19:21:58246It's still possible to make direct pull requests to web-platform-tests, see
Philip Jägenstedt3a3d5b82018-05-31 15:25:35247https://web-platform-tests.org/appendix/github-intro.html.
foolipdf2a8632017-02-15 15:03:16248
Jeff Carpenter11b548b2017-11-03 23:05:22249## Running tests
250
Kent Tamura59ffb022018-11-27 05:30:56251Same as Blink web tests, you can use
252[`run_web_tests.py`](web_tests.md#running-the-tests) to run any WPT test.
Jeff Carpenter11b548b2017-11-03 23:05:22253
254One thing to note is that glob patterns for WPT tests are not yet supported.
255
Xianzhu Wang0a37e9d2019-03-27 21:27:29256See [Running WPT tests in Content Shell](web_tests_in_content_shell.md#Running-WPT-Tests-in-Content-Shell)
257for debugging etc.
258
foolipdf2a8632017-02-15 15:03:16259## Reviewing tests
260
261Anyone who can review code and tests in Chromium can also review changes in
Kent Tamura59ffb022018-11-27 05:30:56262[external/wpt](../../third_party/blink/web_tests/external/wpt)
foolipdf2a8632017-02-15 15:03:16263that will be automatically upstreamed. There will be no additional review in
264web-platform-tests as part of the export process.
265
266If upstream reviewers have feedback on the changes, discuss on the pull request
267created during export, and if necessary work on a new pull request to iterate
268until everyone is satisfied.
269
270When reviewing tests, check that they match the relevant specification, which
271may not fully match the implementation. See also
272[Write tests against specifications](#Write-tests-against-specifications).