Revision be27f89da7c2a43e47df45a472668bdb17433c48 authored by James Graham on 13 October 2016, 14:30:24 UTC, committed by James Graham on 20 October 2016, 13:07:02 UTC
The purpose of the job is to identify poorly-written, unstable, tests as early in the cycle as possible. To this end we use wptrunner to run all the changed tests in the PR in Firefox and Chrome. If 10 runs of the tests don't all give a consisent result then the job fails. Adding Edge and Safari should be possible, but will be challenging because of their strict platform dependencies.
1 parent 7987189
lint-tool.md
We have a lint tool for catching common mistakes in test files. You can run
it manually by starting the `lint` executable from the root of your local
web-platform-tests working directory like this:
```
./lint
```
The lint tool is also run automatically for every submitted pull request,
and reviewers will not merge branches with tests that have lint errors, so
you must either [fix all lint errors](#fixing-lint-errors), or you must
[white-list test files] (#updating-the-whitelist) to suppress the errors.
## Fixing lint errors
You must fix any errors the lint tool reports, unless an error is for
something essential to a certain test or that for some other exceptional
reason shouldn't prevent the test from being merged. In those cases you can
[white-list test files](#updating-the-whiteslist) to suppress the errors.
Otherwise, use the details in this section to fix all errors reported.
* **CONSOLE**: Test-file line has a `console.*(...)` call; **fix**: remove
the `console.*(...)` call (and in some cases, consider adding an
`assert_*` of some kind in place of it).
* **CR AT EOL**: Test-file line ends with CR (U+000D) character; **fix**:
reformat file so each line just has LF (U+000A) line ending (standard,
cross-platform "Unix" line endings instead of, e.g., DOS line endings).
* **EARLY-TESTHARNESSREPORT**: Test file has an instance of
`<script src='/resources/testharnessreport.js'>` prior to
`<script src='/resources/testharness.js'>`; **fix**: flip the order.
* **INDENT TABS**: Test-file line starts with one or more tab characters;
**fix**: use spaces to replace any tab characters at beginning of lines.
* **INVALID-TIMEOUT**: Test file with `<meta name='timeout'...>` element
that has a `content` attribute whose value is not `long`; **fix**:
replace the value of the `content` attribute with `long`.
* **LATE-TIMEOUT**: Test file with `<meta name="timeout"...>` element after
`<script src='/resources/testharnessreport.js'>` element ; **fix**: move
the `<meta name="timeout"...>` element to precede the `script` element.
* **MALFORMED-VARIANT**: Test file with a `<meta name='variant'...>`
element whose `content` attribute has a malformed value; **fix**: ensure
the value of the `content` attribute starts with `?` or `#` or is empty.
* **MISSING-TESTHARNESSREPORT**: Test file is missing an instance of
`<script src='/resources/testharnessreport.js'>`; **fix**: ensure each
test file contains `<script src='/resources/testharnessreport.js'>`.
* **MULTIPLE-TESTHARNESS**: Test file with multiple instances of
`<script src='/resources/testharness.js'>`; **fix**: ensure each test
has only one `<script src='/resources/testharness.js'>` instance.
* **MULTIPLE-TESTHARNESSREPORT**: Test file with multiple instances of
`<script src='/resources/testharnessreport.js'>`; **fix**: ensure each test
has only one `<script src='/resources/testharnessreport.js'>` instance.
* **MULTIPLE-TIMEOUT**: Test file with multiple `<meta name="timeout"...>`
elements; **fix**: ensure each test file has only one instance of a
`<meta name="timeout"...>` element.
* **PARSE-FAILED**: Test file failed parsing by manifest builder; **fix**:
examine the file to find the causes of any parse errors, and fix them.
* **PATH LENGTH**: Test file's pathname has a total length greater than 150
characters; **fix**: use shorter filename to rename the test file.
* **PRINT STATEMENT**: A server-side python support file contains a `print`
statement; **fix**: remove the `print` statement or replace it with
something else that achieves the intended effect (e.g., a logging call).
* **SET TIMEOUT**: Test-file line has `setTimeout(...)` call; **fix**:
replace all `setTimeout(...)` calls with `step_timeout(...)` calls.
* **TRAILING WHITESPACE**: Test-file line has trailing whitespace; **fix**:
remove trailing whitespace from all lines in the file.
* **VARIANT-MISSING**: Test file with a `<meta name='variant'...>` element
that's missing a `content` attribute; **fix**: add a `content` attribute
with an appropriate value to the `<meta name='variant'...>` element.
* **W3C-TEST.ORG**: Test-file line has the string `w3c-test.org`; **fix**:
either replace the `w3c-test.org` string with the expression
`{{host}}:{{ports[http][0]}}` or a generic hostname like `example.org`.
## Updating the whitelist
Normally you must [fix all lint errors](#fixing-lint-errors). But in the
unusual case of error reports for things essential to certain tests or that
for other exceptional reasons shouldn't prevent a merge of a test, you can
update and commit the `lint.whitelist` file in the web-platform-tests root
directory to suppress errors the lint tool would report for a test file.
To add a test file or directory to the whitelist, use the following format:
```
ERROR TYPE:file/name/pattern
```
For example, to whitelist the file `example/file.html` such that all
`TRAILING WHITESPACE` errors the lint tool would report for it are
suppressed, add the following line to the `lint.whitelist` file.
```
TRAILING WHITESPACE:example/file.html
```
To whitelist an entire directory rather than just one file, use the `*`
wildcard. For example, to whitelist the `example` directory such that all
`TRAILING WHITESPACE` errors the lint tool would report for any files in it
are suppressed, add the following line to the `lint.whitelist` file.
```
TRAILING WHITESPACE:example/*
```
If needed, you can also use the `*` wildcard to express other filename
patterns or directory-name patterns (just as you would when, e.g.,
executing shell commands from the command line).
Finally, to whitelist just one line in a file, use the following format:
```
ERROR TYPE:file/name/pattern:line_number
```
For example, to whitelist just line 128 of the file `example/file.html`
such that any `TRAILING WHITESPACE` error the lint tool would report for
that line is suppressed, add the following to the `lint.whitelist` file.
```
TRAILING WHITESPACE:example/file.html:128
```
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...