## Introduction

This implementation report was prepared to document the passing of the Candidate Recommendation exit criteria by the CSS Basic User Interface Module Level 3.

The test suite is considered to be complete with no known or suspected bugs at the time of its publication. If you find any errors, would like to contribute additional tests, or have other feedback, please report it on the web-platform-tests project or to the archived public discussion mailing list for CSS test suites, public-css-testsuite@w3.org.

## Implementations

5 Implementations were tested and used in preparation of this report:

- Firefox (engine: Gecko)
- Chrome (engine: Blink)
- Safari (engine: Webkit)
- Edge
- Opera (engine: Presto)

Blink forked from Webkit after implementation of some the features in this specification started, but additional features and fixes were implemented independently on both engines after the fork. Care has been taken to make sure that tests that had Blink and Webkit as the only two implementations were only counted as passing CR exit criteria when the relevant feature had been implemented separately, after the fork.

Opera has discontinued the Presto engine and moved to Blink, but Presto-based Opera is included for included for historical interest, and as further evidence that the features of this specification can be implemented by multiple independent parties.

## Tests

The test suite for this specification was initially prepared in the dedicated test repository of the CSS-WG, and later moved to the web-platform-tests project. The tests follow the (overlapping) guidelines of these two projects.

A continuously updated version of this test suite is available. This report was prepared using the tests and their results as of 31 October 2017.

Note that the link above also includes tests from other test suites that reference this specification. At the time of writing this report, this includes one test (grid-box-sizing-001) that is part of the css-grid test suite. As that specification is less advanced than this one on TR, this report does not take this test into account.

The test suite contains 203 tests for mandatory normative statements (using RFC 2119 terminology like “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, or “SHALL NOT”) and 32 tests for optional normative statements (using RFC 2119 terminology like “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, or “OPTIONAL”).

## Results

### Summary

All 203 tests for mandatory normative statements pass in at least two independent implementations.

10 of the 32 tests for optional normative statements pass in at least two independent implementations.

The Candidate Recommendation exit criteria are therefore fulfilled.

### Detailed Analysis

This section discusses the cases where while CR exit criteria are met, various factors suggest closer inspection may be in order, and explain the reason why these concerns are ultimately not warranted.

#### Mandatory tests

box-sizing-024
box-sizing-025

  These two tests for mandatory normative statements depend on Presto to reach two independent implementations. Presto is a valid implementation, and these test do therefore meet CR exit criteria, but as Presto is a discontinued engine, we looked whether there was a risk. These are tests that involve SVG files that do not have both an intrinsic width and height, but have one of the two and an intrinsic ratio. The feature under test does not have any explicit requirements distinguishing such files from SVG files that do have both an intrinsic width and height, and the tests for such files do pass in more implementations. This makes it clear that this is a bug in the handling of SVG files rather than in the features of this specification.

#### Optional tests

resize-012

  This test has Blink and Webkit as the only two implementations. However, both implementations are more recent than the fork between Blink and Webkit and independent. Moreover, this is an optional (“MAY”) test.

outline-005
outline-013
outline-014
outline-015
outline-016
resize-008
resize-009
resize-010
resize-011
resize-013
resize-014
text-overflow-018
text-overflow-019
text-overflow-021
cursor-image-013
cursor-image-014
cursor-image-015
cursor-image-016
cursor-text-002

  While two implementations are not required of optional tests to meet exit criteria, the CSS-WG wanted to make sure that optional normative tests with less than two implementations were still genuinely useful parts of the specification and more merely wishful thinking. The tests and corresponding features were analyzed by the group and confirmed to be acceptable. See the link above for detailed discussion.

cursor-image-006

  This test is for optional support for using .ani image files as mouse cursors. This is supported in one browser, and is a desirable feature that should not be disallowed, so keeping this as a “MAY” is appropriate.

cursor-image-005-nfs

  This test is for optional support for using a subcategory of SVG images as mouse cursors. Support for other images formats, and for SVG in the general case does have more than 2 implementations. The working group agrees that even thought this case is currently unsupported, this is a desirable feature that should not be disallowed, and keeping this as a “MAY” is appropriate.

caret-color-006

  This test is for an optional (“MAY”) quality of implementation allowance, allowing implementors to use heuristics to improve color contrast. The fact that no implementation uses it today is not an issue, as this is merely allowing better behavior.

### Raw results

The following table gives the results of running the test suite on the 24 October 2017.

Requirement | Testcase | Blink | Edge | Gecko | Presto | WebKit
--- | --- | --- | --- | --- | --- | ---
3.1: Changing the Box Model: the box-sizing property
Mandatory | box-sizing-001 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-003 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-005 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-007 | Pass | Fail | Pass | Pass | Pass
Mandatory | box-sizing-008 | Pass | Fail | Pass | Pass | Pass
Mandatory | box-sizing-009 | Pass | Fail | Pass | Pass | Pass
Mandatory | box-sizing-010 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-011 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-012 | Pass | Fail | Pass | Pass | Pass
Mandatory | box-sizing-013 | Pass | Fail | Pass | Pass | Pass
Mandatory | box-sizing-014 | Fail | Pass | Pass | Pass | Fail
Mandatory | box-sizing-015 | Fail | Pass | Pass | Pass | Fail
Mandatory | box-sizing-016 | Fail | Pass | Pass | Pass | Fail
Mandatory | box-sizing-017 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-018 | Fail | Pass | Pass | Pass | Fail
Mandatory | box-sizing-019 | Fail | Pass | Pass | Pass | Fail
Mandatory | box-sizing-020 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-021 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-022 | Pass | Fail | Pass | Pass | Pass
Mandatory | box-sizing-023 | Pass | Fail | Pass | Pass | Pass
Mandatory | box-sizing-024 | Fail | Fail | Pass | Pass | Fail
Mandatory | box-sizing-025 | Fail | Fail | Pass | Pass | Fail
Mandatory | box-sizing-026 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-027 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-border-box-001 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-border-box-002 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-border-box-003 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-border-box-004 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-content-box-001 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-content-box-002 | Pass | Pass | Pass | Fail | Pass
Mandatory | box-sizing-content-box-003 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-replaced-001 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-replaced-002 | Pass | Pass | Pass | Pass | Pass
Mandatory | box-sizing-replaced-003 | Pass | Pass | Pass | Pass | Pass
Mandatory | grid-box-sizing-001 | Pass | Fail | Pass | Fail | Fail
4: Outline properties
Mandatory | outline-003 | Pass | Pass | Pass | Pass | Pass
Optional | outline-004 | Pass | Fail | Pass | Fail | Pass
Optional | outline-005 | Fail | Fail | Fail | Fail | Fail
Mandatory | outline-006 | Pass | Pass | Pass | Pass | Pass
Mandatory | outline-007 | Pass | Fail | Pass | Fail | Pass
Mandatory | outline-008 | Pass | Pass | Pass | Pass | Pass
Mandatory | outline-009 | Pass | Pass | Fail | Fail | Pass
Mandatory | outline-010 | Pass | Fail | Pass | Pass | Pass
Mandatory | outline-011 | Pass | Pass | Pass | Pass | Pass
Mandatory | outline-012 | Pass | Fail | Pass | Pass | Pass
Optional | outline-013 | Fail | Fail | Pass | Fail | Fail
Optional | outline-014 | Fail | Fail | Fail | Fail | Fail
Optional | outline-015 | Fail | Fail | Fail | Fail | Fail
Optional | outline-016 | Fail | Fail | Fail | Fail | Fail
Mandatory | outline-019 | Pass | Fail | Pass | Fail | Fail
4.1: Outlines Shorthand: the outline property
Mandatory | outline-001 | Pass | Pass | Pass | Pass | Pass
Mandatory | outline-002 | Pass | Pass | Pass | Pass | Pass
4.3: Outline Patterns: the outline-style property
Mandatory | outline-017 | Pass | Fail | Pass | Fail | Pass
Mandatory | outline-018 | Pass | Fail | Pass | Fail | Fail
Mandatory | outline-style-011 | Pass | Pass | Pass | Pass | Pass
Mandatory | outline-style-012 | Pass | Pass | Pass | Pass | Pass
Mandatory | outline-style-013 | Pass | Pass | Pass | Pass | Pass
Mandatory | outline-style-014 | Pass | Pass | Pass | Pass | Pass
4.4: Outline Colors: the outline-color property
Mandatory | outline-color-001 | Pass | Pass | Pass | Pass | Pass
4.5: Offsetting the Outline: the outline-offset property
Mandatory | outline-offset | Pass | Fail | Pass | Pass | Pass
Mandatory | outline-offset-001 | Pass | Fail | Pass | Pass | Pass
5.1: Resizing Boxes: the resize property
Mandatory | resize-001 | Pass | Fail | Pass | Fail | Pass
Mandatory | resize-002 | Pass | Fail | Pass | Fail | Pass
Mandatory | resize-003 | Pass | Fail | Pass | Fail | Pass
Mandatory | resize-004 | Pass | Pass | Pass | Pass | Pass
Mandatory | resize-005 | Pass | Pass | Pass | Pass | Pass
Mandatory | resize-006 | Pass | Fail | Pass | Fail | Pass
Mandatory | resize-007 | Pass | Pass | Pass | Pass | Pass
Optional | resize-008 | Fail | Fail | Fail | Fail | Fail
Optional | resize-009 | Fail | Fail | Fail | Fail | Fail
Optional | resize-010 | Fail | Fail | Fail | Fail | Fail
Optional | resize-011 | Fail | Fail | Fail | Fail | Fail
Optional | resize-012 | Pass | Fail | Fail | Fail | Pass
Optional | resize-013 | Fail | Fail | Fail | Fail | Fail
Optional | resize-014 | Fail | Fail | Fail | Fail | Fail
Mandatory | resize-015 | Pass | Fail | Pass | Fail | Pass
Mandatory | resize-016 | Pass | Fail | Pass | Fail | Pass
Mandatory | resize-017 | Pass | Fail | Pass | Fail | Pass
Mandatory | resize-018 | Pass | Fail | Pass | Fail | Pass
Mandatory | resize-019 | Pass | Fail | Pass | Fail | Fail
Mandatory | resize-020 | Pass | Fail | Pass | Fail | Fail
Mandatory | resize-021 | Pass | Fail | Pass | Fail | Pass
5.2: Overflow Ellipsis: the text-overflow property
Mandatory | text-overflow | Pass | Pass | Pass | Pass | Pass
Mandatory | text-overflow-001 | Pass | Pass | Pass | Pass | Pass
Mandatory | text-overflow-002 | Pass | Pass | Pass | Pass | Pass
Mandatory | text-overflow-003 | Pass | Pass | Pass | Pass | Pass
Mandatory | text-overflow-004 | Pass | Pass | Pass | Pass | Pass
Mandatory | text-overflow-005 | Pass | Pass | Pass | Fail | Pass
Mandatory | text-overflow-006 | Pass | Pass | Pass | Fail | Pass
Mandatory | text-overflow-007 | Pass | Fail | Pass | Fail | Pass
Mandatory | text-overflow-008 | Pass | Pass | Pass | Fail | Pass
Mandatory | text-overflow-009 | Pass | Pass | Pass | Pass | Pass
Mandatory | text-overflow-010 | Fail | Pass | Pass | Fail | Fail
Mandatory | text-overflow-011 | Pass | Pass | Pass | Fail | Pass
Optional | text-overflow-012 | Pass | Pass | Fail | Fail | Fail
Mandatory | text-overflow-017 | Pass | Pass | Pass | Fail | Pass
Mandatory | text-overflow-020 | Pass | Pass | Pass | Pass | Pass
Mandatory | text-overflow-022 | Pass | Pass | Pass | Fail | Pass
Optional | text-overflow-023 | Fail | Fail | Pass | Pass | Fail
ellipsing details
Mandatory | text-overflow-013 | Pass | Fail | Pass | Fail | Pass
Mandatory | text-overflow-014 | Pass | Pass | Pass | Fail | Pass
Mandatory | text-overflow-015 | Pass | Fail | Pass | Fail | Fail
Mandatory | text-overflow-016 | Pass | Pass | Pass | Fail | Pass
user interaction with ellipsis
Optional | text-overflow-018 | Fail | Fail | Fail | Fail | Fail
Optional | text-overflow-019 | Fail | Fail | Fail | Fail | Pass
ellipsis interaction with scrolling interfaces
Optional | text-overflow-021 | Fail | Fail | Pass | Fail | Fail
6.1.1: Styling the Cursor: the cursor property
Mandatory | cursor-001 | Pass | Fail | Pass | Pass | Pass
Mandatory | cursor-002 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-003 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-004 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-005 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-006 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-007 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-008 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-009 | Fail | Fail | Pass | Fail | Pass
Mandatory | cursor-010 | Fail | Fail | Pass | Fail | Pass
Mandatory | cursor-011 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-012 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-013 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-014 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-015 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-016 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-017 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-018 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-019 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-020 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-auto-001 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-auto-002 | Pass | Fail | Pass | Fail | Fail
Mandatory | cursor-auto-003 | Pass | Fail | Pass | Fail | Fail
Mandatory | cursor-auto-004 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-auto-005 | Pass | Pass | Pass | Fail | Pass
Mandatory | cursor-auto-006 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-auto-007 | Pass | Fail | Pass | Fail | Fail
Mandatory | cursor-border-area | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-box-004 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-box-005 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-box-006 | Pass | Pass | Pass | Fail | Pass
Mandatory | cursor-box-007 | Pass | Pass | Pass | Fail | Pass
Mandatory | cursor-content-area | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-hover-001 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-hover-002 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-hover-003 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-image-001 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-002 | Pass | Fail | Pass | Fail | Pass
Optional | cursor-image-003 | Pass | Pass | Pass | Fail | Pass
Optional | cursor-image-004 | Pass | Pass | Pass | Fail | Pass
Mandatory | cursor-image-005 | Pass | Fail | Pass | Fail | Pass
Optional | cursor-image-005-nfs | Fail | Fail | Fail | Fail | Fail
Optional | cursor-image-006 | Fail | Pass | Fail | Fail | Fail
Mandatory | cursor-image-007 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-008 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-009 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-image-010 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-011 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-012 | Pass | Fail | Pass | Fail | Pass
Optional | cursor-image-013 | Fail | Fail | Fail | Fail | Fail
Optional | cursor-image-014 | Fail | Fail | Fail | Fail | Fail
Optional | cursor-image-015 | Fail | Fail | Fail | Fail | Fail
Optional | cursor-image-016 | Fail | Fail | Fail | Fail | Fail
Mandatory | cursor-image-017 | Pass | Pass | Pass | Fail | Pass
Mandatory | cursor-image-018 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-image-png-001 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-002 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-003 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-004 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-005 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-006 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-007 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-008 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-009 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-010 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-011 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-012 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-013 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-014 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-015 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-016 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-017 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-018 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-019 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-020 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-021 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-022 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-023 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-024 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-025 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-026 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-027 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-028 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-029 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-030 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-031 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-032 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-033 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-034 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-035 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-036 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-037 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-image-png-038 | Pass | Fail | Pass | Fail | Fail
Mandatory | cursor-image-png-039 | Pass | Fail | Pass | Fail | Fail
Mandatory | cursor-image-png-040 | Pass | Fail | Pass | Fail | Fail
Mandatory | cursor-image-png-041 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-image-png-042 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-image-png-043 | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-outline-area | Pass | Pass | Pass | Pass | Pass
Mandatory | cursor-padding-area | Pass | Pass | Pass | Pass | Pass
Optional | cursor-text-001 | Pass | Fail | Pass | Fail | Fail
Optional | cursor-text-002 | Fail | Fail | Fail | Fail | Fail
Mandatory | cursor-x-y-001 | Pass | Fail | Pass | Fail | Pass
Mandatory | cursor-x-y-002 | Pass | Fail | Pass | Fail | Fail
Mandatory | cursor-x-y-003 | Pass | Fail | Pass | Fail | Pass
Mandatory | select-cursor-001-manual | Pass | Fail | Pass | Pass | Pass
6.1.1.1: Cursor of the canvas
Mandatory | canvas-cursor-001 | Pass | Pass | Fail | Fail | Pass
Mandatory | canvas-cursor-002 | Pass | Pass | Pass | Pass | Pass
6.2.1: Coloring the Insertion Caret: the caret-color property
Mandatory | caret-color-001 | Pass | Fail | Pass | Fail | Pass
Mandatory | caret-color-002 | Pass | Fail | Pass | Fail | Pass
Optional | caret-color-003 | Pass | Fail | Pass | Pass | Pass
Mandatory | caret-color-004 | Pass | Pass | Pass | Pass | Pass
Mandatory | caret-color-005 | Pass | Pass | Pass | Pass | Pass
Optional | caret-color-006 | Fail | Fail | Fail | Fail | Fail
Mandatory | caret-color-007 | Pass | Fail | Pass | Pass | Pass
Mandatory | caret-color-008 | Pass | Fail | Pass | Fail | Pass
Mandatory | caret-color-009 | Pass | Fail | Pass | Fail | Pass
Mandatory | caret-color-010 | Pass | Fail | Pass | Fail | Pass
Mandatory | caret-color-011 | Pass | Fail | Pass | Fail | Pass
Optional | caret-color-012 | Pass | Fail | Pass | Pass | Pass
Mandatory | caret-color-013 | Pass | Fail | Pass | Fail | Pass
Mandatory | caret-color-014 | Pass | Fail | Pass | Fail | Pass
Mandatory | caret-color-015 | Pass | Fail | Pass | Fail | Pass
Optional | caret-color-016 | Pass | Fail | Pass | Fail | Pass
Mandatory | caret-color-017 | Pass | Fail | Pass | Fail | Pass
Mandatory | caret-color-018 | Pass | Fail | Pass | Fail | Fail
Mandatory | caret-color-019 | Pass | Fail | Pass | Fail | Fail
Mandatory | caret-color-020 | Pass | Fail | Pass | Fail | Fail
Mandatory | caret-color-021 | Pass | Fail | Pass | Fail | Fail

## License

This test suite is licensed under both the W3C Test Suite License and the W3C 3-clause BSD License. See W3C Legal's explanation of the licenses.

## Acknowledgements

Many thanks to the following for their contributions:

- Chris Lilley
- Chris Rebert
- Elika J. Etemad
- Florian Rivoal
- Intel
- jy-jeung
- Manuel Rego Casasnovas
- Michael Howell
- Scott Johnson
- Shiyou Tan
- YreenChan