Implementation Report for the CSS Basic User Interface Module Level 3

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:

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: