blob: 1d5b06d9b93a3195c750d93059574c1f9681d07b [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## Writing tests
qyearsley4f0acca42017-01-30 08:18:4322
foolipeda32ab2017-02-16 19:21:5823To contribute changes to web-platform-tests, just commit your changes directly
Kent Tamura59ffb022018-11-27 05:30:5624to [web_tests/external/wpt](../../third_party/blink/web_tests/external/wpt)
qyearsley4f0acca42017-01-30 08:18:4325and the changes will be automatically upstreamed within 24 hours.
26
foolipdf2a8632017-02-15 15:03:1627Changes involving adding, removing or modifying tests can all be upstreamed.
28Any changes outside of
Kent Tamura59ffb022018-11-27 05:30:5629[external/wpt](../../third_party/blink/web_tests/external/wpt) will not be
foolipdf2a8632017-02-15 15:03:1630upstreamed, and any changes `*-expected.txt`, `OWNERS`, and `MANIFEST.json`,
31will also not be upstreamed.
rbyers6299b9132017-02-10 18:06:5732
Kent Tamura59ffb022018-11-27 05:30:5633Running the web tests will automatically regenerate MANIFEST.json to pick up
Jeff Carpentereb1ff6b2017-03-02 23:21:5834any local modifications.
foolip2f198552017-02-24 16:42:3535
foolipdf2a8632017-02-15 15:03:1636Most tests are written using testharness.js, see
Kent Tamura59ffb022018-11-27 05:30:5637[Writing Web Tests](./writing_web_tests.md) and
38[Web Tests Tips](./web_tests_tips.md) for general guidelines.
qyearsley9c9781a2017-02-11 00:08:3939
foolipdf2a8632017-02-15 15:03:1640### Write tests against specifications
41
foolipeda32ab2017-02-16 19:21:5842Tests in web-platform-tests are expected to match behavior defined by the
foolipdf2a8632017-02-15 15:03:1643relevant specification. In other words, all assertions that a test makes
44should be derived from a specification's normative requirements, and not go
45beyond them. It is often necessary to change the specification to clarify what
46is and isn't required.
47
Philip Jägenstedt8bb32fa2018-01-27 14:39:2648When implementation experience is needed to inform the specification work,
Philip Jägenstedt3a3d5b82018-05-31 15:25:3549[tentative tests](https://web-platform-tests.org/writing-tests/file-names.html)
Philip Jägenstedt8bb32fa2018-01-27 14:39:2650can be appropriate. It should be apparent in context why the test is tentative
51and what needs to be resolved to make it non-tentative.
foolipdf2a8632017-02-15 15:03:1652
53### Tests that require testing APIs
54
Robert Ma4f6eff12020-08-18 22:44:4555#### `testdriver.js`
56
Philip Jägenstedt3a3d5b82018-05-31 15:25:3557[testdriver.js](https://web-platform-tests.org/writing-tests/testdriver.html)
Philip Jägenstedt8bb32fa2018-01-27 14:39:2658provides a means to automate tests that cannot be written purely using web
59platform APIs, similar to `internals.*` and `eventSender.*` in regular Blink
Kent Tamura59ffb022018-11-27 05:30:5660web tests.
Philip Jägenstedt8bb32fa2018-01-27 14:39:2661
62If no testdriver.js API exists, check if it's a
Philip Jägenstedt3a3d5b82018-05-31 15:25:3563[known issue](https://github.com/web-platform-tests/wpt/labels/testdriver.js)
Luke Zielinski64ff9492019-05-30 17:42:2964and otherwise consider filing a new issue. For instructions on how to add a new
65testing API, see [WPT Test Automation for
66Chromium](https://docs.google.com/document/d/18BpD41vyX1cFZ77CE0a_DJYlGpdvyLlx3pwXVRxUzvI/preview#)
foolipdf2a8632017-02-15 15:03:1667
Robert Ma4f6eff12020-08-18 22:44:4568#### MojoJS
69
70Some specs may define testing APIs (e.g.
71[WebUSB](https://wicg.github.io/webusb/test/)), which may be polyfilled with
72internal API like [MojoJS](../../mojo/public/js/README.md). MojoJS is only
73allowed in WPT for this purpose. Please reach out to
Raphael Kubo da Costafec70fa2023-03-02 18:36:4474[email protected] before following the process below for adding a new
Robert Ma4f6eff12020-08-18 22:44:4575test-only API:
76
Ken Rockot6355f092021-02-02 19:42:5877 1. Create a full list of `*.mojom.m.js` files that you need, including all
78 dependencies. Generated modules load dependencies recursively by default,
Robert Ma4f6eff12020-08-18 22:44:4579 so you can check the network panel of DevTools to see the full list of
80 dependencies it loads.
Raphael Kubo da Costafec70fa2023-03-02 18:36:4481 2. Check [linux-archive-rel.json](../../infra/archive_config/linux-archive-rel.json) and add any
Ken Rockot6355f092021-02-02 19:42:5882 missing `*.mojom.m.js` files to the `mojojs.zip` archive. Globs are
83 supported in `filename`. Do not copy Mojom bindings into WPT.
Robert Ma4f6eff12020-08-18 22:44:4584 3. Meanwhile in Chromium, you can create a helper for your WPT tests to do
85 browser-specific setup using
86 [test-only-api.js](../../third_party/blink/web_tests/external/wpt/resources/test-only-api.js).
87 See
88 [webxr_util.js](../../third_party/blink/web_tests/external/wpt/webxr/resources/webxr_util.js)
89 as an example. You can write tests using this helper right away, but they
90 will not work upstream (i.e. on https://wpt.fyi ) until your change in step
91 2 is included in official channels, as `mojojs.zip` is built alongside with
92 Chrome.
93
94#### `wpt_automation`
95
96An alternative to the above options is to write manual tests that are automated
97with scripts from
Kent Tamura59ffb022018-11-27 05:30:5698[wpt_automation](../../third_party/blink/web_tests/external/wpt_automation).
Quinten Yearsleye577029f2017-07-06 00:21:0399Injection of JS in manual tests is determined by `loadAutomationScript` in
Kent Tamura59ffb022018-11-27 05:30:56100[testharnessreport.js](../../third_party/blink/web_tests/resources/testharnessreport.js).
Quinten Yearsleye577029f2017-07-06 00:21:03101
foolipdf2a8632017-02-15 15:03:16102Such tests still require case-by-case automation to run for other browser
103engines, but are more valuable than purely manual tests.
104
Quinten Yearsleye577029f2017-07-06 00:21:03105Manual tests that have no automation are still imported, but skipped in
Kent Tamura59ffb022018-11-27 05:30:56106[NeverFixTests](../../third_party/blink/web_tests/NeverFixTests); see
Quinten Yearsleye577029f2017-07-06 00:21:03107[issue 738489](https://crbug.com/738489).
108
Robert Ma4f6eff12020-08-18 22:44:45109### Contribution process
110
111Changes made in
112[web_tests/external/wpt](../../third_party/blink/web_tests/external/wpt) are
113[automatically exported to GitHub](#exporting-tests).
114
115It's still possible to make direct pull requests to web-platform-tests, see
116https://web-platform-tests.org/writing-tests/github-intro.html.
117
foolipdf2a8632017-02-15 15:03:16118### Adding new top-level directories
qyearsley9c9781a2017-02-11 00:08:39119
120Entirely new top-level directories should generally be added upstream, since
121that's the only way to add an OWNERS file upstream. After adding a new top-level
122directory upstream, you should add a line for it in `W3CImportExpectations`.
123
foolipdf2a8632017-02-15 15:03:16124Adding the new directory (and `W3CImportExpectations` entry) in Chromium and
125later adding an OWNERS file upstream also works.
126
Robert Ma4f6eff12020-08-18 22:44:45127### `wpt_internal`
Stephen McGruera12b34f82020-07-10 16:00:42128
129It is sometimes desirable to write WPT tests that either test Chromium-specific
130behaviors, or that cannot yet be upstreamed to WPT (e.g. because the spec is
131very nascent). For these cases, we maintain a separate directory,
Chris Mumfordbbe6b8e2021-09-09 21:06:18132[wpt_internal](../../third_party/blink/web_tests/wpt_internal) that runs under the
Stephen McGruera12b34f82020-07-10 16:00:42133WPT testing infrastructure (e.g. uses wptserve, etc), but which is not
134upstreamed to WPT.
135
136Please see the `wpt_internal`
sisidovski805efc22021-09-10 23:40:44137[README](../../third_party/blink/web_tests/wpt_internal/README.md) for more details.
Stephen McGruera12b34f82020-07-10 16:00:42138
139**Note**: A significant downside of `wpt_internal` is that your tests may be
140broken by upstream changes to the resources scripts (e.g. `testharness.js`), as
141`wpt_internal` does not use the forked version of `testharness.js` used by all
Robert Maa23460e72020-12-20 12:39:27142other non-`external/wpt` tests. Use of [new failure
143notifications](#new-failure-notifications) is recommended to ensure you are
144notified of breakages.
foolipdf2a8632017-02-15 15:03:16145
Jeff Carpenter11b548b2017-11-03 23:05:22146## Running tests
147
Kent Tamura59ffb022018-11-27 05:30:56148Same as Blink web tests, you can use
149[`run_web_tests.py`](web_tests.md#running-the-tests) to run any WPT test.
Jeff Carpenter11b548b2017-11-03 23:05:22150
Jonathan Lee1124233e2023-07-24 18:20:41151*** promo
152Consider running WPTs with [`wptrunner`](web_platform_tests_wptrunner.md), the
153harness developed by the WPT project that Chromium now supports.
154***
155
Jeff Carpenter11b548b2017-11-03 23:05:22156One thing to note is that glob patterns for WPT tests are not yet supported.
157
Xianzhu Wang0a37e9d2019-03-27 21:27:29158See [Running WPT tests in Content Shell](web_tests_in_content_shell.md#Running-WPT-Tests-in-Content-Shell)
159for debugging etc.
160
foolipdf2a8632017-02-15 15:03:16161## Reviewing tests
162
163Anyone who can review code and tests in Chromium can also review changes in
Kent Tamura59ffb022018-11-27 05:30:56164[external/wpt](../../third_party/blink/web_tests/external/wpt)
foolipdf2a8632017-02-15 15:03:16165that will be automatically upstreamed. There will be no additional review in
166web-platform-tests as part of the export process.
167
168If upstream reviewers have feedback on the changes, discuss on the pull request
169created during export, and if necessary work on a new pull request to iterate
170until everyone is satisfied.
171
172When reviewing tests, check that they match the relevant specification, which
173may not fully match the implementation. See also
174[Write tests against specifications](#Write-tests-against-specifications).
Stephen McGruera12b34f82020-07-10 16:00:42175
176## Importing tests
177
178Chromium has a [mirror](https://chromium.googlesource.com/external/w3c/web-platform-tests/)
179of the GitHub repo and periodically imports a subset of the tests to
180run as part of the regular Blink web test testing process.
181
182The goals of this process are to be able to run web-platform-tests unmodified
183locally just as easily as we can run the Blink tests, and ensure that we are
184tracking tip-of-tree in the web-platform-tests repository as closely as
185possible, and running as many of the tests as possible.
186
187### Automatic import process
188
189There is an automatic process for updating the Chromium copy of
190web-platform-tests. The import is done by the builder [wpt-importer
191builder][wpt-importer].
192
193The easiest way to check the status of recent imports is to look at:
194
195- Recent logs on LUCI for [wpt-importer builder][wpt-importer]
196- Recent CLs created by [WPT
197 Autoroller](https://chromium-review.googlesource.com/q/owner:wpt-autoroller%2540chops-service-accounts.iam.gserviceaccount.com).
198
199The import jobs will generally be green if either there was nothing to do,
200or a CL was successfully submitted.
201
202For maintainers:
203
204- The source lives in
205 [third_party/blink/tools/wpt_import.py](../../third_party/blink/tools/wpt_import.py).
206- If the importer starts misbehaving, it can be disabled by landing a
207 [CL to skip the update step](https://crrev.com/c/1961906/).
208
Robert Maa23460e72020-12-20 12:39:27209### New failure notifications
Stephen McGruera12b34f82020-07-10 16:00:42210
An Sung183d2ac2023-08-24 00:05:08211The importer automatically file bugs against a component when imported changes
212introduce failures as long as test owners did not choose to opt-out the failure
213notification mechanism. This includes new tests that fail in Chromium, as well
214as new failures introduced to an existing test. Test owners are encouraged to
215create an `DIR_METADATA` file in the appropriate `external/wpt/` subdirectory
nihardamar3afa5562023-09-28 21:41:21216that contains at least the `monorail.component` and `buganizer_public.component_id`
217fields, which the importer will use to file bugs.
An Sung183d2ac2023-08-24 00:05:08218For example, `external/wpt/css/css-grid/DIR_METADATA` looks like:
Stephen McGruera12b34f82020-07-10 16:00:42219
220```
Robert Maa23460e72020-12-20 12:39:27221monorail {
222 component: "Blink>Layout>Grid"
223}
nihardamar3afa5562023-09-28 21:41:21224buganizer_public {
225 component_id: 1415957
226}
Robert Maa23460e72020-12-20 12:39:27227team_email: "[email protected]"
Stephen McGruera12b34f82020-07-10 16:00:42228```
229
Jonathan Leeaafbd5e2023-07-11 01:52:39230When tests under `external/wpt/css/css-grid/` newly fail in a WPT import, the
231importer will automatically file a bug against the `Blink>Layout>Grid` component
232in [crbug.com](https://crbug.com), with details of which tests failed and the
233outputs.
234The importer will also copy `[email protected]` (the `team_email`) and any
235`external/wpt/css/css-grid/OWNERS` on the bug.
236
237Failing tests are grouped according to the most specific `DIR_METADATA` that
238they roll up to.
Stephen McGruera12b34f82020-07-10 16:00:42239
An Sung183d2ac2023-08-24 00:05:08240To opt-out of this notification, add `wpt.notify` field set to `NO` to the
241corresponding `DIR_METADATA`.
242For example, the following `DIR_METADATA` will suppress notification from tests
243under the located directory:
244
245```
246monorail {
247 component: "Blink>Layout>Grid"
248}
249team_email: "[email protected]"
250wpt {
251 notify: NO
252}
253```
Stephen McGruera12b34f82020-07-10 16:00:42254
Robert Ma4f6eff12020-08-18 22:44:45255### Skipped tests (and how to re-enable them)
Stephen McGruera12b34f82020-07-10 16:00:42256
257We control which tests are imported via a file called
258[W3CImportExpectations](../../third_party/blink/web_tests/W3CImportExpectations),
259which has a list of directories to skip while importing.
260
261In addition to the directories and tests explicitly skipped there, tests may
262also be skipped for a couple other reasons, e.g. if the file path is too long
263for Windows. To check what files are skipped in import, check the recent logs
264for [wpt-importer builder][wpt-importer].
265
Robert Ma4f6eff12020-08-18 22:44:45266If you wish to un-skip some of the directories currently skipped in
267`W3CImportExpectations`, you can modify that file locally and commit it, and on
268the next auto-import, the new tests should be imported.
269
270If you want to import immediately (in order to try the tests out locally, etc)
271you can also run `wpt-import`, but this is not required.
272
273Remember your import might fail due to GitHub's limit for unauthenticated
274requests, so consider [passing your GitHub credentials](#GitHub-credentials) to
275the script.
276
Stephen McGruera12b34f82020-07-10 16:00:42277### Waterfall failures caused by automatic imports.
278
279If there are new test failures that start after an auto-import,
280there are several possible causes, including:
281
282 1. New baselines for flaky tests were added (https://crbug.com/701234).
283 2. Modified tests should have new results for non-Release builds but they weren't added (https://crbug.com/725160).
284 3. New baselines were added for tests with non-deterministic test results (https://crbug.com/705125).
285
286Because these tests are imported from the Web Platform tests, it is better
287to have them in the repository (and marked failing) than not, so prefer to
288[add test expectations](web_test_expectations.md) rather than reverting.
289However, if a huge number of tests are failing, please revert the CL so we
290can fix it manually.
291
292[wpt-importer]: https://ci.chromium.org/p/infra/builders/luci.infra.cron/wpt-importer
293
294## Exporting tests
295
296If you upload a CL with any changes in
297[third_party/blink/web_tests/external/wpt](../../third_party/blink/web_tests/external/wpt),
298once you add reviewers the exporter will create a provisional pull request with
299those changes in the [upstream WPT GitHub repository](https://github.com/web-platform-tests/wpt/).
300The exporter runs on [wpt-exporter builder][wpt-exporter].
301
302Once you're ready to land your CL, please follow the link posted by the bot and
303check the status of the required checks of the GitHub PR. If it's green, go
304ahead landing your CL and the exporter will automatically merge the PR.
305
306If GitHub status is red on the PR, please try to resolve the failures before
307merging. If you run into any issues, or if you have a CL with WPT changes that
Raphael Kubo da Costafec70fa2023-03-02 18:36:44308the exporter did not pick up, please reach out to [email protected].
Stephen McGruera12b34f82020-07-10 16:00:42309
310Additional things to note:
311
312- CLs that change over 1000 files will not be exported.
313- All PRs use the
314 [`chromium-export`](https://github.com/web-platform-tests/wpt/pulls?utf8=%E2%9C%93&q=is%3Apr%20label%3Achromium-export) label.
315- All PRs for CLs that haven't yet been landed in Chromium also use the
316 [`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.
317- The exporter cannot create upstream PRs for in-flight CLs with binary files
318 (e.g. webm files). An export PR will still be made after the CL lands.
319
Robert Ma4f6eff12020-08-18 22:44:45320### Will the exported commits be linked to my GitHub profile?
Stephen McGruera12b34f82020-07-10 16:00:42321
Robert Ma4f6eff12020-08-18 22:44:45322The email you commit with in Chromium will be the author of the commit on
323GitHub. You can [add it as a secondary address on your GitHub
324account](https://help.github.com/articles/adding-an-email-address-to-your-github-account/)
325to link your exported commits to your GitHub profile.
326
327If you are a Googler, you can also register your GitHub account at go/github,
328making it easier for other Googlers to find you.
329
330### What if there are conflicts?
331
332This cannot be avoided entirely as the two repositories are independent, but
333should be rare with frequent imports and exports. When it does happen, manual
334intervention will be needed and in non-trivial cases you may be asked to help
335resolve the conflict.
Stephen McGruera12b34f82020-07-10 16:00:42336
337[wpt-exporter]: https://ci.chromium.org/p/infra/builders/luci.infra.cron/wpt-exporter
338
339## Notes for WPT infra maintainers
340
Stephen McGruerba2aa522021-02-26 21:27:43341### Importer
342
343#### Rubber-Stamper bot
344
345To allow the importer to land CLs without human intervention, it utilizes the
346[Rubber-Stamper
John Palmer046f9872021-05-24 01:24:56347bot](https://chromium.googlesource.com/infra/infra/+/refs/heads/main/go/src/infra/appengine/rubber-stamper/README.md)
Stephen McGruerba2aa522021-02-26 21:27:43348to approve import CLs.
349
350Adding the Rubber-Stamper as a reviewer is one of the last steps the importer
351takes, once tests have been rebaselined and the CQ passes. If the Rubber-Stamper
352cannot approve a CL, it will leave a comment on the CL explaining why - this
353will also cause the importer to go red.
354
355![Rubber-Stamber bot rejecting a CL](images/wpt_import_rubber_stamper_reject.png)
356
357There are two possibilities when the Rubber-Stamper rejects an import: either it
358is a valid rejection, because the import changes code files (`.py`, `.bat`,
359`.sh`), or it is invalid and we're missing an allowlist rule for a file the
360importer is allowed to modify.
361
362For valid rejections, it is the job of the rotation sheriff to land the CL
363manually. You need to un-abandon the import, `CR+1` it yourself, and `CQ+2` it.
364If you don't have permission to do that (e.g. are not a committer), contact
Raphael Kubo da Costafec70fa2023-03-02 18:36:44365[email protected].
Stephen McGruerba2aa522021-02-26 21:27:43366
Raphael Kubo da Costafec70fa2023-03-02 18:36:44367For invalid rejections, message [email protected] or add an exception
Stephen McGruerba2aa522021-02-26 21:27:43368rule yourself. [This is an example
369CL](https://chrome-internal-review.googlesource.com/c/infradata/config/+/3608170)
370that adds an exception rule. (Note that you need internal access to access this
371repository).
372
373#### Manual import
Stephen McGruera12b34f82020-07-10 16:00:42374
375To pull the latest versions of the tests that are currently being imported, you
376can also directly invoke the
377[wpt-import](../../third_party/blink/tools/wpt_import.py) script.
378
379That script will pull the latest version of the tests from our mirrors of the
380upstream repositories. If any new versions of tests are found, they will be
381committed locally to your local repository. You may then upload the changes.
382
383Remember your import might fail due to GitHub's limit for unauthenticated
384requests, so consider [passing your GitHub credentials](#GitHub-credentials) to
385the script.
386
Robert Ma4f6eff12020-08-18 22:44:45387### Exporter
388
389- The source lives in
390 [third_party/blink/tools/wpt_export.py](../../third_party/blink/tools/wpt_export.py).
391- If the exporter starts misbehaving (for example, creating the same PR over
392 and over again), put it in "dry run" mode by landing [this
393 CL](https://crrev.com/c/462381/).
394
Stephen McGruera12b34f82020-07-10 16:00:42395### GitHub credentials
396
397When manually running the `wpt-import` and `wpt-export` scripts, several
398requests are made to GitHub to query the status of pull requests, look for
399existing exported commits etc. GitHub has a [fairly
400low](https://developer.github.com/v3/#rate-limiting) request limit for
401unauthenticated requests, so it is recommended that you let `wpt-export` and
402`wpt-import` use your GitHub credentials when sending requests:
403
404 1. Generate a new [personal access token](https://github.com/settings/tokens)
405 1. Set up your credentials by either:
406 * Setting the `GH_USER` environment variable to your GitHub user name
407 and the `GH_TOKEN` environment variable to the access token you have
408 just created **or**
409 * Creating a JSON file with two keys: `GH_USER`, your GitHub user name,
410 and `GH_TOKEN`, the access token you have just generated. After that,
411 pass `--credentials-json <path-to-json>` to `wpt-export` and
412 `wpt-import`.
Yoshisato Yanagisawa638e2ee02021-12-09 05:52:08413
414### Debugging failed web platform tests
415
416This section explains the way to debug web platform tests.
417Please build `blink_tests` before running commands below.
418It is explained in [Running Web Tests](./web_tests.md#running-web-tests).
419
420#### Running test(s)
421
422The way to run web tests is explained in [Running the
423Tests](./web_tests.md#running-the-tests).
424
425Assume that you are writing the test named `wpt_internal/fake/foobar.html`.
426You may want to run only the tests and you do not want to run all tests under
427`wpt_internal/fake`. The following command narrows down the test to only
428`wpt_internal/fake/foobar.html`.
429
430```bash
431third_party/blink/tools/run_web_tests.py -t Default \
432third_party/blink/web_tests/wpt_internal/fake/foobar.html
433```
434
435#### Logging
436
437During the debug, you may want to log what happens during the test.
438You can use `console.log` in JavaScript to log arbitrary strings.
439
440```
441e.g.
442console.log('fake has been executed.');
443console.log('foo=' + foo);
444```
445
446Logs are written under `$root_build_dir/layout-test-results`.
447If you have tested `wpt_internal/fake/foobar.html`, the log will be stored in
448`$root_build_dir/layout-test-results/wpt_internal/fake/foobar-stderr.txt`.
449You can change output directory with `--results-directory=<output directory>`.
450
451#### Checking HTTP servers
452
453For some test cases, you may use .headers file to set arbitrary HTTP headers.
454To verify what is set to headers, you can run an HTTP server used for WPT
455by yourself. The following command starts the HTTP server for you:
456
457```bash
458third_party/blink/tools/run_blink_wptserve.py
459```
460
461To see headers returned by the server, you can use `curl -v`.
462`curl` will show headers in stderr. You may want to use `|& less` to
463see output if it is too long.
464
465```bash
466curl -v http://localhost:8081/wpt_internal/fake/foobar.html |& less
467```
Takahiro961b2422022-01-19 00:14:29468
469#### Debugging with a debugger
470
471You are able to debug the inside of Chromium with a debugger for particular
472WPT tests. Refer to [Running web tests using the content shell](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/testing/web_tests_in_content_shell.md)
473for details.