blob: 83e4df9eb3d486ea154c0a78d95edd6fc4be706c [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
36builder](https://build.chromium.org/p/chromium.infra.cron/builders/wpt-importer).
qyearsley4f0acca42017-01-30 08:18:4337
38The easiest way to check the status of recent imports is to look at:
39
Quinten Yearsleyfab627a2017-03-29 22:30:1840- Recent logs on Buildbot for [wpt-importer
41 builder](https://build.chromium.org/p/chromium.infra.cron/builders/wpt-importer)
qyearsley4f0acca42017-01-30 08:18:4342- Recent CLs created by
Quinten Yearsley52f29762017-07-12 23:02:2543 [blink-w3c-test-autoroller@chromium.org](https://chromium-review.googlesource.com/q/owner:blink-w3c-test-autoroller%40chromium.org).
qyearsley4f0acca42017-01-30 08:18:4344
Quinten Yearsley95fa3232017-08-18 16:10:5545The import jobs will generally be green if either there was nothing to do,
46or a CL was successfully submitted.
47
48If the importer starts misbehaving, it could be disabled by turning off the
49auto-import mode by landing [this CL](https://crrev.com/c/617479/).
foolipdf2a8632017-02-15 15:03:1650
Quinten Yearsley12a15b72017-06-05 21:51:2351### Failures caused by automatic imports.
52
53If there are new test failures that start after an auto-import,
54there are several possible causes, including:
55
56 1. New baselines for flaky tests were added (http://crbug.com/701234).
57 2. Modified tests should have new results for non-Release builds but they weren't added (http://crbug.com/725160).
58 3. New baselines were added for tests with non-deterministic test results (http://crbug.com/705125).
59
60Because these tests are imported from the Web Platform tests, it is better
61to have them in the repository (and marked failing) than not, so prefer to
Kent Tamura59ffb022018-11-27 05:30:5662[add test expectations](web_test_expectations.md) rather than reverting.
Quinten Yearsley12a15b72017-06-05 21:51:2363However, if a huge number of tests are failing, please revert the CL so we
64can fix it manually.
65
Jeff Carpenterabd13602017-03-29 22:49:5966### Automatic export process
67
Jeff Carpenter4562d242017-07-14 22:10:4368If you upload a CL with any changes in
Kent Tamura59ffb022018-11-27 05:30:5669[third_party/blink/web_tests/external/wpt](../../third_party/blink/web_tests/external/wpt),
Jeff Carpenter4562d242017-07-14 22:10:4370once you add reviewers the exporter will create a provisional pull request with
Philip Jägenstedt3a3d5b82018-05-31 15:25:3571those changes in the [upstream WPT GitHub repository](https://github.com/web-platform-tests/wpt/).
Jeff Carpenterabd13602017-03-29 22:49:5972
Jeff Carpenter4562d242017-07-14 22:10:4373Once you're ready to land your CL, please check the Travis CI status on the
74upstream PR (link at the bottom of the page). If it's green, go ahead and land your CL
75and the exporter will automatically remove the "do not merge yet" label and merge the PR.
76
77If Travis CI is red on the upstream PR, please try to resolve the failures before
78merging. If you run into Travis CI issues, or if you have a CL with WPT changes that
79the exporter did not pick up, please reach out to [email protected].
80
81Additional things to note:
82
83- CLs that change over 1000 files will not be exported.
84- All PRs use the
Philip Jägenstedt3a3d5b82018-05-31 15:25:3585 [`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:4386- All PRs for CLs that haven't yet been landed in Chromium also use the
Philip Jägenstedt3a3d5b82018-05-31 15:25:3587 [`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.
Jeff Carpenter4562d242017-07-14 22:10:4388- The exporter cannot create upstream PRs for in-flight CLs with binary files (e.g. webm files).
89 An export PR will still be made after the CL lands.
90
91For maintainers:
92
93- The exporter runs continuously under the
94 [chromium.infra.cron master](https://build.chromium.org/p/chromium.infra.cron/builders/wpt-exporter).
95- The source lives in
Kent Tamura5e69e912018-05-02 13:05:0096 [third_party/blink/tools/wpt_export.py](../../third_party/blink/tools/wpt_export.py).
Jeff Carpenter4562d242017-07-14 22:10:4397- If the exporter starts misbehaving
98 (for example, creating the same PR over and over again)
99 put it in "dry run" mode by landing [this CL](https://crrev.com/c/462381/).
Jeff Carpenterabd13602017-03-29 22:49:59100
qyearsley4f0acca42017-01-30 08:18:43101### Skipped tests
102
103We control which tests are imported via a file called
Kent Tamura59ffb022018-11-27 05:30:56104[W3CImportExpectations](../../third_party/blink/web_tests/W3CImportExpectations),
qyearsley4f0acca42017-01-30 08:18:43105which has a list of directories to skip while importing.
106
107In addition to the directories and tests explicitly skipped there, tests may
108also be skipped for a couple other reasons, e.g. if the file path is too long
109for Windows. To check what files are skipped in import, check the recent logs
Quinten Yearsleyfab627a2017-03-29 22:30:18110for [wpt-importer
111builder](https://build.chromium.org/p/chromium.infra.cron/builders/wpt-importer).
qyearsley4f0acca42017-01-30 08:18:43112
Raphael Kubo da Costac089b562018-02-26 13:20:09113### GitHub credentials
114
115When manually running the `wpt-import` and `wpt-export` scripts, several
116requests are made to GitHub to query the status of pull requests, look for
117existing exported commits etc. GitHub has a [fairly
118low](https://developer.github.com/v3/#rate-limiting) request limit for
119unauthenticated requests, so it is recommended that you let `wpt-export` and
120`wpt-import` use your GitHub credentials when sending requests:
121
122 1. Generate a new [personal access token](https://github.com/settings/tokens)
Raphael Kubo da Costaac0fd252018-02-26 16:50:29123 1. Set up your credentials by either:
124 * Setting the `GH_USER` environment variable to your GitHub user name
125 and the `GH_TOKEN` environment variable to the access token you have
126 just created **or**
127 * Creating a JSON file with two keys: `GH_USER`, your GitHub user name,
128 and `GH_TOKEN`, the access token you have just generated. After that,
129 pass `--credentials-json <path-to-json>` to `wpt-export` and
130 `wpt-import`.
Raphael Kubo da Costac089b562018-02-26 13:20:09131
qyearsley4f0acca42017-01-30 08:18:43132### Manual import
133
134To pull the latest versions of the tests that are currently being imported, you
135can also directly invoke the
Kent Tamura5e69e912018-05-02 13:05:00136[wpt-import](../../third_party/blink/tools/wpt_import.py) script.
qyearsley4f0acca42017-01-30 08:18:43137
138That script will pull the latest version of the tests from our mirrors of the
139upstream repositories. If any new versions of tests are found, they will be
140committed locally to your local repository. You may then upload the changes.
141
Raphael Kubo da Costac089b562018-02-26 13:20:09142Remember your import might fail due to GitHub's limit for unauthenticated
143requests, so consider [passing your GitHub credentials](#GitHub-credentials) to
144the script.
145
qyearsley9c9781a2017-02-11 00:08:39146### Enabling import for a new directory
147
qyearsley4f0acca42017-01-30 08:18:43148If you wish to add more tests (by un-skipping some of the directories currently
149skipped in `W3CImportExpectations`), you can modify that file locally and commit
qyearsley9c9781a2017-02-11 00:08:39150it, and on the next auto-import, the new tests should be imported.
151
152If you want to import immediately (in order to try the tests out locally, etc)
Raphael Kubo da Costac089b562018-02-26 13:20:09153you can also run `wpt-import`, but this is not required.
154
155Remember your import might fail due to GitHub's limit for unauthenticated
156requests, so consider [passing your GitHub credentials](#GitHub-credentials) to
157the script.
qyearsley4f0acca42017-01-30 08:18:43158
foolipdf2a8632017-02-15 15:03:16159## Writing tests
qyearsley4f0acca42017-01-30 08:18:43160
foolipeda32ab2017-02-16 19:21:58161To contribute changes to web-platform-tests, just commit your changes directly
Kent Tamura59ffb022018-11-27 05:30:56162to [web_tests/external/wpt](../../third_party/blink/web_tests/external/wpt)
qyearsley4f0acca42017-01-30 08:18:43163and the changes will be automatically upstreamed within 24 hours.
164
foolipdf2a8632017-02-15 15:03:16165Changes involving adding, removing or modifying tests can all be upstreamed.
166Any changes outside of
Kent Tamura59ffb022018-11-27 05:30:56167[external/wpt](../../third_party/blink/web_tests/external/wpt) will not be
foolipdf2a8632017-02-15 15:03:16168upstreamed, and any changes `*-expected.txt`, `OWNERS`, and `MANIFEST.json`,
169will also not be upstreamed.
rbyers6299b9132017-02-10 18:06:57170
Kent Tamura59ffb022018-11-27 05:30:56171Running the web tests will automatically regenerate MANIFEST.json to pick up
Jeff Carpentereb1ff6b2017-03-02 23:21:58172any local modifications.
foolip2f198552017-02-24 16:42:35173
foolipdf2a8632017-02-15 15:03:16174Most tests are written using testharness.js, see
Kent Tamura59ffb022018-11-27 05:30:56175[Writing Web Tests](./writing_web_tests.md) and
176[Web Tests Tips](./web_tests_tips.md) for general guidelines.
qyearsley9c9781a2017-02-11 00:08:39177
foolipdf2a8632017-02-15 15:03:16178### Write tests against specifications
179
foolipeda32ab2017-02-16 19:21:58180Tests in web-platform-tests are expected to match behavior defined by the
foolipdf2a8632017-02-15 15:03:16181relevant specification. In other words, all assertions that a test makes
182should be derived from a specification's normative requirements, and not go
183beyond them. It is often necessary to change the specification to clarify what
184is and isn't required.
185
Philip Jägenstedt8bb32fa2018-01-27 14:39:26186When implementation experience is needed to inform the specification work,
Philip Jägenstedt3a3d5b82018-05-31 15:25:35187[tentative tests](https://web-platform-tests.org/writing-tests/file-names.html)
Philip Jägenstedt8bb32fa2018-01-27 14:39:26188can be appropriate. It should be apparent in context why the test is tentative
189and what needs to be resolved to make it non-tentative.
foolipdf2a8632017-02-15 15:03:16190
191### Tests that require testing APIs
192
Philip Jägenstedt3a3d5b82018-05-31 15:25:35193[testdriver.js](https://web-platform-tests.org/writing-tests/testdriver.html)
Philip Jägenstedt8bb32fa2018-01-27 14:39:26194provides a means to automate tests that cannot be written purely using web
195platform APIs, similar to `internals.*` and `eventSender.*` in regular Blink
Kent Tamura59ffb022018-11-27 05:30:56196web tests.
Philip Jägenstedt8bb32fa2018-01-27 14:39:26197
198If no testdriver.js API exists, check if it's a
Philip Jägenstedt3a3d5b82018-05-31 15:25:35199[known issue](https://github.com/web-platform-tests/wpt/labels/testdriver.js)
Philip Jägenstedt8bb32fa2018-01-27 14:39:26200and otherwise consider filing a new issue.
foolipdf2a8632017-02-15 15:03:16201
202An alternative is to write manual tests that are automated with scripts from
Kent Tamura59ffb022018-11-27 05:30:56203[wpt_automation](../../third_party/blink/web_tests/external/wpt_automation).
Quinten Yearsleye577029f2017-07-06 00:21:03204Injection of JS in manual tests is determined by `loadAutomationScript` in
Kent Tamura59ffb022018-11-27 05:30:56205[testharnessreport.js](../../third_party/blink/web_tests/resources/testharnessreport.js).
Quinten Yearsleye577029f2017-07-06 00:21:03206
foolipdf2a8632017-02-15 15:03:16207Such tests still require case-by-case automation to run for other browser
208engines, but are more valuable than purely manual tests.
209
Quinten Yearsleye577029f2017-07-06 00:21:03210Manual tests that have no automation are still imported, but skipped in
Kent Tamura59ffb022018-11-27 05:30:56211[NeverFixTests](../../third_party/blink/web_tests/NeverFixTests); see
Quinten Yearsleye577029f2017-07-06 00:21:03212[issue 738489](https://crbug.com/738489).
213
foolipdf2a8632017-02-15 15:03:16214### Adding new top-level directories
qyearsley9c9781a2017-02-11 00:08:39215
216Entirely new top-level directories should generally be added upstream, since
217that's the only way to add an OWNERS file upstream. After adding a new top-level
218directory upstream, you should add a line for it in `W3CImportExpectations`.
219
foolipdf2a8632017-02-15 15:03:16220Adding the new directory (and `W3CImportExpectations` entry) in Chromium and
221later adding an OWNERS file upstream also works.
222
qyearsley4f0acca42017-01-30 08:18:43223### Will the exported commits be linked to my GitHub profile?
224
225The email you commit with in Chromium will be the author of the commit on
226GitHub. You can [add it as a secondary address on your GitHub
227account](https://help.github.com/articles/adding-an-email-address-to-your-github-account/)
228to link your exported commits to your GitHub profile.
229
Philip Jägenstedtf7e99cf2018-01-22 15:54:29230If you are a Googler, you can also register your GitHub account at go/github,
231making it easier for other Googlers to find you.
232
qyearsley4f0acca42017-01-30 08:18:43233### What if there are conflicts?
234
235This cannot be avoided entirely as the two repositories are independent, but
236should be rare with frequent imports and exports. When it does happen, manual
237intervention will be needed and in non-trivial cases you may be asked to help
238resolve the conflict.
239
240### Direct pull requests
241
foolipeda32ab2017-02-16 19:21:58242It's still possible to make direct pull requests to web-platform-tests, see
Philip Jägenstedt3a3d5b82018-05-31 15:25:35243https://web-platform-tests.org/appendix/github-intro.html.
foolipdf2a8632017-02-15 15:03:16244
Jeff Carpenter11b548b2017-11-03 23:05:22245## Running tests
246
Kent Tamura59ffb022018-11-27 05:30:56247Same as Blink web tests, you can use
248[`run_web_tests.py`](web_tests.md#running-the-tests) to run any WPT test.
Jeff Carpenter11b548b2017-11-03 23:05:22249
250One thing to note is that glob patterns for WPT tests are not yet supported.
251
Xianzhu Wang0a37e9d2019-03-27 21:27:29252See [Running WPT tests in Content Shell](web_tests_in_content_shell.md#Running-WPT-Tests-in-Content-Shell)
253for debugging etc.
254
foolipdf2a8632017-02-15 15:03:16255## Reviewing tests
256
257Anyone who can review code and tests in Chromium can also review changes in
Kent Tamura59ffb022018-11-27 05:30:56258[external/wpt](../../third_party/blink/web_tests/external/wpt)
foolipdf2a8632017-02-15 15:03:16259that will be automatically upstreamed. There will be no additional review in
260web-platform-tests as part of the export process.
261
262If upstream reviewers have feedback on the changes, discuss on the pull request
263created during export, and if necessary work on a new pull request to iterate
264until everyone is satisfied.
265
266When reviewing tests, check that they match the relevant specification, which
267may not fully match the implementation. See also
268[Write tests against specifications](#Write-tests-against-specifications).