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.
5 Implementations were tested and used in preparation of this report:
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.
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”).
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.
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.
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.
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.
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.
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.
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.
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.
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 |
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.
Many thanks to the following for their contributions: