diff options
389 files changed, 7781 insertions, 2435 deletions
diff --git a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini index 76b398963ae..a9e46713244 100644 --- a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini +++ b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini @@ -7,7 +7,7 @@ expected: FAIL [Opening a blob URL in a new window immediately before revoking it works.] - expected: FAIL + expected: TIMEOUT [Opening a blob URL in a noopener about:blank window immediately before revoking it works.] expected: FAIL diff --git a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini index 6a3af4e2ece..947e223fb28 100644 --- a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini +++ b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini @@ -14,9 +14,6 @@ [Revoke blob URL after creating Request, will fetch] expected: FAIL - [Revoke blob URL after calling fetch, fetch should succeed] - expected: FAIL - [url-with-fetch.any.html] [Untitled] diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 69b95ee43d7..fe2077f0d1f 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -9103,369 +9103,333 @@ {} ] ], - "css/css-transitions/transition-delay-000.html": [ + "css/css-transitions/transition-delay-000-manual.html": [ [ - "css/css-transitions/transition-delay-000.html", + "css/css-transitions/transition-delay-000-manual.html", {} ] ], - "css/css-transitions/transition-delay-002.html": [ + "css/css-transitions/transition-delay-002-manual.html": [ [ - "css/css-transitions/transition-delay-002.html", + "css/css-transitions/transition-delay-002-manual.html", {} ] ], - "css/css-transitions/transition-delay-003.html": [ + "css/css-transitions/transition-delay-003-manual.html": [ [ - "css/css-transitions/transition-delay-003.html", + "css/css-transitions/transition-delay-003-manual.html", {} ] ], - "css/css-transitions/transition-duration-002.html": [ + "css/css-transitions/transition-duration-002-manual.html": [ [ - "css/css-transitions/transition-duration-002.html", + "css/css-transitions/transition-duration-002-manual.html", {} ] ], - "css/css-transitions/transition-duration-003.html": [ + "css/css-transitions/transition-duration-003-manual.html": [ [ - "css/css-transitions/transition-duration-003.html", + "css/css-transitions/transition-duration-003-manual.html", {} ] ], - "css/css-transitions/transition-duration-004.html": [ + "css/css-transitions/transition-duration-004-manual.html": [ [ - "css/css-transitions/transition-duration-004.html", + "css/css-transitions/transition-duration-004-manual.html", {} ] ], - "css/css-transitions/transition-property-003.html": [ + "css/css-transitions/transition-property-003-manual.html": [ [ - "css/css-transitions/transition-property-003.html", + "css/css-transitions/transition-property-003-manual.html", {} ] ], - "css/css-transitions/transition-property-004.html": [ + "css/css-transitions/transition-property-004-manual.html": [ [ - "css/css-transitions/transition-property-004.html", + "css/css-transitions/transition-property-004-manual.html", {} ] ], - "css/css-transitions/transition-property-005.html": [ + "css/css-transitions/transition-property-005-manual.html": [ [ - "css/css-transitions/transition-property-005.html", + "css/css-transitions/transition-property-005-manual.html", {} ] ], - "css/css-transitions/transition-property-006.html": [ + "css/css-transitions/transition-property-006-manual.html": [ [ - "css/css-transitions/transition-property-006.html", + "css/css-transitions/transition-property-006-manual.html", {} ] ], - "css/css-transitions/transition-property-007.html": [ + "css/css-transitions/transition-property-007-manual.html": [ [ - "css/css-transitions/transition-property-007.html", + "css/css-transitions/transition-property-007-manual.html", {} ] ], - "css/css-transitions/transition-property-008.html": [ + "css/css-transitions/transition-property-008-manual.html": [ [ - "css/css-transitions/transition-property-008.html", + "css/css-transitions/transition-property-008-manual.html", {} ] ], - "css/css-transitions/transition-property-009.html": [ + "css/css-transitions/transition-property-009-manual.html": [ [ - "css/css-transitions/transition-property-009.html", + "css/css-transitions/transition-property-009-manual.html", {} ] ], - "css/css-transitions/transition-property-010.html": [ + "css/css-transitions/transition-property-010-manual.html": [ [ - "css/css-transitions/transition-property-010.html", + "css/css-transitions/transition-property-010-manual.html", {} ] ], - "css/css-transitions/transition-property-011.html": [ + "css/css-transitions/transition-property-011-manual.html": [ [ - "css/css-transitions/transition-property-011.html", + "css/css-transitions/transition-property-011-manual.html", {} ] ], - "css/css-transitions/transition-property-012.html": [ + "css/css-transitions/transition-property-012-manual.html": [ [ - "css/css-transitions/transition-property-012.html", + "css/css-transitions/transition-property-012-manual.html", {} ] ], - "css/css-transitions/transition-property-013.html": [ + "css/css-transitions/transition-property-013-manual.html": [ [ - "css/css-transitions/transition-property-013.html", + "css/css-transitions/transition-property-013-manual.html", {} ] ], - "css/css-transitions/transition-property-014.html": [ + "css/css-transitions/transition-property-014-manual.html": [ [ - "css/css-transitions/transition-property-014.html", + "css/css-transitions/transition-property-014-manual.html", {} ] ], - "css/css-transitions/transition-property-015.html": [ + "css/css-transitions/transition-property-015-manual.html": [ [ - "css/css-transitions/transition-property-015.html", + "css/css-transitions/transition-property-015-manual.html", {} ] ], - "css/css-transitions/transition-property-016.html": [ + "css/css-transitions/transition-property-016-manual.html": [ [ - "css/css-transitions/transition-property-016.html", + "css/css-transitions/transition-property-016-manual.html", {} ] ], - "css/css-transitions/transition-property-017.html": [ + "css/css-transitions/transition-property-017-manual.html": [ [ - "css/css-transitions/transition-property-017.html", + "css/css-transitions/transition-property-017-manual.html", {} ] ], - "css/css-transitions/transition-property-018.html": [ + "css/css-transitions/transition-property-018-manual.html": [ [ - "css/css-transitions/transition-property-018.html", + "css/css-transitions/transition-property-018-manual.html", {} ] ], - "css/css-transitions/transition-property-019.html": [ + "css/css-transitions/transition-property-019-manual.html": [ [ - "css/css-transitions/transition-property-019.html", + "css/css-transitions/transition-property-019-manual.html", {} ] ], - "css/css-transitions/transition-property-020.html": [ + "css/css-transitions/transition-property-020-manual.html": [ [ - "css/css-transitions/transition-property-020.html", + "css/css-transitions/transition-property-020-manual.html", {} ] ], - "css/css-transitions/transition-property-021.html": [ + "css/css-transitions/transition-property-021-manual.html": [ [ - "css/css-transitions/transition-property-021.html", + "css/css-transitions/transition-property-021-manual.html", {} ] ], - "css/css-transitions/transition-property-022.html": [ + "css/css-transitions/transition-property-022-manual.html": [ [ - "css/css-transitions/transition-property-022.html", + "css/css-transitions/transition-property-022-manual.html", {} ] ], - "css/css-transitions/transition-property-023.html": [ + "css/css-transitions/transition-property-023-manual.html": [ [ - "css/css-transitions/transition-property-023.html", + "css/css-transitions/transition-property-023-manual.html", {} ] ], - "css/css-transitions/transition-property-024.html": [ + "css/css-transitions/transition-property-024-manual.html": [ [ - "css/css-transitions/transition-property-024.html", + "css/css-transitions/transition-property-024-manual.html", {} ] ], - "css/css-transitions/transition-property-025.html": [ + "css/css-transitions/transition-property-025-manual.html": [ [ - "css/css-transitions/transition-property-025.html", + "css/css-transitions/transition-property-025-manual.html", {} ] ], - "css/css-transitions/transition-property-026.html": [ + "css/css-transitions/transition-property-026-manual.html": [ [ - "css/css-transitions/transition-property-026.html", + "css/css-transitions/transition-property-026-manual.html", {} ] ], - "css/css-transitions/transition-property-027.html": [ + "css/css-transitions/transition-property-027-manual.html": [ [ - "css/css-transitions/transition-property-027.html", + "css/css-transitions/transition-property-027-manual.html", {} ] ], - "css/css-transitions/transition-property-028.html": [ + "css/css-transitions/transition-property-028-manual.html": [ [ - "css/css-transitions/transition-property-028.html", + "css/css-transitions/transition-property-028-manual.html", {} ] ], - "css/css-transitions/transition-property-029.html": [ + "css/css-transitions/transition-property-029-manual.html": [ [ - "css/css-transitions/transition-property-029.html", + "css/css-transitions/transition-property-029-manual.html", {} ] ], - "css/css-transitions/transition-property-030.html": [ + "css/css-transitions/transition-property-030-manual.html": [ [ - "css/css-transitions/transition-property-030.html", + "css/css-transitions/transition-property-030-manual.html", {} ] ], - "css/css-transitions/transition-property-031.html": [ + "css/css-transitions/transition-property-031-manual.html": [ [ - "css/css-transitions/transition-property-031.html", + "css/css-transitions/transition-property-031-manual.html", {} ] ], - "css/css-transitions/transition-property-032.html": [ + "css/css-transitions/transition-property-032-manual.html": [ [ - "css/css-transitions/transition-property-032.html", + "css/css-transitions/transition-property-032-manual.html", {} ] ], - "css/css-transitions/transition-property-033.html": [ + "css/css-transitions/transition-property-033-manual.html": [ [ - "css/css-transitions/transition-property-033.html", + "css/css-transitions/transition-property-033-manual.html", {} ] ], - "css/css-transitions/transition-property-034.html": [ + "css/css-transitions/transition-property-034-manual.html": [ [ - "css/css-transitions/transition-property-034.html", + "css/css-transitions/transition-property-034-manual.html", {} ] ], - "css/css-transitions/transition-property-035.html": [ + "css/css-transitions/transition-property-035-manual.html": [ [ - "css/css-transitions/transition-property-035.html", + "css/css-transitions/transition-property-035-manual.html", {} ] ], - "css/css-transitions/transition-property-036.html": [ + "css/css-transitions/transition-property-036-manual.html": [ [ - "css/css-transitions/transition-property-036.html", + "css/css-transitions/transition-property-036-manual.html", {} ] ], - "css/css-transitions/transition-property-037.html": [ + "css/css-transitions/transition-property-037-manual.html": [ [ - "css/css-transitions/transition-property-037.html", + "css/css-transitions/transition-property-037-manual.html", {} ] ], - "css/css-transitions/transition-property-038.html": [ + "css/css-transitions/transition-property-038-manual.html": [ [ - "css/css-transitions/transition-property-038.html", + "css/css-transitions/transition-property-038-manual.html", {} ] ], - "css/css-transitions/transition-property-039.html": [ + "css/css-transitions/transition-property-039-manual.html": [ [ - "css/css-transitions/transition-property-039.html", + "css/css-transitions/transition-property-039-manual.html", {} ] ], - "css/css-transitions/transition-property-040.html": [ + "css/css-transitions/transition-property-040-manual.html": [ [ - "css/css-transitions/transition-property-040.html", + "css/css-transitions/transition-property-040-manual.html", {} ] ], - "css/css-transitions/transition-property-041.html": [ + "css/css-transitions/transition-property-041-manual.html": [ [ - "css/css-transitions/transition-property-041.html", + "css/css-transitions/transition-property-041-manual.html", {} ] ], - "css/css-transitions/transition-property-042.html": [ + "css/css-transitions/transition-property-042-manual.html": [ [ - "css/css-transitions/transition-property-042.html", + "css/css-transitions/transition-property-042-manual.html", {} ] ], - "css/css-transitions/transition-property-043.html": [ + "css/css-transitions/transition-property-043-manual.html": [ [ - "css/css-transitions/transition-property-043.html", + "css/css-transitions/transition-property-043-manual.html", {} ] ], - "css/css-transitions/transition-property-044.html": [ + "css/css-transitions/transition-property-044-manual.html": [ [ - "css/css-transitions/transition-property-044.html", + "css/css-transitions/transition-property-044-manual.html", {} ] ], - "css/css-transitions/transition-property-045.html": [ + "css/css-transitions/transition-property-045-manual.html": [ [ - "css/css-transitions/transition-property-045.html", + "css/css-transitions/transition-property-045-manual.html", {} ] ], - "css/css-transitions/transition-timing-function-002.html": [ + "css/css-transitions/transition-timing-function-002-manual.html": [ [ - "css/css-transitions/transition-timing-function-002.html", + "css/css-transitions/transition-timing-function-002-manual.html", {} ] ], - "css/css-transitions/transition-timing-function-003.html": [ + "css/css-transitions/transition-timing-function-003-manual.html": [ [ - "css/css-transitions/transition-timing-function-003.html", + "css/css-transitions/transition-timing-function-003-manual.html", {} ] ], - "css/css-transitions/transition-timing-function-004.html": [ + "css/css-transitions/transition-timing-function-004-manual.html": [ [ - "css/css-transitions/transition-timing-function-004.html", + "css/css-transitions/transition-timing-function-004-manual.html", {} ] ], - "css/css-transitions/transition-timing-function-005.html": [ + "css/css-transitions/transition-timing-function-005-manual.html": [ [ - "css/css-transitions/transition-timing-function-005.html", + "css/css-transitions/transition-timing-function-005-manual.html", {} ] ], - "css/css-transitions/transition-timing-function-006.html": [ + "css/css-transitions/transition-timing-function-006-manual.html": [ [ - "css/css-transitions/transition-timing-function-006.html", + "css/css-transitions/transition-timing-function-006-manual.html", {} ] ], - "css/css-transitions/transition-timing-function-007.html": [ + "css/css-transitions/transition-timing-function-010-manual.html": [ [ - "css/css-transitions/transition-timing-function-007.html", - {} - ] - ], - "css/css-transitions/transition-timing-function-008.html": [ - [ - "css/css-transitions/transition-timing-function-008.html", - {} - ] - ], - "css/css-transitions/transition-timing-function-009.html": [ - [ - "css/css-transitions/transition-timing-function-009.html", - {} - ] - ], - "css/css-transitions/transition-timing-function-010.html": [ - [ - "css/css-transitions/transition-timing-function-010.html", - {} - ] - ], - "css/css-transitions/transition-timing-function-011.html": [ - [ - "css/css-transitions/transition-timing-function-011.html", - {} - ] - ], - "css/css-transitions/transition-timing-function-012.html": [ - [ - "css/css-transitions/transition-timing-function-012.html", - {} - ] - ], - "css/css-transitions/transition-timing-function-013.html": [ - [ - "css/css-transitions/transition-timing-function-013.html", + "css/css-transitions/transition-timing-function-010-manual.html", {} ] ], @@ -49533,6 +49497,18 @@ {} ] ], + "css/CSS2/floats/negative-margin-float-positioning.html": [ + [ + "css/CSS2/floats/negative-margin-float-positioning.html", + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], "css/CSS2/floats/new-fc-beside-adjoining-float-2.html": [ [ "css/CSS2/floats/new-fc-beside-adjoining-float-2.html", @@ -49557,6 +49533,30 @@ {} ] ], + "css/CSS2/floats/new-fc-beside-float-with-margin-rtl.html": [ + [ + "css/CSS2/floats/new-fc-beside-float-with-margin-rtl.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/CSS2/floats/new-fc-beside-float-with-margin.html": [ + [ + "css/CSS2/floats/new-fc-beside-float-with-margin.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/CSS2/floats/new-fc-relayout.html": [ [ "css/CSS2/floats/new-fc-relayout.html", @@ -49641,9 +49641,9 @@ {} ] ], - "css/CSS2/floats/zero-width-floats-positioning.html": [ + "css/CSS2/floats/zero-width-floats-positioning.tentative.html": [ [ - "css/CSS2/floats/zero-width-floats-positioning.html", + "css/CSS2/floats/zero-width-floats-positioning.tentative.html", [ [ "/css/reference/ref-filled-green-100px-square-only.html", @@ -110169,6 +110169,18 @@ {} ] ], + "css/css-cascade/all-prop-initial-visited.html": [ + [ + "css/css-cascade/all-prop-initial-visited.html", + [ + [ + "/css/css-cascade/all-prop-initial-visited-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-cascade/important-prop.html": [ [ "css/css-cascade/important-prop.html", @@ -118821,6 +118833,18 @@ {} ] ], + "css/css-flexbox/flex-minimum-height-flex-items-019.html": [ + [ + "css/css-flexbox/flex-minimum-height-flex-items-019.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/css-flexbox/flex-minimum-width-flex-items-001.xht": [ [ "css/css-flexbox/flex-minimum-width-flex-items-001.xht", @@ -126043,6 +126067,294 @@ {} ] ], + "css/css-grid/grid-items/grid-items-percentage-margins-003.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-003.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-004.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-004.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-005.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-005.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-006.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-006.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-007.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-007.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-008.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-008.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-009.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-009.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-010.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-010.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-011.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-011.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-012.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-012.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-013.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-013.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-margins-014.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-margins-014.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-003.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-003.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-004.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-004.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-005.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-005.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-006.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-006.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-007.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-007.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-008.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-008.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-009.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-009.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-010.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-010.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-011.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-011.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-012.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-012.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-013.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-013.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-014.html": [ + [ + "css/css-grid/grid-items/grid-items-percentage-paddings-014.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/css-grid/grid-items/grid-items-sizing-alignment-001.html": [ [ "css/css-grid/grid-items/grid-items-sizing-alignment-001.html", @@ -164779,6 +165091,18 @@ {} ] ], + "css/css-values/min-max-percentage-length-interpolation.html": [ + [ + "css/css-values/min-max-percentage-length-interpolation.html", + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], "css/css-values/q-unit-case-insensitivity-001.html": [ [ "css/css-values/q-unit-case-insensitivity-001.html", @@ -199601,6 +199925,18 @@ {} ] ], + "html/rendering/non-replaced-elements/tables/table-column-width.html": [ + [ + "html/rendering/non-replaced-elements/tables/table-column-width.html", + [ + [ + "/html/rendering/non-replaced-elements/tables/table-column-width-ref.html", + "==" + ] + ], + {} + ] + ], "html/rendering/non-replaced-elements/tables/table-direction.html": [ [ "html/rendering/non-replaced-elements/tables/table-direction.html", @@ -242631,6 +242967,9 @@ "css/css-cascade/all-prop-001-ref.html": [ [] ], + "css/css-cascade/all-prop-initial-visited-ref.html": [ + [] + ], "css/css-cascade/important-prop-ref.html": [ [] ], @@ -270114,6 +270453,9 @@ "html/rendering/non-replaced-elements/tables/table-cell-width-ref.html": [ [] ], + "html/rendering/non-replaced-elements/tables/table-column-width-ref.html": [ + [] + ], "html/rendering/non-replaced-elements/tables/table-direction-ref.html": [ [] ], @@ -272736,6 +273078,9 @@ "infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini": [ [] ], + "infrastructure/metadata/infrastructure/expected-fail/unhandled-rejection.html.ini": [ + [] + ], "infrastructure/metadata/infrastructure/reftest/reftest_and_fail.html.ini": [ [] ], @@ -273285,6 +273630,12 @@ "interfaces/webvtt.idl": [ [] ], + "interfaces/webxr-ar-module.idl": [ + [] + ], + "interfaces/webxr-gamepads-module.idl": [ + [] + ], "interfaces/webxr.idl": [ [] ], @@ -273303,6 +273654,9 @@ "intersection-observer/observer-in-iframe.html": [ [] ], + "intersection-observer/resources/cross-origin-child-iframe.sub.html": [ + [] + ], "intersection-observer/resources/cross-origin-subframe.html": [ [] ], @@ -273315,6 +273669,9 @@ "intersection-observer/resources/observer-in-iframe-subframe.html": [ [] ], + "intersection-observer/resources/same-origin-grand-child-iframe.html": [ + [] + ], "intersection-observer/resources/scaled-target-subframe.html": [ [] ], @@ -274785,9 +275142,27 @@ "native-file-system/README.md": [ [] ], + "native-file-system/resources/native-fs-test-helpers.js": [ + [] + ], + "native-file-system/resources/sandboxed-fs-test-helpers.js": [ + [] + ], "native-file-system/resources/test-helpers.js": [ [] ], + "native-file-system/script-tests/FileSystemDirectoryHandle-getDirectory.js": [ + [] + ], + "native-file-system/script-tests/FileSystemDirectoryHandle-getFile.js": [ + [] + ], + "native-file-system/script-tests/FileSystemDirectoryHandle-removeEntry.js": [ + [] + ], + "native-file-system/script-tests/FileSystemWriter.js": [ + [] + ], "navigation-timing/META.yml": [ [] ], @@ -275118,6 +275493,9 @@ "permissions/META.yml": [ [] ], + "permissions/feature-policy-permissions-query.html": [ + [] + ], "picture-in-picture/META.yml": [ [] ], @@ -275238,6 +275616,9 @@ "portals/resources/portal-post-message-portal.html": [ [] ], + "portals/resources/portal-repeated-activate-window.html": [ + [] + ], "portals/resources/portals-adopt-predecessor-portal.html": [ [] ], @@ -275253,6 +275634,9 @@ "portals/resources/postmessage-referrer.sub.html": [ [] ], + "portals/resources/simple-portal-adopts-and-activates-predecessor.html": [ + [] + ], "portals/resources/simple-portal-adopts-predecessor.html": [ [] ], @@ -278052,6 +278436,9 @@ "resources/test/tests/unit/test-return-restrictions.html": [ [] ], + "resources/test/tests/unit/throwing-assertions.html": [ + [] + ], "resources/test/tests/unit/unpaired-surrogates.html": [ [] ], @@ -288510,12 +288897,6 @@ "workers/semantics/encodings/004.js": [ [] ], - "workers/semantics/interface-objects/003.js": [ - [] - ], - "workers/semantics/interface-objects/004.js": [ - [] - ], "workers/semantics/multiple-workers/001.js": [ [] ], @@ -312557,6 +312938,12 @@ {} ] ], + "css/css-animations/parsing/animation-invalid.html": [ + [ + "css/css-animations/parsing/animation-invalid.html", + {} + ] + ], "css/css-animations/parsing/animation-iteration-count-computed.html": [ [ "css/css-animations/parsing/animation-iteration-count-computed.html", @@ -312611,6 +312998,12 @@ {} ] ], + "css/css-animations/parsing/animation-shorthand.html": [ + [ + "css/css-animations/parsing/animation-shorthand.html", + {} + ] + ], "css/css-animations/parsing/animation-timing-function-computed.html": [ [ "css/css-animations/parsing/animation-timing-function-computed.html", @@ -312629,6 +313022,12 @@ {} ] ], + "css/css-animations/parsing/animation-valid.html": [ + [ + "css/css-animations/parsing/animation-valid.html", + {} + ] + ], "css/css-animations/pending-style-changes-001.html": [ [ "css/css-animations/pending-style-changes-001.html", @@ -312995,6 +313394,12 @@ {} ] ], + "css/css-backgrounds/parsing/border-color-shorthand.html": [ + [ + "css/css-backgrounds/parsing/border-color-shorthand.html", + {} + ] + ], "css/css-backgrounds/parsing/border-color-valid.html": [ [ "css/css-backgrounds/parsing/border-color-valid.html", @@ -313043,6 +313448,12 @@ {} ] ], + "css/css-backgrounds/parsing/border-image-shorthand.sub.html": [ + [ + "css/css-backgrounds/parsing/border-image-shorthand.sub.html", + {} + ] + ], "css/css-backgrounds/parsing/border-image-slice-computed.html": [ [ "css/css-backgrounds/parsing/border-image-slice-computed.html", @@ -313127,6 +313538,12 @@ {} ] ], + "css/css-backgrounds/parsing/border-shorthand.html": [ + [ + "css/css-backgrounds/parsing/border-shorthand.html", + {} + ] + ], "css/css-backgrounds/parsing/border-style-computed.html": [ [ "css/css-backgrounds/parsing/border-style-computed.html", @@ -313139,6 +313556,12 @@ {} ] ], + "css/css-backgrounds/parsing/border-style-shorthand.html": [ + [ + "css/css-backgrounds/parsing/border-style-shorthand.html", + {} + ] + ], "css/css-backgrounds/parsing/border-style-valid.html": [ [ "css/css-backgrounds/parsing/border-style-valid.html", @@ -313163,6 +313586,12 @@ {} ] ], + "css/css-backgrounds/parsing/border-width-shorthand.html": [ + [ + "css/css-backgrounds/parsing/border-width-shorthand.html", + {} + ] + ], "css/css-backgrounds/parsing/border-width-valid.html": [ [ "css/css-backgrounds/parsing/border-width-valid.html", @@ -313265,6 +313694,12 @@ {} ] ], + "css/css-box/parsing/margin-shorthand.html": [ + [ + "css/css-box/parsing/margin-shorthand.html", + {} + ] + ], "css/css-box/parsing/margin-valid.html": [ [ "css/css-box/parsing/margin-valid.html", @@ -313343,6 +313778,12 @@ {} ] ], + "css/css-box/parsing/padding-shorthand.html": [ + [ + "css/css-box/parsing/padding-shorthand.html", + {} + ] + ], "css/css-box/parsing/padding-valid.html": [ [ "css/css-box/parsing/padding-valid.html", @@ -313723,6 +314164,12 @@ {} ] ], + "css/css-content/inheritance.html": [ + [ + "css/css-content/inheritance.html", + {} + ] + ], "css/css-counter-styles/idlharness.html": [ [ "css/css-counter-styles/idlharness.html", @@ -314521,6 +314968,12 @@ {} ] ], + "css/css-flexbox/parsing/flex-flow-shorthand.html": [ + [ + "css/css-flexbox/parsing/flex-flow-shorthand.html", + {} + ] + ], "css/css-flexbox/parsing/flex-flow-valid.html": [ [ "css/css-flexbox/parsing/flex-flow-valid.html", @@ -314551,6 +315004,12 @@ {} ] ], + "css/css-flexbox/parsing/flex-shorthand.html": [ + [ + "css/css-flexbox/parsing/flex-shorthand.html", + {} + ] + ], "css/css-flexbox/parsing/flex-shrink-computed.html": [ [ "css/css-flexbox/parsing/flex-shrink-computed.html", @@ -316859,6 +317318,12 @@ {} ] ], + "css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html": [ + [ + "css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html", + {} + ] + ], "css/css-grid/grid-items/grid-item-min-auto-size-001.html": [ [ "css/css-grid/grid-items/grid-item-min-auto-size-001.html", @@ -317171,6 +317636,12 @@ {} ] ], + "css/css-grid/parsing/grid-area-shorthand.html": [ + [ + "css/css-grid/parsing/grid-area-shorthand.html", + {} + ] + ], "css/css-grid/parsing/grid-area-valid.html": [ [ "css/css-grid/parsing/grid-area-valid.html", @@ -317273,6 +317744,12 @@ {} ] ], + "css/css-grid/parsing/grid-template-shorthand.html": [ + [ + "css/css-grid/parsing/grid-template-shorthand.html", + {} + ] + ], "css/css-grid/placement/grid-auto-placement-implicit-tracks-001.html": [ [ "css/css-grid/placement/grid-auto-placement-implicit-tracks-001.html", @@ -317675,6 +318152,12 @@ {} ] ], + "css/css-lists/parsing/list-style-shorthand.sub.html": [ + [ + "css/css-lists/parsing/list-style-shorthand.sub.html", + {} + ] + ], "css/css-lists/parsing/list-style-type-computed.html": [ [ "css/css-lists/parsing/list-style-type-computed.html", @@ -318011,6 +318494,12 @@ {} ] ], + "css/css-logical/parsing/inset-shorthand.html": [ + [ + "css/css-logical/parsing/inset-shorthand.html", + {} + ] + ], "css/css-logical/parsing/inset-valid.html": [ [ "css/css-logical/parsing/inset-valid.html", @@ -321851,6 +322340,12 @@ {} ] ], + "css/css-text-decor/parsing/text-decoration-shorthand.html": [ + [ + "css/css-text-decor/parsing/text-decoration-shorthand.html", + {} + ] + ], "css/css-text-decor/parsing/text-decoration-skip-ink-computed.html": [ [ "css/css-text-decor/parsing/text-decoration-skip-ink-computed.html", @@ -324245,6 +324740,12 @@ {} ] ], + "css/css-transitions/parsing/transition-invalid.html": [ + [ + "css/css-transitions/parsing/transition-invalid.html", + {} + ] + ], "css/css-transitions/parsing/transition-property-computed.html": [ [ "css/css-transitions/parsing/transition-property-computed.html", @@ -324263,6 +324764,12 @@ {} ] ], + "css/css-transitions/parsing/transition-shorthand.html": [ + [ + "css/css-transitions/parsing/transition-shorthand.html", + {} + ] + ], "css/css-transitions/parsing/transition-timing-function-computed.html": [ [ "css/css-transitions/parsing/transition-timing-function-computed.html", @@ -324281,6 +324788,12 @@ {} ] ], + "css/css-transitions/parsing/transition-valid.html": [ + [ + "css/css-transitions/parsing/transition-valid.html", + {} + ] + ], "css/css-transitions/properties-value-001.html": [ [ "css/css-transitions/properties-value-001.html", @@ -324399,12 +324912,6 @@ {} ] ], - "css/css-transitions/transition-timing-function-001.html": [ - [ - "css/css-transitions/transition-timing-function-001.html", - {} - ] - ], "css/css-transitions/transitioncancel-001.html": [ [ "css/css-transitions/transitioncancel-001.html", @@ -326639,6 +327146,12 @@ {} ] ], + "css/css-ui/parsing/outline-shorthand.html": [ + [ + "css/css-ui/parsing/outline-shorthand.html", + {} + ] + ], "css/css-ui/parsing/outline-style-computed.html": [ [ "css/css-ui/parsing/outline-style-computed.html", @@ -326885,6 +327398,24 @@ {} ] ], + "css/css-values/clamp-length-computed.html": [ + [ + "css/css-values/clamp-length-computed.html", + {} + ] + ], + "css/css-values/clamp-length-invalid.html": [ + [ + "css/css-values/clamp-length-invalid.html", + {} + ] + ], + "css/css-values/clamp-length-serialize.html": [ + [ + "css/css-values/clamp-length-serialize.html", + {} + ] + ], "css/css-values/getComputedStyle-border-radius-001.html": [ [ "css/css-values/getComputedStyle-border-radius-001.html", @@ -329337,12 +329868,24 @@ {} ] ], + "css/mediaqueries/aspect-ratio-serialization.html": [ + [ + "css/mediaqueries/aspect-ratio-serialization.html", + {} + ] + ], "css/mediaqueries/forced-colors.html": [ [ "css/mediaqueries/forced-colors.html", {} ] ], + "css/mediaqueries/navigation-controls.tentative.html": [ + [ + "css/mediaqueries/navigation-controls.tentative.html", + {} + ] + ], "css/mediaqueries/prefers-color-scheme.html": [ [ "css/mediaqueries/prefers-color-scheme.html", @@ -331994,6 +332537,12 @@ {} ] ], + "dom/nodes/MutationObserver-sanity.html": [ + [ + "dom/nodes/MutationObserver-sanity.html", + {} + ] + ], "dom/nodes/MutationObserver-takeRecords.html": [ [ "dom/nodes/MutationObserver-takeRecords.html", @@ -347579,6 +348128,14 @@ {} ] ], + "fetch/sec-metadata/portal.tentative.https.sub.html": [ + [ + "fetch/sec-metadata/portal.tentative.https.sub.html", + { + "testdriver": true + } + ] + ], "fetch/sec-metadata/prefetch.tentative.https.sub.html": [ [ "fetch/sec-metadata/prefetch.tentative.https.sub.html", @@ -352169,6 +352726,12 @@ {} ] ], + "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-aspect-ratio.html": [ + [ + "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-aspect-ratio.html", + {} + ] + ], "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-aspect-ratio.tentative.html": [ [ "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-aspect-ratio.tentative.html", @@ -352187,6 +352750,12 @@ {} ] ], + "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-aspect-ratio.html": [ + [ + "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-aspect-ratio.html", + {} + ] + ], "html/rendering/replaced-elements/svg-embedded-sizing/svg-in-iframe-auto.html": [ [ "html/rendering/replaced-elements/svg-embedded-sizing/svg-in-iframe-auto.html", @@ -353475,6 +354044,12 @@ {} ] ], + "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-different-load.html": [ + [ + "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-different-load.html", + {} + ] + ], "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html": [ [ "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html", @@ -363384,6 +363959,12 @@ {} ] ], + "infrastructure/expected-fail/unhandled-rejection.html": [ + [ + "infrastructure/expected-fail/unhandled-rejection.html", + {} + ] + ], "infrastructure/server/context.any.js": [ [ "infrastructure/server/context.any.html", @@ -363972,6 +364553,12 @@ {} ] ], + "intersection-observer/same-origin-grand-child-iframe.sub.html": [ + [ + "intersection-observer/same-origin-grand-child-iframe.sub.html", + {} + ] + ], "intersection-observer/shadow-content.html": [ [ "intersection-observer/shadow-content.html", @@ -369099,53 +369686,261 @@ } ] ], - "native-file-system/FileSystemBaseHandle-remove.tentative.https.window.js": [ + "native-file-system/native_FileSystemDirectoryHandle-getDirectory.tentative.https.manual.window.js": [ [ - "native-file-system/FileSystemBaseHandle-remove.tentative.https.window.html", + "native-file-system/native_FileSystemDirectoryHandle-getDirectory.tentative.https.manual.window.html", { "script_metadata": [ [ "script", + "/resources/testdriver.js" + ], + [ + "script", "resources/test-helpers.js" + ], + [ + "script", + "resources/native-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-getDirectory.js" ] ] } ] ], - "native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.https.window.js": [ + "native-file-system/native_FileSystemDirectoryHandle-getFile.tentative.https.manual.window.js": [ [ - "native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.https.window.html", + "native-file-system/native_FileSystemDirectoryHandle-getFile.tentative.https.manual.window.html", { "script_metadata": [ [ "script", + "/resources/testdriver.js" + ], + [ + "script", "resources/test-helpers.js" + ], + [ + "script", + "resources/native-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-getFile.js" ] ] } ] ], - "native-file-system/FileSystemDirectoryHandle-getFile.tentative.https.window.js": [ + "native-file-system/native_FileSystemDirectoryHandle-removeEntry.tentative.https.manual.window.js": [ [ - "native-file-system/FileSystemDirectoryHandle-getFile.tentative.https.window.html", + "native-file-system/native_FileSystemDirectoryHandle-removeEntry.tentative.https.manual.window.html", { "script_metadata": [ [ "script", + "/resources/testdriver.js" + ], + [ + "script", "resources/test-helpers.js" + ], + [ + "script", + "resources/native-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-removeEntry.js" + ] + ] + } + ] + ], + "native-file-system/native_FileSystemWriter.tentative.https.manual.window.js": [ + [ + "native-file-system/native_FileSystemWriter.tentative.https.manual.window.html", + { + "script_metadata": [ + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/native-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemWriter.js" ] ] } ] ], - "native-file-system/FileSystemWriter.tentative.https.window.js": [ + "native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectory.tentative.https.any.js": [ + [ + "native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectory.tentative.https.any.html", + { + "script_metadata": [ + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-getDirectory.js" + ] + ] + } + ], [ - "native-file-system/FileSystemWriter.tentative.https.window.html", + "native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectory.tentative.https.any.worker.html", { "script_metadata": [ [ "script", "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-getDirectory.js" + ] + ] + } + ] + ], + "native-file-system/sandboxed_FileSystemDirectoryHandle-getFile.tentative.https.any.js": [ + [ + "native-file-system/sandboxed_FileSystemDirectoryHandle-getFile.tentative.https.any.html", + { + "script_metadata": [ + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-getFile.js" + ] + ] + } + ], + [ + "native-file-system/sandboxed_FileSystemDirectoryHandle-getFile.tentative.https.any.worker.html", + { + "script_metadata": [ + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-getFile.js" + ] + ] + } + ] + ], + "native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.tentative.https.any.js": [ + [ + "native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.tentative.https.any.html", + { + "script_metadata": [ + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-removeEntry.js" + ] + ] + } + ], + [ + "native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.tentative.https.any.worker.html", + { + "script_metadata": [ + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemDirectoryHandle-removeEntry.js" + ] + ] + } + ] + ], + "native-file-system/sandboxed_FileSystemWriter.tentative.https.any.js": [ + [ + "native-file-system/sandboxed_FileSystemWriter.tentative.https.any.html", + { + "script_metadata": [ + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemWriter.js" + ] + ] + } + ], + [ + "native-file-system/sandboxed_FileSystemWriter.tentative.https.any.worker.html", + { + "script_metadata": [ + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemWriter.js" ] ] } @@ -380469,6 +381264,12 @@ } ] ], + "permissions/permissions-query-feature-policy-attribute.https.sub.html": [ + [ + "permissions/permissions-query-feature-policy-attribute.https.sub.html", + {} + ] + ], "permissions/test-background-fetch-permission.html": [ [ "permissions/test-background-fetch-permission.html", @@ -381472,6 +382273,12 @@ {} ] ], + "portals/portals-repeated-activate.html": [ + [ + "portals/portals-repeated-activate.html", + {} + ] + ], "portals/portals-set-src-after-activate.html": [ [ "portals/portals-set-src-after-activate.html", @@ -396572,6 +397379,14 @@ } ] ], + "shadow-dom/focus/focus-selector-delegatesFocus.html": [ + [ + "shadow-dom/focus/focus-selector-delegatesFocus.html", + { + "testdriver": true + } + ] + ], "shadow-dom/focus/focus-tabindex-order-shadow-negative.html": [ [ "shadow-dom/focus/focus-tabindex-order-shadow-negative.html", @@ -403611,6 +404426,12 @@ {} ] ], + "svg/animations/keysplines-x-limits.html": [ + [ + "svg/animations/keysplines-x-limits.html", + {} + ] + ], "svg/animations/multiple-animations-ending.html": [ [ "svg/animations/multiple-animations-ending.html", @@ -418710,6 +419531,23 @@ {} ] ], + "webxr/ar-module/idlharness.https.window.js": [ + [ + "webxr/ar-module/idlharness.https.window.html", + { + "script_metadata": [ + [ + "script", + "/resources/WebIDLParser.js" + ], + [ + "script", + "/resources/idlharness.js" + ] + ] + } + ] + ], "webxr/events_input_source_recreation.https.html": [ [ "webxr/events_input_source_recreation.https.html", @@ -418746,6 +419584,23 @@ {} ] ], + "webxr/gamepads-module/idlharness.https.window.js": [ + [ + "webxr/gamepads-module/idlharness.https.window.html", + { + "script_metadata": [ + [ + "script", + "/resources/WebIDLParser.js" + ], + [ + "script", + "/resources/idlharness.js" + ] + ] + } + ] + ], "webxr/getInputPose_handedness.https.html": [ [ "webxr/getInputPose_handedness.https.html", @@ -420819,16 +421674,30 @@ {} ] ], - "workers/semantics/interface-objects/003.html": [ + "workers/semantics/interface-objects/003.any.js": [ [ - "workers/semantics/interface-objects/003.html", - {} + "workers/semantics/interface-objects/003.any.sharedworker.html", + { + "script_metadata": [ + [ + "global", + "!default,sharedworker" + ] + ] + } ] ], - "workers/semantics/interface-objects/004.html": [ + "workers/semantics/interface-objects/004.any.js": [ [ - "workers/semantics/interface-objects/004.html", - {} + "workers/semantics/interface-objects/004.any.sharedworker.html", + { + "script_metadata": [ + [ + "global", + "!default,sharedworker" + ] + ] + } ] ], "workers/semantics/multiple-workers/001.html": [ @@ -444724,15 +445593,15 @@ "support" ], ".github/workflows/pull_request.yml": [ - "9d288c0c9209904091a9b66b9334929aee02c3c7", + "81a53c67f4b11ca3c7ddde916dcebb35cf83a021", "support" ], ".github/workflows/push-build-publish-documentation-website.yml": [ - "167e0d930f4da142ffab22b8c685119495c52702", + "f6a1401a3dd161168d3869dd143527969e8300c1", "support" ], ".github/workflows/push-build-release-manifest.yml": [ - "af677454fdd2cf692929c68ef80bcfe8fb52b69f", + "baa06cc14fd4e6859f76f63b2c3962897d1b9837", "support" ], ".gitignore": [ @@ -444748,7 +445617,7 @@ "support" ], ".taskcluster.yml": [ - "dfe3b36e3a52192ed23b5a6788fddf728e20ff35", + "61cc38c9bd1d051b5ad18d59de0f9febd1b3f2a2", "support" ], ".well-known/README.md": [ @@ -447244,7 +448113,7 @@ "testharness" ], "2dcontext/imagebitmap/createImageBitmap-invalid-args.html": [ - "004b3ca6bf39eb7613d2621c8a431df5ab52278b", + "c64371eaa8c7940a78ff064b5cffac575607d230", "testharness" ], "2dcontext/imagebitmap/createImageBitmap-origin.sub.html": [ @@ -449524,15 +450393,15 @@ "testharness" ], "IndexedDB/fire-error-event-exception.html": [ - "fe0dc182567af2a48b4be82d809b97baf469fb3e", + "0a3f12265894f03adfb2b6577e5d35dbf0c89c5d", "testharness" ], "IndexedDB/fire-success-event-exception.html": [ - "c4e55066bbab9069e744c089f81df0714ad4db19", + "ab0ac44eb7c33ba5f62caa6dca49935c8296cf26", "testharness" ], "IndexedDB/fire-upgradeneeded-event-exception.html": [ - "5db452ebafe68a095f083b65a713ba3e0ad40cf5", + "1a8163a58b15606e2f00bc6439238c03267ce83b", "testharness" ], "IndexedDB/get-databases.any.js": [ @@ -450928,7 +451797,7 @@ "testharness" ], "IndexedDB/transaction-relaxed-durability.tentative.any.js": [ - "c6a6f37ba9e0b29dc17fe66e487920acf2c4ecc6", + "2ba96ec08edd3e35c85bef4712a94a9a75174624", "testharness" ], "IndexedDB/transaction-requestqueue.htm": [ @@ -499267,6 +500136,10 @@ "ae8783ce31303024152d3dc91dde3058b3beef0c", "testharness" ], + "css/CSS2/floats/negative-margin-float-positioning.html": [ + "8b4aef22f71f8695ebbc5b6dc83ad5639945618d", + "reftest" + ], "css/CSS2/floats/new-fc-beside-adjoining-float-2.html": [ "2d27a28a0533eece2ec6b1ee933028da8fb99c4f", "reftest" @@ -499275,6 +500148,14 @@ "91adbfce2d32ec1f46853b4af60b14c74468a842", "reftest" ], + "css/CSS2/floats/new-fc-beside-float-with-margin-rtl.html": [ + "5a564f7831c9c19ff7c464c676981c62a53c9a88", + "reftest" + ], + "css/CSS2/floats/new-fc-beside-float-with-margin.html": [ + "ead8e548be95df87220881a8e66e5f3a47c93f9b", + "reftest" + ], "css/CSS2/floats/new-fc-relayout.html": [ "97d8b9a2ff1f3be8aeab2c26817e7542511c59cb", "reftest" @@ -499323,8 +500204,8 @@ "4ac426fe6bee576a9a54c2ed2143c7829e901f23", "testharness" ], - "css/CSS2/floats/zero-width-floats-positioning.html": [ - "7f8e34daaef68356aa7b9fc4216cf918d93cc6cf", + "css/CSS2/floats/zero-width-floats-positioning.tentative.html": [ + "18f8f6e2046693faf5b46e107a2dd3fa3aca8558", "reftest" ], "css/CSS2/floats/zero-width-floats.html": [ @@ -540700,7 +541581,7 @@ "testharness" ], "css/css-animations/parsing/animation-delay-invalid.html": [ - "a58d2cd11bc572d3a7899fb70b8b04adbd76a713", + "52e42a2e2b67a0593f264b57d99b6e9034a835a3", "testharness" ], "css/css-animations/parsing/animation-delay-valid.html": [ @@ -540712,7 +541593,7 @@ "testharness" ], "css/css-animations/parsing/animation-direction-invalid.html": [ - "0b48d97f0a1bb670daec7335049aa486810a2cde", + "5c96216d045c665f2005feb2cae642aad5d7f6f6", "testharness" ], "css/css-animations/parsing/animation-direction-valid.html": [ @@ -540724,7 +541605,7 @@ "testharness" ], "css/css-animations/parsing/animation-duration-invalid.html": [ - "5edacd3735e4f3ac0c0724415b3ca0052f10d33b", + "bd8cf2adfe98954d43f3e4d3b7f839d6f59b0e96", "testharness" ], "css/css-animations/parsing/animation-duration-valid.html": [ @@ -540736,19 +541617,23 @@ "testharness" ], "css/css-animations/parsing/animation-fill-mode-invalid.html": [ - "dda2221f4746a64778ea4c5a82fa42c35243a342", + "2a82f2354639feb9abbba32b7159a0de1f1a18c4", "testharness" ], "css/css-animations/parsing/animation-fill-mode-valid.html": [ "1f73a821d15119d6a8fc2720d53f6cefdd29fb5d", "testharness" ], + "css/css-animations/parsing/animation-invalid.html": [ + "c5790a3fafa4cbdb73126c98596506e3ed796310", + "testharness" + ], "css/css-animations/parsing/animation-iteration-count-computed.html": [ "0ac53aa65184020b65669807c699ef6c55362af2", "testharness" ], "css/css-animations/parsing/animation-iteration-count-invalid.html": [ - "ff1e8e23a08cf58c08922eb40145e916852c0562", + "621340f7c3d87b7edb19a3db94e9dc759014d7c8", "testharness" ], "css/css-animations/parsing/animation-iteration-count-valid.html": [ @@ -540772,25 +541657,33 @@ "testharness" ], "css/css-animations/parsing/animation-play-state-invalid.html": [ - "f47a2f75ddfc35a279037ada8df34077bd1308ab", + "91a6f017370a7cf6089d610e2666f64c61a8c98f", "testharness" ], "css/css-animations/parsing/animation-play-state-valid.html": [ "ce6d053ec2736ec8d5e8420b3d1a1e4f07fd04ed", "testharness" ], + "css/css-animations/parsing/animation-shorthand.html": [ + "2e3053e7afcc6eaa7cd2b3912b37b80295ea426d", + "testharness" + ], "css/css-animations/parsing/animation-timing-function-computed.html": [ "99bc12ccaa8f24ae5db06cfd0d78d3bd0c015bef", "testharness" ], "css/css-animations/parsing/animation-timing-function-invalid.html": [ - "adc1cc10e39d09df78c4398ffca008739d751076", + "621145b0e004c583d4a0131eb10d4875fe17da3b", "testharness" ], "css/css-animations/parsing/animation-timing-function-valid.html": [ "7ab823ea1da1535606ac4aad30fb21f423ba6703", "testharness" ], + "css/css-animations/parsing/animation-valid.html": [ + "65de3c6fcfed3f69fa798fa19425bdc054e0700b", + "testharness" + ], "css/css-animations/pending-style-changes-001.html": [ "fb74d7fa7d062d60153d47913df9eb2b0c7267c8", "testharness" @@ -540836,7 +541729,7 @@ "testharness" ], "css/css-backgrounds/animations/border-image-outset-interpolation.html": [ - "d4726e87d119462a703cc7ac504e8025f3874680", + "aebadbbafb236a090aa543ecf82e5661bee7de74", "testharness" ], "css/css-backgrounds/animations/border-image-slice-interpolation.html": [ @@ -543779,6 +544672,10 @@ "6e4d28e7983d62979f4dad843c007b964db00706", "testharness" ], + "css/css-backgrounds/parsing/border-color-shorthand.html": [ + "012567830eaea7eaf65b33539c0f207639b94c24", + "testharness" + ], "css/css-backgrounds/parsing/border-color-valid.html": [ "a4cd7748ac207427812235e9868012b1a193641c", "testharness" @@ -543811,6 +544708,10 @@ "f90ef71191e48ee399eac37cea9c356faaa486f5", "testharness" ], + "css/css-backgrounds/parsing/border-image-shorthand.sub.html": [ + "37fb998d6c2a5ee15fb8d8dd99cfd8942c7372eb", + "testharness" + ], "css/css-backgrounds/parsing/border-image-slice-computed.html": [ "bfc8714d9838b5966cb90119391631538a632e2f", "testharness" @@ -543840,7 +544741,7 @@ "testharness" ], "css/css-backgrounds/parsing/border-image-width-computed.html": [ - "98e5616a22847c0536b25d8a96393aafa9c0a913", + "2c36eda8c785337eae8f3f3eefb2bf92e29b82a0", "testharness" ], "css/css-backgrounds/parsing/border-image-width-invalid.html": [ @@ -543852,7 +544753,7 @@ "testharness" ], "css/css-backgrounds/parsing/border-invalid.html": [ - "71404f2ce3e18fe336f076ce72ad028c4f665861", + "870e741f445e17d7408475aad41a7dc06c5a02cf", "testharness" ], "css/css-backgrounds/parsing/border-radius-computed.html": [ @@ -543867,6 +544768,10 @@ "738362f96933c34fae38e6adfa9a82a556fc1f3b", "testharness" ], + "css/css-backgrounds/parsing/border-shorthand.html": [ + "30491a534ec65abd673a80a278c3f6aa47f82220", + "testharness" + ], "css/css-backgrounds/parsing/border-style-computed.html": [ "e890be11289fa057b1d543f16e8b215f389a6a71", "testharness" @@ -543875,12 +544780,16 @@ "27fa45116fd150d69a77850f837ee43f7032c601", "testharness" ], + "css/css-backgrounds/parsing/border-style-shorthand.html": [ + "b85804e287e669fc69a27249270cbb9704216561", + "testharness" + ], "css/css-backgrounds/parsing/border-style-valid.html": [ "0b592180280ce6c8eb87567e1c39f197353365c3", "testharness" ], "css/css-backgrounds/parsing/border-valid.html": [ - "37b876ce4e97b2aa2ae08cb3447d42a658fcf56d", + "8c52b428ba93bb81817336f3eddba61a6fff6cce", "testharness" ], "css/css-backgrounds/parsing/border-width-computed.html": [ @@ -543891,6 +544800,10 @@ "ec7eb72a9ac404a59390b9c89f7ae710f6620412", "testharness" ], + "css/css-backgrounds/parsing/border-width-shorthand.html": [ + "07461bc94d96aa39f82d58f3fbc9237072070226", + "testharness" + ], "css/css-backgrounds/parsing/border-width-valid.html": [ "552416df3d2fe1a08aeb8145c5d263770543aa5e", "testharness" @@ -544603,6 +545516,10 @@ "77009170938d9634497f73bc21501ced502c7008", "testharness" ], + "css/css-box/parsing/margin-shorthand.html": [ + "293927983e504a3227335944ab05f966d51cccd6", + "testharness" + ], "css/css-box/parsing/margin-valid.html": [ "154aa2de7cb16ca0845f8368e731ec5c941108cb", "testharness" @@ -544655,6 +545572,10 @@ "3e3a560c2f71877494577f9dbc5c2eecfbab8a62", "testharness" ], + "css/css-box/parsing/padding-shorthand.html": [ + "dc0139dc47a70688cd8667e6069b4ba5654b7b1c", + "testharness" + ], "css/css-box/parsing/padding-valid.html": [ "0d3d51e86bb015dd5720041cdae671a29a74c77b", "testharness" @@ -544859,6 +545780,14 @@ "f68b7c046d9d22994dbc78c722b5004f1253027f", "reftest" ], + "css/css-cascade/all-prop-initial-visited-ref.html": [ + "f596b559b0e26b9c03d47b7dcab966a4d091308b", + "support" + ], + "css/css-cascade/all-prop-initial-visited.html": [ + "6fb7936652a77dade7d5e72032064b67d2886637", + "reftest" + ], "css/css-cascade/all-prop-initial-xml.html": [ "a04956a52d1f120583c26a462356ba8e47ac1277", "testharness" @@ -547007,6 +547936,10 @@ "a78e9f713b2428763ed4244aae1b6269a15d6637", "reftest" ], + "css/css-content/inheritance.html": [ + "a3242556fdcb4d5fea0d4d28fba6067ed02b340c", + "testharness" + ], "css/css-content/pseudo-element-inline-box-ref.html": [ "8294ae672d15643b1d8eeb8c9914fa93fe4e879a", "support" @@ -550215,6 +551148,10 @@ "983cac476e83ae97355cc6ad3fc55c6f732a6bf2", "reftest" ], + "css/css-flexbox/flex-minimum-height-flex-items-019.html": [ + "3572a6cc88e50ade3a8f7faff5a343bc84d9f581", + "reftest" + ], "css/css-flexbox/flex-minimum-width-flex-items-001.xht": [ "cd18483ba414160c46e30bc282dec0c2fcd2f418", "reftest" @@ -552347,6 +553284,10 @@ "e82c284632dd5b3babbd3979958874013bf3b9aa", "testharness" ], + "css/css-flexbox/parsing/flex-flow-shorthand.html": [ + "6ae19bdc044dd31b11448e407204accfb0340632", + "testharness" + ], "css/css-flexbox/parsing/flex-flow-valid.html": [ "01acd435096db60d214a0b07cb24fccdfded9c93", "testharness" @@ -552367,6 +553308,10 @@ "ae010d7b4b4540f6591c1ad42f1c89753a71afc6", "testharness" ], + "css/css-flexbox/parsing/flex-shorthand.html": [ + "51e01794154edbe475e57d2ca6fb93de65dea8bd", + "testharness" + ], "css/css-flexbox/parsing/flex-shrink-computed.html": [ "69a6d8c52b61f162f9c7333f53ed44145e51913f", "testharness" @@ -552424,7 +553369,7 @@ "reftest" ], "css/css-flexbox/percentage-heights-003.html": [ - "9d434cf7cb8ba2023c126391032985d3d3b7c5d9", + "c27af532169a349be42379ab9949afec15b47ae2", "testharness" ], "css/css-flexbox/percentage-heights-004-ref.html": [ @@ -562919,6 +563864,10 @@ "b36fbb2bbc8ce403632769e1a098f9560e910221", "reftest" ], + "css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html": [ + "c4ced6b2a12e0f080d6df2fccc8f74270f45683c", + "testharness" + ], "css/css-grid/grid-items/grid-item-min-auto-size-001.html": [ "f50e9ef312418f4d3b737bd55b4a7e5c75f09230", "testharness" @@ -563027,6 +563976,54 @@ "e45530b2fd4a380ba62c3b42ba52157cec098a00", "testharness" ], + "css/css-grid/grid-items/grid-items-percentage-margins-003.html": [ + "03d5d7f2c499b00cda96b8235a11852998900259", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-004.html": [ + "52e6f3bf1a688af98bd28d68f8d7e0ddde3ebee5", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-005.html": [ + "9cff92d1aa0ccdf2aa2dd0c89b4bd626778d1214", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-006.html": [ + "04d30e3edfc9920fb22f645549b00497ba0241fb", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-007.html": [ + "2906fe0608704a1b8413fa7a24db140667254283", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-008.html": [ + "7bd2e0fc5f4f24b35ff37c61c0b20c1b2ab61571", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-009.html": [ + "70a6c231dc91b1b2f866e9cd4463860ce9f58c4f", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-010.html": [ + "34352f60020ec44e4d5f27344818bdb476de694e", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-011.html": [ + "36bd208df007332656acbb4b3ffb5aac86675c82", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-012.html": [ + "9cdc15337a936724b8ce157638544f4f9e35b65c", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-013.html": [ + "581415b828e6d54056fe94e5145e276e7e428352", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-margins-014.html": [ + "5766e60339a0d83568c93a7f750976dbb9955e6a", + "reftest" + ], "css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html": [ "aa0ff96985878c5f21d7e7a8175b1351e9841656", "testharness" @@ -563051,6 +564048,54 @@ "3175469fb08361398658ebcfabb553909aa9c080", "testharness" ], + "css/css-grid/grid-items/grid-items-percentage-paddings-003.html": [ + "d85a6c1abcfac6c2ecf6bfc1251ba41b58fbab89", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-004.html": [ + "26302daf2d606637930ea41971f3d6066f782a2b", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-005.html": [ + "151b604f9bb7c7defdb5edf558ed207777cc0903", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-006.html": [ + "bcbc7ced73a77ebfb1e2aa027383f868bf38fe87", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-007.html": [ + "d4cf80c18df05bf06406eccf8aefe7050ed4025f", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-008.html": [ + "38f766b5cfffcca21906203c8c3472dd1230b197", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-009.html": [ + "eb1d1f47f28c3daefd78e9e98881459f91c2046d", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-010.html": [ + "ecd430c68d41698b328341eb9d9e2daba2a7848c", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-011.html": [ + "e394ced4e6e52f3379428d3ad854bcab0b3cb38d", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-012.html": [ + "07b2d27b58173a84851c4836c85281efa818c2e4", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-013.html": [ + "9b6c2bfe0ad261358ff7657752bd3bc3dff0896d", + "reftest" + ], + "css/css-grid/grid-items/grid-items-percentage-paddings-014.html": [ + "9e67960913a25f0fe1cfe137ceca5d11ebf0b43f", + "reftest" + ], "css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html": [ "6ad624a0a262067eb6e3b0724989ab01ca04f6a1", "testharness" @@ -563667,6 +564712,10 @@ "b989322775eb7dbf273a3dc3fbb3d1af31f524ba", "testharness" ], + "css/css-grid/parsing/grid-area-shorthand.html": [ + "9a265502d5c0dfd1b2ebb7ed54b81514216af826", + "testharness" + ], "css/css-grid/parsing/grid-area-valid.html": [ "8e7d0d43d1cfac44935593892b67fdb40b179791", "testharness" @@ -563676,7 +564725,7 @@ "testharness" ], "css/css-grid/parsing/grid-auto-columns-invalid.html": [ - "40b6059a7e8b564a4aef5393a7be77cbaa1ff4a2", + "04e0fadf0df2824a499bede7f2fe80e410a29e1a", "testharness" ], "css/css-grid/parsing/grid-auto-columns-valid.html": [ @@ -563700,7 +564749,7 @@ "testharness" ], "css/css-grid/parsing/grid-auto-rows-invalid.html": [ - "4111e2563365579b3810c701a782df54dce3c61e", + "1b61479f3c2f51c23a3be59a7d90b179de1407ca", "testharness" ], "css/css-grid/parsing/grid-auto-rows-valid.html": [ @@ -563724,7 +564773,7 @@ "testharness" ], "css/css-grid/parsing/grid-template-columns-valid.html": [ - "85ac76a999aab5adf628a8e38f626fcae299d12f", + "6bf2e7bce63c88d028f5dea1bf3e7be8cab7775c", "testharness" ], "css/css-grid/parsing/grid-template-rows-invalid.html": [ @@ -563732,7 +564781,11 @@ "testharness" ], "css/css-grid/parsing/grid-template-rows-valid.html": [ - "ec8d64f79bacc1d7831e415768c2a76bf05607e0", + "2d3a1ed8045c3eef9982cffc3f95415518f560cb", + "testharness" + ], + "css/css-grid/parsing/grid-template-shorthand.html": [ + "b9165359a7250afab60463878b9beb8592424f58", "testharness" ], "css/css-grid/placement/grid-auto-placement-implicit-tracks-001.html": [ @@ -565559,6 +566612,10 @@ "ff0c8366bb988fafe72746837a330801ae2fe34b", "testharness" ], + "css/css-lists/parsing/list-style-shorthand.sub.html": [ + "140df208aab9e8c7811de14bd96b99bad7d89752", + "testharness" + ], "css/css-lists/parsing/list-style-type-computed.html": [ "21230f31b05058e23f004cfe1a53fa09835372af", "testharness" @@ -565803,6 +566860,10 @@ "604b801c76040a5058612fd19c75ee66107081ed", "testharness" ], + "css/css-logical/parsing/inset-shorthand.html": [ + "4557879129e006980d2775658aadece56458ba35", + "testharness" + ], "css/css-logical/parsing/inset-valid.html": [ "2d8f937f075b0d0fbde677e15266f47af5fec3f8", "testharness" @@ -574176,7 +575237,7 @@ "testharness" ], "css/css-scroll-snap/scroll-margin.html": [ - "c85232edf23876a1ab37d858c4d59940b183e01e", + "e6ce4ac49c01ff65823fd83ee6866a6019701f6e", "testharness" ], "css/css-scroll-snap/scroll-padding.html": [ @@ -577367,6 +578428,10 @@ "3dd2d0c834ec8c7340b093a4c7a1272fb35a8a26", "testharness" ], + "css/css-text-decor/parsing/text-decoration-shorthand.html": [ + "904313f0528de50541d88b3db89902bdbf721cfe", + "testharness" + ], "css/css-text-decor/parsing/text-decoration-skip-ink-computed.html": [ "0b4807cec08a818c07a3d3bcaefc2092ecca9c14", "testharness" @@ -589332,7 +590397,7 @@ "reftest" ], "css/css-transitions/AnimationEffect-getComputedTiming.tentative.html": [ - "4b6a28b5694f52103bcb6b383dbcd1ad6553cf3a", + "32c15f07a96a2a1cf99068e303f17296aa71e96e", "testharness" ], "css/css-transitions/CSSPseudoElement-getAnimations.tentative.html": [ @@ -589376,7 +590441,7 @@ "testharness" ], "css/css-transitions/KeyframeEffect-getKeyframes.tentative.html": [ - "08a90734392c2e14c0b2593144796e713ff0a20d", + "47b769b13a92971ccb02acd6ea61c1bda53f847f", "testharness" ], "css/css-transitions/KeyframeEffect-target.tentative.html": [ @@ -589484,7 +590549,7 @@ "testharness" ], "css/css-transitions/parsing/transition-delay-invalid.html": [ - "b34d50551ce433ebe672c7fddb4a549582c754db", + "4b7a14328601ebf6f38e016d5844744bac1a3839", "testharness" ], "css/css-transitions/parsing/transition-delay-valid.html": [ @@ -589496,35 +590561,47 @@ "testharness" ], "css/css-transitions/parsing/transition-duration-invalid.html": [ - "fd0f341f4071b53561cf8b072bb105d3bd1a4563", + "4474089bbb0f89fdfc83a8436c7d5926e046256f", "testharness" ], "css/css-transitions/parsing/transition-duration-valid.html": [ "311ca086695151747559a0995b61c7fe4c755592", "testharness" ], + "css/css-transitions/parsing/transition-invalid.html": [ + "64310b13a15e982402e1d8c3b3d6daad5be67676", + "testharness" + ], "css/css-transitions/parsing/transition-property-computed.html": [ "1e8cfeb22ddfbba2225494e16fdb0b27732a3ed0", "testharness" ], "css/css-transitions/parsing/transition-property-invalid.html": [ - "903a206eac13688a51ff2ba88552de67efa2e9cb", + "715e13d7a249d8762350070c7c47aa8043297b54", "testharness" ], "css/css-transitions/parsing/transition-property-valid.html": [ "4e3894f5aa94e00aa59406ee1aab92b9226483af", "testharness" ], + "css/css-transitions/parsing/transition-shorthand.html": [ + "caffb3978cf0162cb8616c6723c6cb93e33750b4", + "testharness" + ], "css/css-transitions/parsing/transition-timing-function-computed.html": [ - "9834dfdbf0dde78d0d2c1b468c5badddc2460ac9", + "fa03b2295b9c2f92ab4e520cc75153d9eaa6e672", "testharness" ], "css/css-transitions/parsing/transition-timing-function-invalid.html": [ - "00bd2131e0927ba38e633ad7be404b8ec26e51a9", + "c69b7e75d3d3ef31df4f6ec927b8fbf2032484d6", "testharness" ], "css/css-transitions/parsing/transition-timing-function-valid.html": [ - "2e2c1827bfbef9d4cc58e32ec88da3c7fd614225", + "5402fdac195b2dc2d68553d593e1924f5c3be695", + "testharness" + ], + "css/css-transitions/parsing/transition-valid.html": [ + "c4651f5f125f40c0ec75f6d58b2641fa78b47cf0", "testharness" ], "css/css-transitions/properties-value-001.html": [ @@ -589791,36 +590868,36 @@ "9a74bebfb7a45765cac3693b1461953ea75cef92", "testharness" ], - "css/css-transitions/transition-delay-000.html": [ - "2b4cedbb52405903e367ea6ca7a39dcca3b167b6", + "css/css-transitions/transition-delay-000-manual.html": [ + "b205085997ced154dd81e5085dbc6a0cfce19045", "manual" ], "css/css-transitions/transition-delay-001.html": [ "921525ea72d2e1e28d2321c1594085deaf2330f0", "testharness" ], - "css/css-transitions/transition-delay-002.html": [ - "70e952b308c35affc5f7bdfbc66326df49ba6397", + "css/css-transitions/transition-delay-002-manual.html": [ + "168f94b9c054b481df7ccea0c5e07b8643715c8c", "manual" ], - "css/css-transitions/transition-delay-003.html": [ - "3062e9a4842dcb5ecfd3b59c26260b412cd3b573", + "css/css-transitions/transition-delay-003-manual.html": [ + "e3680ca2615ab3d490467101c047a42153a46d61", "manual" ], "css/css-transitions/transition-duration-001.html": [ "b5c095f001efb373934850db67527ace118e10cd", "testharness" ], - "css/css-transitions/transition-duration-002.html": [ - "e9ba5760c605e28e698411f73f3280cc453b9637", + "css/css-transitions/transition-duration-002-manual.html": [ + "03f514d365d165d777e43f83142e801f4f9833d9", "manual" ], - "css/css-transitions/transition-duration-003.html": [ - "bb68b5f51c1a5c6dc84de7499599472bc286ad39", + "css/css-transitions/transition-duration-003-manual.html": [ + "cb561008836236752f0ed37ad68159481e71596f", "manual" ], - "css/css-transitions/transition-duration-004.html": [ - "01c42473319d90130f9aec5df39a28a287aff7ed", + "css/css-transitions/transition-duration-004-manual.html": [ + "b93904bb7667b7c5afa7f9fdcd3dad524e2f9f41", "manual" ], "css/css-transitions/transition-property-001.html": [ @@ -589831,176 +590908,176 @@ "99196b6d1d4ec86be77930d578602110b6a7deb6", "testharness" ], - "css/css-transitions/transition-property-003.html": [ - "17668b053e83e102565e341dd337ffc2b4544cf4", + "css/css-transitions/transition-property-003-manual.html": [ + "291204d5752e5fcb9c7b8fb8ef32a95d7d4b1813", "manual" ], - "css/css-transitions/transition-property-004.html": [ - "6393c6e3d54f59e8ae9cde42eda248d0c891f68d", + "css/css-transitions/transition-property-004-manual.html": [ + "d2e84c99d69003d46c439ce6c623594390701a2a", "manual" ], - "css/css-transitions/transition-property-005.html": [ - "a10ff4a3c1acd4cf31d18bc510f228ed416085ae", + "css/css-transitions/transition-property-005-manual.html": [ + "e69941001bca8c441cdb66aaf4582d7e3c336afc", "manual" ], - "css/css-transitions/transition-property-006.html": [ - "e7d8c5e39462d526b4ee60f97046fe14f5e904a1", + "css/css-transitions/transition-property-006-manual.html": [ + "6032a401d0cfea4a717a3c07ebaca841857aef72", "manual" ], - "css/css-transitions/transition-property-007.html": [ - "0d006fe9b0b1101a03528aa085ceda850deb621c", + "css/css-transitions/transition-property-007-manual.html": [ + "898aea5b2079caa0d66a94b673feb8e42ee69dfc", "manual" ], - "css/css-transitions/transition-property-008.html": [ - "47ca1eee1053ca272eb72f3b6e5eaaa1a9343807", + "css/css-transitions/transition-property-008-manual.html": [ + "53caa1028a47fafec6b2d07a3aa58e7c709cd2d8", "manual" ], - "css/css-transitions/transition-property-009.html": [ - "b45948b9dd6040af8dd3f2e7dfdcec1c6002cd58", + "css/css-transitions/transition-property-009-manual.html": [ + "5f272854eb2e3f3ebf1dcd8f5130ef100218ec28", "manual" ], - "css/css-transitions/transition-property-010.html": [ - "f05f6aa133e2852aa75b7fa43dc3637964ad1741", + "css/css-transitions/transition-property-010-manual.html": [ + "a7e06ef78072f6ea6944e35495e1be70b232c499", "manual" ], - "css/css-transitions/transition-property-011.html": [ - "7b3716dde8adfc3cab36d38115a83702388808d8", + "css/css-transitions/transition-property-011-manual.html": [ + "3799ad212aebddb60c3f1818129e7a4d71e5bfb7", "manual" ], - "css/css-transitions/transition-property-012.html": [ - "0e19e52d62abcfd5d4f3852000ce99634a860b3d", + "css/css-transitions/transition-property-012-manual.html": [ + "8587e264119c455f1d7bb8d882c3a290e3248124", "manual" ], - "css/css-transitions/transition-property-013.html": [ - "9fb075b09d2b0f04556916cbb4afcbf29e0a021b", + "css/css-transitions/transition-property-013-manual.html": [ + "3b13c038161e1a2037f838c8133330425a42e700", "manual" ], - "css/css-transitions/transition-property-014.html": [ - "91075ff638f32d1b6f958019c7862fdf171f0475", + "css/css-transitions/transition-property-014-manual.html": [ + "d4aca3805b3b983bc1e3363abd8ba5b33ea71ef7", "manual" ], - "css/css-transitions/transition-property-015.html": [ - "b37d4fc9a7beae894eb63fb98aa3fe9d6dcc039f", + "css/css-transitions/transition-property-015-manual.html": [ + "e5805bc4ba6882394c1b45932ce97eaab71afc43", "manual" ], - "css/css-transitions/transition-property-016.html": [ - "2670cd7385222e0959553c376193ea94e76ade39", + "css/css-transitions/transition-property-016-manual.html": [ + "d2cc57cd9796d819aa914dcad7ff0525266cb64e", "manual" ], - "css/css-transitions/transition-property-017.html": [ - "3b94ecde0c51b82d4650834181c25718576fd327", + "css/css-transitions/transition-property-017-manual.html": [ + "f24c51a7383b76c2dd56db5e1d69eb6c3808cc0c", "manual" ], - "css/css-transitions/transition-property-018.html": [ - "593e3ff71944fde48c84ae99191242a9078ea5ee", + "css/css-transitions/transition-property-018-manual.html": [ + "e0b6bd955b5e2b65b131d21f5ea5a646c00afed0", "manual" ], - "css/css-transitions/transition-property-019.html": [ - "83f900005469647bd05cf7080e41fd59c1b641ef", + "css/css-transitions/transition-property-019-manual.html": [ + "24751292c2886a761e90ed009543768747ffff29", "manual" ], - "css/css-transitions/transition-property-020.html": [ - "af0aea41bcd4615825a961778ab499f61a718f8a", + "css/css-transitions/transition-property-020-manual.html": [ + "e4f7b577920f321453e5a25aadc1d814c4e3ac91", "manual" ], - "css/css-transitions/transition-property-021.html": [ - "f499c9aee43f50bb0a74acfba1fa412976a994ad", + "css/css-transitions/transition-property-021-manual.html": [ + "c0492223bbf6043cd5b93f9290640bceaf53f338", "manual" ], - "css/css-transitions/transition-property-022.html": [ - "f36954902e3667eb305340075d5952344cc62bbd", + "css/css-transitions/transition-property-022-manual.html": [ + "ece1a32eb09ee3baf7f38ca39da5530774af81c8", "manual" ], - "css/css-transitions/transition-property-023.html": [ - "81c8cadac422bcbb48b88a053ae0df564a0a0242", + "css/css-transitions/transition-property-023-manual.html": [ + "267be61aa1560646ffcb12693f4783942242a51c", "manual" ], - "css/css-transitions/transition-property-024.html": [ - "b0e9d41dbc0dd0628adf9894fb6811f559efa45a", + "css/css-transitions/transition-property-024-manual.html": [ + "fad3d7ac239ceb28f26d6ae40a2eff88af7690aa", "manual" ], - "css/css-transitions/transition-property-025.html": [ - "bfa6f698930d13412d6c19a424aefb2c566c27a7", + "css/css-transitions/transition-property-025-manual.html": [ + "c0f276184894a29f1abd5eb46322f6b0a4a5ffe5", "manual" ], - "css/css-transitions/transition-property-026.html": [ - "d6f0481bea7ad1b54ba2d44efd62513ec834b221", + "css/css-transitions/transition-property-026-manual.html": [ + "35846e3fb5334cf049f1031e6c542e46105ba5f8", "manual" ], - "css/css-transitions/transition-property-027.html": [ - "01f50dc475ab5fd3ad0f7094d7efa1db0ad362b9", + "css/css-transitions/transition-property-027-manual.html": [ + "5ad5f5d5bd5187593a421b261758227e464f5204", "manual" ], - "css/css-transitions/transition-property-028.html": [ - "83d8751109b1e29e76aaa98fedce03f205b68a63", + "css/css-transitions/transition-property-028-manual.html": [ + "be319d2c21204d6ba6bbdb1e6be454782a49203a", "manual" ], - "css/css-transitions/transition-property-029.html": [ - "fb435c91249d691862b24a63f5f5b9c35166afb8", + "css/css-transitions/transition-property-029-manual.html": [ + "84c55326fe8ab2c5f3b20d07939a15de60ba42d0", "manual" ], - "css/css-transitions/transition-property-030.html": [ - "286af42e12cc2c8249d1bc1e2ca14f3aedba0293", + "css/css-transitions/transition-property-030-manual.html": [ + "ba75f7ce725f320cf4d478273adfa22e47f5ff6a", "manual" ], - "css/css-transitions/transition-property-031.html": [ - "d5bf23276f7e594f77f86f9b292fe134a57aabed", + "css/css-transitions/transition-property-031-manual.html": [ + "14cf23c6bdc649f09862f2a573008171177a882f", "manual" ], - "css/css-transitions/transition-property-032.html": [ - "020a8573c8729efeb49e1bde33d7942c8f89f70f", + "css/css-transitions/transition-property-032-manual.html": [ + "c6596608ed13fd93ce60c1ca5d05f5dabd8e6157", "manual" ], - "css/css-transitions/transition-property-033.html": [ - "fcb999fa079be9df7569e57af8019d93b8b9905b", + "css/css-transitions/transition-property-033-manual.html": [ + "fd7646c66bc47827794ebd0792b7586216dbe2af", "manual" ], - "css/css-transitions/transition-property-034.html": [ - "b4da3a9bca07ba24040e1723baa4662c1d83af95", + "css/css-transitions/transition-property-034-manual.html": [ + "07804121c9c862b4bcc2e1babf9c65c17d71e206", "manual" ], - "css/css-transitions/transition-property-035.html": [ - "27c9ea9e1d8e8721224bd3bbe46405dffbcab90f", + "css/css-transitions/transition-property-035-manual.html": [ + "4a9e9b128fd5402c97bb64fdbaaa1706814c18c5", "manual" ], - "css/css-transitions/transition-property-036.html": [ - "326e615398c5905e92bdacec50b22effa23b3572", + "css/css-transitions/transition-property-036-manual.html": [ + "746bc409ee0e92d6e0588079dff63e4a0e89a68d", "manual" ], - "css/css-transitions/transition-property-037.html": [ - "79ce16fb961c9f3bfceda7bf996afb7aef05381f", + "css/css-transitions/transition-property-037-manual.html": [ + "d031caaaa405fcf57b44890ee97159f28d88fc42", "manual" ], - "css/css-transitions/transition-property-038.html": [ - "5b16e41f578b70217b2ca1b406fb1a9d1f571248", + "css/css-transitions/transition-property-038-manual.html": [ + "2f9302bad7593a24a6617a91d388202afed979ef", "manual" ], - "css/css-transitions/transition-property-039.html": [ - "0ef6da528cb81c746c799ec2fb84c0c6f0f1d872", + "css/css-transitions/transition-property-039-manual.html": [ + "bf0b209bdad43712bb42fdf41d14328b4d4ac5f8", "manual" ], - "css/css-transitions/transition-property-040.html": [ - "b333f371f3f974467c745d4cbfa4165077c1aa61", + "css/css-transitions/transition-property-040-manual.html": [ + "83a3cf802b3e00fc717d01de51f8824a15af71ed", "manual" ], - "css/css-transitions/transition-property-041.html": [ - "b3386a0534f190d15e5251c31e59c05a779dc4af", + "css/css-transitions/transition-property-041-manual.html": [ + "04f8351a0309f5b4e10c610a6c07325944492220", "manual" ], - "css/css-transitions/transition-property-042.html": [ - "fbb3e2d8b1ad7208b40d669e70b5f41e75601c6a", + "css/css-transitions/transition-property-042-manual.html": [ + "15977497fbb81be0a86f24ce52a7e6359e18bf98", "manual" ], - "css/css-transitions/transition-property-043.html": [ - "b87dc84a85636d4c1cc32a4a2716b33ecf28b370", + "css/css-transitions/transition-property-043-manual.html": [ + "3b939bcf0ab8d5800ac2e0088da0774f56e28028", "manual" ], - "css/css-transitions/transition-property-044.html": [ - "f1d584fcf25396db414078066302ce2f7bb979f2", + "css/css-transitions/transition-property-044-manual.html": [ + "d7c2f467492d9e234467956e3409b9665cee9e9d", "manual" ], - "css/css-transitions/transition-property-045.html": [ - "3fa82c16d1f9e7f01760003c07bdfbc38afa060d", + "css/css-transitions/transition-property-045-manual.html": [ + "912ed4df50ccc545c0a7c77f4cc43c0b75104c4a", "manual" ], "css/css-transitions/transition-reparented.html": [ @@ -590011,56 +591088,28 @@ "10700abf9bc48d0938fd3f5b77b031ecc0c05e4a", "reftest" ], - "css/css-transitions/transition-timing-function-001.html": [ - "4c9598f3919b84dc79d7c92c76b74b7f950423aa", - "testharness" - ], - "css/css-transitions/transition-timing-function-002.html": [ - "527eb9e85ad4dc4944b39e83c1a0d79b8f515ddb", - "manual" - ], - "css/css-transitions/transition-timing-function-003.html": [ - "353b94e7eca1e3f837d5c0e0ec02c1c0167b19a3", - "manual" - ], - "css/css-transitions/transition-timing-function-004.html": [ - "0601b4bd148a113ef0f5e0b5f6b3c33cf40c38b5", - "manual" - ], - "css/css-transitions/transition-timing-function-005.html": [ - "eb46ece6044fe5d204b8dde056e655179732ef90", - "manual" - ], - "css/css-transitions/transition-timing-function-006.html": [ - "d8640d9304778f2ad41f56a90ba23486e8d59f34", - "manual" - ], - "css/css-transitions/transition-timing-function-007.html": [ - "72ffbf6a1302c1858bf7880bfa033793c72b40d1", - "manual" - ], - "css/css-transitions/transition-timing-function-008.html": [ - "2e20f7ee5f2a9ff9602222635a7723850fbd9e51", + "css/css-transitions/transition-timing-function-002-manual.html": [ + "abd729bdedeff531c08279f1b4c4a7399b69d0c2", "manual" ], - "css/css-transitions/transition-timing-function-009.html": [ - "a3e2f1a6bd2226a24484899c2a1f3126967989dc", + "css/css-transitions/transition-timing-function-003-manual.html": [ + "9fee35a972ed2f1790dd6c58140e92248044bfa7", "manual" ], - "css/css-transitions/transition-timing-function-010.html": [ - "16af80655189fe64a1be1612910eca3f2aa449d4", + "css/css-transitions/transition-timing-function-004-manual.html": [ + "f57d49aeabb305bfea5281d159382c334f37ac8c", "manual" ], - "css/css-transitions/transition-timing-function-011.html": [ - "5d0f5a25b25aae82fc73e8a52a419f92350b5e3c", + "css/css-transitions/transition-timing-function-005-manual.html": [ + "27726cd6d5b3bd4bc9532d64e2062318dd019574", "manual" ], - "css/css-transitions/transition-timing-function-012.html": [ - "f3bc812217e4a31153187ab33478f461571e089e", + "css/css-transitions/transition-timing-function-006-manual.html": [ + "d97e6bb07694d5b19dffba48a3890f0c07f15d03", "manual" ], - "css/css-transitions/transition-timing-function-013.html": [ - "5d89c45e0245ba4fedcd84905a59e3e8580319a8", + "css/css-transitions/transition-timing-function-010-manual.html": [ + "953d7210b6d725cc668887ff592cc630ced88aec", "manual" ], "css/css-transitions/transitioncancel-001.html": [ @@ -592691,6 +593740,10 @@ "75fc7e60bd9dc3f249b8340cf342b68fa45b7d68", "testharness" ], + "css/css-ui/parsing/outline-shorthand.html": [ + "01239e199e651ff53237c19c4a76a500338e8514", + "testharness" + ], "css/css-ui/parsing/outline-style-computed.html": [ "3824b8d59815b20206a90e428644942ac220c68c", "testharness" @@ -594427,6 +595480,18 @@ "fee5e92a9312f80b6d36966b721d01269f1ad30b", "reftest" ], + "css/css-values/clamp-length-computed.html": [ + "67dc19a99f4d687745f27b7548d44e2795981d42", + "testharness" + ], + "css/css-values/clamp-length-invalid.html": [ + "68c298b7ffc431d58025c0c9c5c2163db3742334", + "testharness" + ], + "css/css-values/clamp-length-serialize.html": [ + "4719e4c0254902bb1c2234c4cfc1c4003a8df0d4", + "testharness" + ], "css/css-values/ex-calc-expression-001-ref.html": [ "888a51ea9b6ac04fb065ee5d84a18be8fe765aca", "support" @@ -594523,6 +595588,10 @@ "73069ecfe1e6d5b198f6e01df48facbe117d6828", "reftest" ], + "css/css-values/min-max-percentage-length-interpolation.html": [ + "14af1352d1740d32cd52ab069ab1799f87803f5d", + "reftest" + ], "css/css-values/minmax-angle-computed.html": [ "84e598a8147e123285d54876f942a0df0a5bf57f", "testharness" @@ -604859,6 +605928,10 @@ "188a65b715291b33d93d8a6af88c2a7f6e25858c", "reftest" ], + "css/mediaqueries/aspect-ratio-serialization.html": [ + "cce35592885f29eafd2c5c1b94a0da173217fc2a", + "testharness" + ], "css/mediaqueries/device-aspect-ratio-001.html": [ "60f49b9b3cfedaf8136dcb568570ef71124cba8b", "reftest" @@ -604951,6 +606024,10 @@ "d039281c0254e2bb794e229baecbe4d39c547baa", "reftest" ], + "css/mediaqueries/navigation-controls.tentative.html": [ + "ac1087bb65b9a8fd85d924ad1ae0de797762dac5", + "testharness" + ], "css/mediaqueries/prefers-color-scheme.html": [ "c6ca45ab17201466e01006cab78331a0765cc6c8", "testharness" @@ -605020,7 +606097,7 @@ "testharness" ], "css/motion/animation/offset-interpolation.html": [ - "04f4d4b3bd78f95939c34aa098b85a7947d4fcbd", + "2ee011bd77a975e9b566d24658995693c574f620", "testharness" ], "css/motion/animation/offset-path-interpolation-001.html": [ @@ -605304,7 +606381,7 @@ "testharness" ], "css/motion/parsing/offset-parsing-valid.html": [ - "3fe8a5b20d805ae3d330b8c653593b6b0c0e0d9e", + "7f8a0fd34c329178e42908edd27858d577cdbad1", "testharness" ], "css/motion/parsing/offset-path-computed.html": [ @@ -607416,7 +608493,7 @@ "support" ], "css/support/interpolation-testcommon.js": [ - "e7ee011cdb470ee228a8a32442d6a717ef6ffd0a", + "24c47e136c8d98603238a09dbb64bd79cd6751d2", "support" ], "css/support/parsing-testcommon.js": [ @@ -607464,7 +608541,7 @@ "support" ], "css/support/shorthand-testcommon.js": [ - "1fd603c290c14d4672fc8f63f2d964da9867be78", + "3298113513fb1e34311a6e7f34dd2d20cfe0c870", "support" ], "css/support/square-purple.png": [ @@ -614160,7 +615237,7 @@ "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-margin-box-border-radius-008-ref.html": [ - "f5edbedfb74e763fdcdc1451d538caeda5c023c0", + "7cf8fafc933623c8a7912e8912a96d2fb178f8b5", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-margin-box-border-radius-008.html": [ @@ -618731,6 +619808,10 @@ "9f6d871417dcb006380f6e59bd0c0a031fd7e78e", "testharness" ], + "dom/nodes/MutationObserver-sanity.html": [ + "a4f6382b944db4b2734ea54c9990dd4135c52557", + "testharness" + ], "dom/nodes/MutationObserver-takeRecords.html": [ "6a27ef77ecacf55a7eaaae18cdd007e017e42cd9", "testharness" @@ -622064,7 +623145,7 @@ "support" ], "encrypted-media/scripts/clearkey-update-non-ascii-input.js": [ - "b34c493fd113a91780bf365800b71b98b6a3bfd6", + "7a5c073bfab150be54d8bce4b890bf36d731f7ef", "support" ], "encrypted-media/scripts/events-session-closed-event.js": [ @@ -622080,11 +623161,11 @@ "support" ], "encrypted-media/scripts/generate-request-disallowed-input.js": [ - "8b883ccacff17468f98df5d9d704c494abbac51d", + "9fd42ee85fa7d9390cbadba60dc4236891e99a54", "support" ], "encrypted-media/scripts/invalid-license.js": [ - "992eef5dcf78961ad8f1c45f939e67330de78c57", + "89d43769e5346c6dc4046d0227af490e029473a2", "support" ], "encrypted-media/scripts/keystatuses-multiple-sessions.js": [ @@ -622180,7 +623261,7 @@ "support" ], "encrypted-media/scripts/requestmediakeysystemaccess.js": [ - "edfcbfc613310ef8db33e9d6ae2d97032ea73783", + "a60d4a1e768618ae0952063e7cdd9192ccfd7ecf", "support" ], "encrypted-media/scripts/reset-src-after-setmediakeys.js": [ @@ -622212,7 +623293,7 @@ "support" ], "encrypted-media/scripts/setmediakeys.js": [ - "f161e6712fd09c43b6659021c33554ba6680a775", + "a85adeaeafc63cf3f8224eee52d89aebab9b6450", "support" ], "encrypted-media/scripts/syntax-mediakeys.js": [ @@ -622220,7 +623301,7 @@ "support" ], "encrypted-media/scripts/syntax-mediakeysession.js": [ - "3663a7b930db8c8d66cc9345a394ee59aa85ae50", + "fac31cbb3e57e9890d83f4c4fb671eaa7de11c3a", "support" ], "encrypted-media/scripts/syntax-mediakeysystemaccess.js": [ @@ -622228,7 +623309,7 @@ "support" ], "encrypted-media/scripts/temporary-license-type.js": [ - "cb0b0e67fefc1558a0e1caeb477d3ef4227165ab", + "44c9f158085fcffd42a8573e080d17939a7a866c", "support" ], "encrypted-media/scripts/unique-origin.js": [ @@ -622236,7 +623317,7 @@ "support" ], "encrypted-media/scripts/update-disallowed-input.js": [ - "b5adaf7f125c10c57d1bde2a19f9536270425f55", + "2a30ad38d4310db6da0f84752b23d46f0a9c81e8", "support" ], "encrypted-media/scripts/waiting-for-a-key.js": [ @@ -622264,7 +623345,7 @@ "support" ], "encrypted-media/util/utils.js": [ - "41bd71f9b880711e088daed2bd223404018b9d8e", + "79f8c7ea6d1b5c5c38131205c20499019ba7371c", "support" ], "entries-api/META.yml": [ @@ -625023,6 +626104,10 @@ "b60ae206c78b3dd8e934dde7a7408fe4a7465932", "testharness" ], + "fetch/sec-metadata/portal.tentative.https.sub.html": [ + "2a9df1f01174c7297f7d207ba1f52de2dd588b0c", + "testharness" + ], "fetch/sec-metadata/prefetch.tentative.https.sub.html": [ "2c230b8949688940067d9bbc151b12f59e20b517", "testharness" @@ -625108,7 +626193,7 @@ "support" ], "fetch/sec-metadata/resources/post-to-owner.py": [ - "c5ded49d71bbc4c8f6d0cc3cc1bd43f9029dcf1b", + "096f33b04a22f34eccbcf9981010ff6e43c8ea79", "support" ], "fetch/sec-metadata/resources/record-header.py": [ @@ -628684,7 +629769,7 @@ "testharness" ], "html/browsers/origin/cross-origin-objects/cross-origin-objects.html": [ - "f664819d3404498dc1ef9ede50c7b1b28fad1933", + "50fe71a2c6fba3c1ec6e42c94dd05899eb24245c", "testharness" ], "html/browsers/origin/cross-origin-objects/frame-with-then.html": [ @@ -635831,6 +636916,14 @@ "f66244ab10ffbfeb5ef64ca7564fdd37794288af", "reftest" ], + "html/rendering/non-replaced-elements/tables/table-column-width-ref.html": [ + "1eb7c00d21413292ffb47e956cf341338d6e26ff", + "support" + ], + "html/rendering/non-replaced-elements/tables/table-column-width.html": [ + "6358e14a3926b4f6b97d32832c45c0ef9237f24d", + "reftest" + ], "html/rendering/non-replaced-elements/tables/table-direction-ref.html": [ "2bbd6c04772fd538426d516d2a2d1b301d05ff3f", "support" @@ -636355,8 +637448,12 @@ "b5f3ec1aa62d8238628409fcda14b189e7ed2a65", "testharness" ], + "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-aspect-ratio.html": [ + "1d231d52cde8b4758cf834db42231720c374b060", + "testharness" + ], "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-aspect-ratio.tentative.html": [ - "ae266882b1957080b28f1204a0183c6ca015cadc", + "c9ce86869e10e367a4aadf99d86d1c407ebd1ccf", "testharness" ], "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-dim-ref.html": [ @@ -636415,6 +637512,10 @@ "55f7f0a3bfeca2c8262ab85f8b1b90f7a705c803", "reftest" ], + "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-aspect-ratio.html": [ + "2b4937046d2f20e0dafddf07b1470adec5e7b050", + "testharness" + ], "html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-fallback-ref.html": [ "9077591f46641b6bb7670c62deb1c77e27beb27f", "support" @@ -637579,6 +638680,10 @@ "911aa7b5c96333f78da5ea315e1ca1b8381dcd74", "testharness" ], + "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-different-load.html": [ + "4802665cdda09d7d8763b133aed301d43cdce08d", + "testharness" + ], "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html": [ "df0985d6fb435c25dce510f924b1470878c5602f", "testharness" @@ -647207,6 +648312,10 @@ "4442d513753112fac2e35855268d0b246f01fa09", "testharness" ], + "infrastructure/expected-fail/unhandled-rejection.html": [ + "f25f6e088fa06fbcd38b62929309e761b0060988", + "testharness" + ], "infrastructure/metadata/infrastructure/assumptions/allowed-to-play.html.ini": [ "c9fbabede6d695cd3795e4390b35da0454ffcc34", "support" @@ -647239,6 +648348,10 @@ "0bcdd374f2521b6534208ab750a1c0d36e7dd7ca", "support" ], + "infrastructure/metadata/infrastructure/expected-fail/unhandled-rejection.html.ini": [ + "39773dfe714a6b5754bfe73c64294bcb38f2afa3", + "support" + ], "infrastructure/metadata/infrastructure/reftest/reftest_and_fail.html.ini": [ "81aef049cd122f7332c66f5a087947e512a59d0e", "support" @@ -647636,7 +648749,7 @@ "support" ], "interfaces/IndexedDB.idl": [ - "9373f4e43bf8ab0fe51371839dd614b83c54cb9c", + "2af9eb2a3245d2229dc5b7505713795405ff0ba9", "support" ], "interfaces/InputDeviceCapabilities.idl": [ @@ -647664,7 +648777,7 @@ "support" ], "interfaces/WebIDL.idl": [ - "78d85c13fb9b461e24bc2e6667b7431241f5dfcb", + "a118dfd1a20e439129ab5f73b15ced9523c8d7b8", "support" ], "interfaces/accelerometer.idl": [ @@ -647712,7 +648825,7 @@ "support" ], "interfaces/cookie-store.idl": [ - "533884fdb5865fc5fe87bd73d68983dd4b485676", + "c3204b2515a2000ca9be0cf6b4f6732e0ddc63a1", "support" ], "interfaces/cors-rfc1918.idl": [ @@ -647760,7 +648873,7 @@ "support" ], "interfaces/css-masking.idl": [ - "80f908d42f3e4e4d0eadb1825dc6a4dbf20b1f2d", + "6db59eddbe087310010be1e60b826b72924c7849", "support" ], "interfaces/css-paint-api.idl": [ @@ -647820,11 +648933,11 @@ "support" ], "interfaces/feature-policy.idl": [ - "3ded1e9b0c64ec84d4f4d07b6b870effcb9cd893", + "85601321a17f3d0a46d2246642d59ef44d916398", "support" ], "interfaces/fetch.idl": [ - "f529c4501bf484f57858ab2eb616a9d42aea766f", + "eacc69d8b9d1d8f7f9bdbf6f2a879d95d9d847bd", "support" ], "interfaces/filter-effects.idl": [ @@ -647840,11 +648953,11 @@ "support" ], "interfaces/gamepad.idl": [ - "b7497c276f1610139ef14c1cc4d0c34c1f2c406b", + "27541bf2553520dcf7f2ce52386014c9a4363377", "support" ], "interfaces/generic-sensor.idl": [ - "2921c50a65e8d4467a56c5d337ef4d476e3ee0a2", + "f3eeb9bf968f7a1a0ba6a772ad935b855b1e9e8a", "support" ], "interfaces/geolocation-API.idl": [ @@ -647908,7 +649021,7 @@ "support" ], "interfaces/magnetometer.idl": [ - "be6cbc9d47a8da6a16613c8d88bbc824e7372de3", + "da1f22bb6685a38164c1eb16d3a6c07290e7833a", "support" ], "interfaces/media-capabilities.idl": [ @@ -647956,15 +649069,15 @@ "support" ], "interfaces/notifications.idl": [ - "1a55c31bb04c0ab11946a90f374fdf07e268ad05", + "d79e9076c81c9f1016f1ca98c16356f6b9454365", "support" ], "interfaces/orientation-event.idl": [ - "a8eef516f29b40c1b1604ad8d853e232f89eeabe", + "af5bc546ac1726ab610285bfa007df3b4e39bf11", "support" ], "interfaces/orientation-sensor.idl": [ - "9ee099881b0a59ca69da02e9aa3d1886e4bc05bc", + "2ea3d38240e527f10af7ef392e0c0935a3750572", "support" ], "interfaces/page-visibility.idl": [ @@ -647976,7 +649089,7 @@ "support" ], "interfaces/payment-handler.idl": [ - "b5d79decb06530001cd9d63e6fcba43995d27ba1", + "c87c855d439609adee24d2f49fc77879f9c8352b", "support" ], "interfaces/payment-method-basic-card.idl": [ @@ -648016,7 +649129,7 @@ "support" ], "interfaces/proximity.idl": [ - "570a29fd37b09304871409dd811498fef8b3cf19", + "d4c8fae3a5438058262108f4848414763138080a", "support" ], "interfaces/push-api.idl": [ @@ -648088,7 +649201,7 @@ "support" ], "interfaces/touch-events.idl": [ - "1a8c9d7d24ece0ea221b6863ce8ea3595bcbb697", + "84c48284a1b9bdcd79954008decdaeac9d2bf2eb", "support" ], "interfaces/trusted-types.tentative.idl": [ @@ -648100,7 +649213,7 @@ "support" ], "interfaces/url.idl": [ - "998052da6ef1b3aada6b81a4ff5868ee11e3b477", + "b0b237e8524a8621f0ddcd8367ebad6fd5f2fb5b", "support" ], "interfaces/user-timing.idl": [ @@ -648187,6 +649300,14 @@ "81a23a35be6f857e49253d47cb9c64d24677b56d", "support" ], + "interfaces/webxr-ar-module.idl": [ + "61fcd6a730f7c3846a8639075a0b2c2a3b755e0c", + "support" + ], + "interfaces/webxr-gamepads-module.idl": [ + "3aa17a7fe0c8020f6101c0fee29107ce7b24cb37", + "support" + ], "interfaces/webxr.idl": [ "b03aa556bb815127203e79c7b4bbc864d539314b", "support" @@ -648299,6 +649420,10 @@ "a093b22028c11c3e54db4a6f8fcccaad6a309bfb", "testharness" ], + "intersection-observer/resources/cross-origin-child-iframe.sub.html": [ + "8e2c36ed56072ad9fd2e82d43b609f5719d78a55", + "support" + ], "intersection-observer/resources/cross-origin-subframe.html": [ "4305ed1719b68f227192e005c9696fec5fe58f83", "support" @@ -648315,6 +649440,10 @@ "9d0769ae44a1bb4a6195c006999b0959f706330c", "support" ], + "intersection-observer/resources/same-origin-grand-child-iframe.html": [ + "25db5a29d8a917916d0b2012f8f790ea9178e681", + "support" + ], "intersection-observer/resources/scaled-target-subframe.html": [ "8f6f930e00915417fcba592df5520999c427ed91", "support" @@ -648355,6 +649484,10 @@ "20bd11d4beb1e8bdd623eaad96f11788747f0d15", "testharness" ], + "intersection-observer/same-origin-grand-child-iframe.sub.html": [ + "57c0347ddc8ec748e3ff025a0ef7f11342f32a1d", + "testharness" + ], "intersection-observer/shadow-content.html": [ "ce9473cb79258fca90321ee26240612c387ac9b9", "testharness" @@ -648396,7 +649529,7 @@ "testharness" ], "intersection-observer/v2/delay-test.html": [ - "231df32c31df0458a4d5de09da55f0244854e0a6", + "e3906ea2c2975cbe678f55e34ead09527bc2bbfc", "testharness" ], "intersection-observer/v2/drop-shadow-filter-vertical-rl.html": [ @@ -648860,7 +649993,7 @@ "testharness" ], "lint.whitelist": [ - "be87d27864059b94b79f74a7f671f119cc40c0f9", + "d9ea5c17c7cf66a47199faba54d4793e8236f6cb", "support" ], "loading/lazyload/common.js": [ @@ -650012,7 +651145,7 @@ "testharness" ], "mathml/relations/html5-tree/clipboard-event-handlers.tentative.html": [ - "82fda880887839b72ac8c683d076ea07a8525d80", + "9816f5126a030de083ce4a6ca020976d9bb3beeb", "testharness" ], "mathml/relations/html5-tree/color-attributes-1-ref.html": [ @@ -650108,7 +651241,7 @@ "testharness" ], "mathml/relations/html5-tree/math-global-event-handlers.tentative.html": [ - "e96feeaf0960641e4413b7b43b93e46490460ee7", + "be9bee9c6c68fc2ec8caf5043242c45711ed0ed1", "testharness" ], "mathml/relations/html5-tree/required-extensions-2-ref.html": [ @@ -650280,7 +651413,7 @@ "support" ], "media-capabilities/decodingInfo.any.js": [ - "737ded18c9f3a24f7ef65af2b770dbb9b5865fef", + "edd58ac3409bcbab14277f38560c7045178a2dcb", "testharness" ], "media-capabilities/decodingInfoEncryptedMedia.http.html": [ @@ -653967,28 +655100,68 @@ "0d9137dc6fb91b1499d922e01d6ad96049f5757b", "testharness" ], - "native-file-system/FileSystemBaseHandle-remove.tentative.https.window.js": [ - "fd2ff888e371f383aa1ee87288dd983add46f662", + "native-file-system/README.md": [ + "6905a68e7901ce26bc1a363062304e1536604400", + "support" + ], + "native-file-system/native_FileSystemDirectoryHandle-getDirectory.tentative.https.manual.window.js": [ + "cfe729cd1f1dd4b53f00b3b13cd53f64f84ca409", "testharness" ], - "native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.https.window.js": [ - "79154b058ff0864032c80b09aef9b8b8c760a105", + "native-file-system/native_FileSystemDirectoryHandle-getFile.tentative.https.manual.window.js": [ + "0455cb800919ee353b7f2e87bf47b76ba075519b", "testharness" ], - "native-file-system/FileSystemDirectoryHandle-getFile.tentative.https.window.js": [ - "fa38abbc5447625cd8396a76c420259840b264f3", + "native-file-system/native_FileSystemDirectoryHandle-removeEntry.tentative.https.manual.window.js": [ + "8905a7afdea57c974a9a06790df6b9e692d32139", "testharness" ], - "native-file-system/FileSystemWriter.tentative.https.window.js": [ - "acc0be1c52184a8b67fdb57953cdc2b4ed793499", + "native-file-system/native_FileSystemWriter.tentative.https.manual.window.js": [ + "25d8ee995857fa67be2c41f048e882ec473f739d", "testharness" ], - "native-file-system/README.md": [ - "6905a68e7901ce26bc1a363062304e1536604400", + "native-file-system/resources/native-fs-test-helpers.js": [ + "5ad8c04724b7a2e7743b43a84efaa05b7e6b703d", + "support" + ], + "native-file-system/resources/sandboxed-fs-test-helpers.js": [ + "5f4f269d2242c2bac59136ff2cf99cbb18f639eb", "support" ], "native-file-system/resources/test-helpers.js": [ - "b794cee0c5f111fa9c9a2b05b8a94c2a2260839f", + "d0360921f1d8ce7257bd7d6586d333b8534c620d", + "support" + ], + "native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectory.tentative.https.any.js": [ + "6fcf566e31fbf061e7545280198562d9e41cad11", + "testharness" + ], + "native-file-system/sandboxed_FileSystemDirectoryHandle-getFile.tentative.https.any.js": [ + "65ae891cd44418554800e12801617097f6a72c91", + "testharness" + ], + "native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.tentative.https.any.js": [ + "a4be8bd267e743ee617c29c1cce1188e6b9d377a", + "testharness" + ], + "native-file-system/sandboxed_FileSystemWriter.tentative.https.any.js": [ + "8352e2487fe0823a2d353372757d833d85e98c4b", + "testharness" + ], + "native-file-system/script-tests/FileSystemDirectoryHandle-getDirectory.js": [ + "c2c128f5eded06f440e634051fac021e20061e0d", + "support" + ], + "native-file-system/script-tests/FileSystemDirectoryHandle-getFile.js": [ + "4d8ee96c3d033130f5940306d6f09737db7b0e9c", + "support" + ], + "native-file-system/script-tests/FileSystemDirectoryHandle-removeEntry.js": [ + "8e89e0958db96ee64927d28a5239b0740ac0f632", + "support" + ], + "native-file-system/script-tests/FileSystemWriter.js": [ + "1c51d0b4eb771eec5a606263e72719be589aa317", "support" ], "navigation-timing/META.yml": [ @@ -661871,10 +663044,18 @@ "b055f50f636848ceb7b1750484cc12328a121398", "support" ], + "permissions/feature-policy-permissions-query.html": [ + "bd152e973e8fd520460a325d47beab8c25f45d31", + "support" + ], "permissions/idlharness.any.js": [ "ff0a969badace39c3c4466c4528e30c21355e132", "testharness" ], + "permissions/permissions-query-feature-policy-attribute.https.sub.html": [ + "1d7333d9b5f67a405dc6979d5ddcfda444a04c39", + "testharness" + ], "permissions/test-background-fetch-permission.html": [ "c824ecf1d2b47630f8ebcef3ed42c8c908c8e9eb", "testharness" @@ -662547,6 +663728,10 @@ "0eae0ddfd6ef1e9de2251f50914a855f4142b9d5", "reftest" ], + "portals/portals-repeated-activate.html": [ + "a3843dddb47b55d920b249b01f47199b1202bda6", + "testharness" + ], "portals/portals-set-src-after-activate.html": [ "8da6b341840162dc7348b95cfed060c075a75135", "testharness" @@ -662635,6 +663820,10 @@ "26f62839af5ed8ea7a50535f411780bdf7fd6e03", "support" ], + "portals/resources/portal-repeated-activate-window.html": [ + "e716034eff860fe567bc373f4676d55f97a5a786", + "support" + ], "portals/resources/portals-adopt-predecessor-portal.html": [ "b7eb3b96779a561cacf11d6c7e9362ca1049be6c", "support" @@ -662655,6 +663844,10 @@ "92aef00380ae4a6180039ad0b10169c81a190441", "support" ], + "portals/resources/simple-portal-adopts-and-activates-predecessor.html": [ + "56bfd10f647fb63597dbc5ec902a8c2b90257b18", + "support" + ], "portals/resources/simple-portal-adopts-predecessor.html": [ "b199bdd93b3a03437ebde7abaef9b14ac61b1f76", "support" @@ -674236,7 +675429,7 @@ "testharness" ], "resource-timing/status-codes-create-entry.html": [ - "fb4236e6bbe856be21e5af577a3fea03d774b8e1", + "22e22c445b0812461ef06eb35ad6b611a3b6faa5", "testharness" ], "resource-timing/supported_resource_type.any.js": [ @@ -674288,7 +675481,7 @@ "support" ], "resources/chromium/contacts_manager_mock.js": [ - "618968ec18da930ad1d3180adb68f05064bb1807", + "ae4c33b073dfd2b156030b2cb6d045e133b57c23", "support" ], "resources/chromium/device.mojom.js": [ @@ -674348,7 +675541,7 @@ "support" ], "resources/chromium/mock-imagecapture.js": [ - "eec414bd032a2dd01f27e18de64df0bde4e4a459", + "9d46b57020f36277b8bece93588699cae2a82471", "support" ], "resources/chromium/mojo_bindings.js": [ @@ -674759,6 +675952,10 @@ "b846d4dc4300a990edf7a905f301dcaf75bee18c", "support" ], + "resources/test/tests/unit/throwing-assertions.html": [ + "a36a56043cc7cbb66c8138a68b13b02609ca65aa", + "support" + ], "resources/test/tests/unit/unpaired-surrogates.html": [ "1b162fe71d283d63dbdaac5b3be887f5cd80d53f", "support" @@ -674800,7 +675997,7 @@ "support" ], "resources/testharness.js": [ - "15591042aa4cb0fdd75fe3bf56b9bdfb63fd161d", + "55de1ce252bd0349aa5bee2e69120ae44520ed02", "support" ], "resources/testharness.js.headers": [ @@ -676616,7 +677813,7 @@ "manual" ], "service-workers/service-worker/fetch-event-within-sw.https.html": [ - "8a567fd7a93f8552412cfff657789c5375eba971", + "f5a60c3060961a2b1674c8959c5d4a0af7b5452a", "testharness" ], "service-workers/service-worker/fetch-event.https.html": [ @@ -678615,6 +679812,10 @@ "20456b057e1e724cdac9bc656f3b3d6c7ac2f658", "testharness" ], + "shadow-dom/focus/focus-selector-delegatesFocus.html": [ + "386045258e043f7b0849aaa366d34bb645f2f73f", + "testharness" + ], "shadow-dom/focus/focus-tabindex-order-shadow-negative.html": [ "ab25ea829bd10952ad6e96898fc95a1a1ae25d8f", "testharness" @@ -678644,7 +679845,7 @@ "testharness" ], "shadow-dom/focus/resources/shadow-utils.js": [ - "6ea372afdf180a95d9fda632ebccd00a13df85bf", + "8033ce0169f4aa83b54c3567c68c4cc4f5b7a490", "support" ], "shadow-dom/form-control-form-attribute.html": [ @@ -679092,7 +680293,7 @@ "support" ], "signed-exchange/README.md": [ - "f1dbfe6d1adbe7ef7663c5298692872897ce3e0c", + "4032edf22f34f596d74da5ee0e4019c5dcf1c69c", "support" ], "signed-exchange/appcache/appcache.manifest": [ @@ -679760,7 +680961,7 @@ "testharness" ], "storage-access-api/hasStorageAccess.sub.window.js": [ - "1352d7589f051b31ec577eb7d0c85daf4a58d8f2", + "c4d6e3a8b9a856007a299b7f2b1112188547ebd1", "testharness" ], "storage-access-api/helpers.js": [ @@ -679824,7 +681025,7 @@ "testharness" ], "storage/opaque-origin.https.window.js": [ - "3e101dde6759b2b8c379d6adc95190742328630f", + "cc1d31fdf2c68322f72a40b1e84ec05ab1930779", "testharness" ], "storage/permission-query.https.any.js": [ @@ -680571,6 +681772,10 @@ "7a60e0280baa67ef8731b7bdc737788d326c3c24", "testharness" ], + "svg/animations/keysplines-x-limits.html": [ + "3c9ba65059f99dfbad262a4df65cf1eba0a4f0d8", + "testharness" + ], "svg/animations/multiple-animations-ending.html": [ "a9b7853bb0ed49a11af24d020766248ebd7d4bbe", "testharness" @@ -680604,7 +681809,7 @@ "testharness" ], "svg/animations/scripted/onhover-syncbases.html": [ - "86a0a40fa2de116c5b2076641180b24688d56f9b", + "de757f369af36db7a072ffa4b4216faa56063ecd", "testharness" ], "svg/animations/scripted/paced-value-animation-overwrites-keyTimes.html": [ @@ -685224,7 +686429,7 @@ "support" ], "tools/ci/tcdownload.py": [ - "91c763a7acdd3416d7eff55407bf8f73b840d96a", + "46e9005740d39d3a9fcd136f5aeb7effcc3087e6", "support" ], "tools/ci/tests/test_jobs.py": [ @@ -685316,7 +686521,7 @@ "support" ], "tools/lint/lint.py": [ - "48a275bcf29df6264258da3885e0e5f83a7ec85a", + "7689c359928d6be0f58384dfdc22d8eaa9f0d932", "support" ], "tools/lint/rules.py": [ @@ -690136,7 +691341,7 @@ "support" ], "tools/wptrunner/requirements.txt": [ - "d6c7a4ff3983663d088c64f6608e3fcf7de3bbfe", + "3584c93a199716d0b9809dc4180195647887d1a0", "support" ], "tools/wptrunner/requirements_android_webview.txt": [ @@ -691396,7 +692601,7 @@ "support" ], "trusted-types/trusted-types-eval-reporting.tentative.https.html": [ - "309873cb1f8028ecb071ec5db3dfda62337e6b43", + "4ec5db1adce7478cc3e97f942a9de68f1263d31d", "testharness" ], "trusted-types/trusted-types-eval-reporting.tentative.https.html.headers": [ @@ -693872,7 +695077,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-001.html": [ - "5c9ec84e8db79f73ac1423258a84bf0d18d70a5f", + "5bd0ae2b1edbb508d45ac64258332fcaddf5434c", "testharness" ], "web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-002.html": [ @@ -694348,7 +695553,7 @@ "support" ], "webaudio/resources/audit.js": [ - "1876c0fc77174d861d3847f874dbad26c737d430", + "2aac1fffb492ea46e737257df08a09e65f6d3415", "support" ], "webaudio/resources/biquad-filters.js": [ @@ -694756,7 +695961,7 @@ "support" ], "webaudio/the-audio-api/the-audioworklet-interface/audioworklet-addmodule-resolution.https.html": [ - "e94621296a3114ddbc53f26d74c330d3496dac63", + "dc324b22d6539d5383ed53f68ab911f6e96fd0dd", "testharness" ], "webaudio/the-audio-api/the-audioworklet-interface/audioworklet-audioparam-size.https.html": [ @@ -695168,7 +696373,7 @@ "testharness" ], "webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html": [ - "3e364eb7b359948402ef8ecdb287a5f55bb80fc3", + "b1f18d397d4fbcf3150e76aa478ce1a00a64e217", "testharness" ], "webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/no-cors.https.html": [ @@ -695192,7 +696397,7 @@ "testharness" ], "webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-routing.html": [ - "2e04ab6a3f248e69846cadbdc41c5369c406f519", + "816eba0b29ae616e09099544e839b85bb0a8bea5", "testharness" ], "webaudio/the-audio-api/the-offlineaudiocontext-interface/.gitkeep": [ @@ -695228,7 +696433,7 @@ "testharness" ], "webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html": [ - "d330c9c3de4482ee70c036e0ab7ff8feb1fd5a36", + "c434aa8c6a50bc2763f7a9233db06466c501c7ac", "testharness" ], "webaudio/the-audio-api/the-pannernode-interface/distance-exponential.html": [ @@ -695320,7 +696525,7 @@ "testharness" ], "webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html": [ - "a2e40777d4285732622fe0776f5e862276bf41c9", + "81e64dc12e9c757b613ddd377c39ed313b3cea47", "testharness" ], "webaudio/the-audio-api/the-waveshapernode-interface/silent-inputs.html": [ @@ -702195,6 +703400,10 @@ "520afec2000721d04aae9ed89bca49297fa31d4b", "support" ], + "webxr/ar-module/idlharness.https.window.js": [ + "1268f4ea2a5eb228fb49a6f06d8905f8d9480ae7", + "testharness" + ], "webxr/events_input_source_recreation.https.html": [ "ecb4b022bf09410cae44b4f5a3c71bc5c054181e", "testharness" @@ -702219,6 +703428,10 @@ "f76847a8769073bb4753702f32dd5c2ccc9d3532", "testharness" ], + "webxr/gamepads-module/idlharness.https.window.js": [ + "4509c67a847109f2fdaed5be49c87777e1927a12", + "testharness" + ], "webxr/getInputPose_handedness.https.html": [ "5a310c6dd77274631d0ef9e751c6f195def9c3d3", "testharness" @@ -702412,7 +703625,7 @@ "testharness" ], "webxr/xrSession_input_events_end.https.html": [ - "37e020605a7e88320c42e054f867f611955c5713", + "a932aad2fad78ceb2449928773da3ecfe237b8e7", "testharness" ], "webxr/xrSession_prevent_multiple_exclusive.https.html": [ @@ -702488,7 +703701,7 @@ "testharness" ], "webxr/xrWebGLLayer_constructor.https.html": [ - "7e57f4286c66ea9f8380791840dada3d82b611fe", + "0584da79c12def757f951ec53c4c048f18c39b8c", "testharness" ], "webxr/xrWebGLLayer_framebuffer_draw.https.html": [ @@ -703955,22 +705168,14 @@ "bbaf66d3383e0957c5ab12ca03688c507081d86d", "testharness" ], - "workers/semantics/interface-objects/003.html": [ - "99e8b3a0f3dd426eb4b1a5f22a2fd0fcab01d98d", + "workers/semantics/interface-objects/003.any.js": [ + "1942a4658dfb8e2ecab52c914af9aff8cf79cc2a", "testharness" ], - "workers/semantics/interface-objects/003.js": [ - "a91e7c38759f23e9ca50602a853d67a26830adad", - "support" - ], - "workers/semantics/interface-objects/004.html": [ - "b4a09c50e4e50983f814fb08fc0d797a661b2ff5", + "workers/semantics/interface-objects/004.any.js": [ + "358af74ca2c2bda6a0805ec8bded53a92674eb17", "testharness" ], - "workers/semantics/interface-objects/004.js": [ - "00e50d19cae409d6b69688e22ed926ac9893e2d9", - "support" - ], "workers/semantics/multiple-workers/001.html": [ "f9e2bbeabab16766d162a030f2318894c5537b1f", "testharness" @@ -706168,7 +707373,7 @@ "testharness" ], "xhr/xmlhttprequest-sync-default-feature-policy.sub.html": [ - "5ad5557700d79cb0104a5a5db52afdfa0906533b", + "ab5b78b77c66ee5bdca8e7acb5fb61f18d9574c1", "testharness" ], "xhr/xmlhttprequest-sync-not-hang-scriptloader-subframe.html": [ diff --git a/tests/wpt/metadata/css/CSS2/floats/new-fc-beside-float-with-margin-rtl.html.ini b/tests/wpt/metadata/css/CSS2/floats/new-fc-beside-float-with-margin-rtl.html.ini new file mode 100644 index 00000000000..ad46fa14832 --- /dev/null +++ b/tests/wpt/metadata/css/CSS2/floats/new-fc-beside-float-with-margin-rtl.html.ini @@ -0,0 +1,2 @@ +[new-fc-beside-float-with-margin-rtl.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/floats/zero-width-floats-positioning.tentative.html.ini b/tests/wpt/metadata/css/CSS2/floats/zero-width-floats-positioning.tentative.html.ini new file mode 100644 index 00000000000..a0b8fea8d2d --- /dev/null +++ b/tests/wpt/metadata/css/CSS2/floats/zero-width-floats-positioning.tentative.html.ini @@ -0,0 +1,2 @@ +[zero-width-floats-positioning.tentative.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-align/parsing/gap-shorthand.html.ini b/tests/wpt/metadata/css/css-align/parsing/gap-shorthand.html.ini index 68b32a1fd27..f92e47126c8 100644 --- a/tests/wpt/metadata/css/css-align/parsing/gap-shorthand.html.ini +++ b/tests/wpt/metadata/css/css-align/parsing/gap-shorthand.html.ini @@ -11,3 +11,27 @@ [e.style['gap'\] = "10px normal" should set the longhand values] expected: FAIL + [e.style['gap'\] = "10px normal" should set column-gap] + expected: FAIL + + [e.style['gap'\] = "normal calc(20% + 10px)" should set row-gap] + expected: FAIL + + [e.style['gap'\] = "10px 20%" should set row-gap] + expected: FAIL + + [e.style['gap'\] = "10px normal" should set row-gap] + expected: FAIL + + [e.style['gap'\] = "normal" should set row-gap] + expected: FAIL + + [e.style['gap'\] = "normal" should set column-gap] + expected: FAIL + + [e.style['gap'\] = "normal calc(20% + 10px)" should set column-gap] + expected: FAIL + + [e.style['gap'\] = "10px 20%" should set column-gap] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-align/parsing/place-content-shorthand.html.ini b/tests/wpt/metadata/css/css-align/parsing/place-content-shorthand.html.ini index 23e6b5e5544..7bda4a5b069 100644 --- a/tests/wpt/metadata/css/css-align/parsing/place-content-shorthand.html.ini +++ b/tests/wpt/metadata/css/css-align/parsing/place-content-shorthand.html.ini @@ -14,3 +14,33 @@ [e.style['place-content'\] = "last baseline flex-start" should set the longhand values] expected: FAIL + [e.style['place-content'\] = "first baseline" should set justify-content] + expected: FAIL + + [e.style['place-content'\] = "normal" should set justify-content] + expected: FAIL + + [e.style['place-content'\] = "space-evenly unsafe end" should set align-content] + expected: FAIL + + [e.style['place-content'\] = "last baseline flex-start" should set justify-content] + expected: FAIL + + [e.style['place-content'\] = "last baseline flex-start" should set align-content] + expected: FAIL + + [e.style['place-content'\] = "space-around" should set align-content] + expected: FAIL + + [e.style['place-content'\] = "first baseline" should set align-content] + expected: FAIL + + [e.style['place-content'\] = "normal" should set align-content] + expected: FAIL + + [e.style['place-content'\] = "space-around" should set justify-content] + expected: FAIL + + [e.style['place-content'\] = "space-evenly unsafe end" should set justify-content] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-align/parsing/place-items-shorthand.html.ini b/tests/wpt/metadata/css/css-align/parsing/place-items-shorthand.html.ini index e4af2f3992f..fbc705c3a50 100644 --- a/tests/wpt/metadata/css/css-align/parsing/place-items-shorthand.html.ini +++ b/tests/wpt/metadata/css/css-align/parsing/place-items-shorthand.html.ini @@ -11,3 +11,27 @@ [e.style['place-items'\] = "first baseline" should set the longhand values] expected: FAIL + [e.style['place-items'\] = "stretch right legacy" should set align-items] + expected: FAIL + + [e.style['place-items'\] = "normal" should set align-items] + expected: FAIL + + [e.style['place-items'\] = "last baseline flex-start" should set align-items] + expected: FAIL + + [e.style['place-items'\] = "normal" should set justify-items] + expected: FAIL + + [e.style['place-items'\] = "last baseline flex-start" should set justify-items] + expected: FAIL + + [e.style['place-items'\] = "first baseline" should set align-items] + expected: FAIL + + [e.style['place-items'\] = "stretch right legacy" should set justify-items] + expected: FAIL + + [e.style['place-items'\] = "first baseline" should set justify-items] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-align/parsing/place-self-shorthand.html.ini b/tests/wpt/metadata/css/css-align/parsing/place-self-shorthand.html.ini index 0597a5b8c68..11c062e766c 100644 --- a/tests/wpt/metadata/css/css-align/parsing/place-self-shorthand.html.ini +++ b/tests/wpt/metadata/css/css-align/parsing/place-self-shorthand.html.ini @@ -11,3 +11,27 @@ [e.style['place-self'\] = "first baseline" should set the longhand values] expected: FAIL + [e.style['place-self'\] = "normal" should set align-self] + expected: FAIL + + [e.style['place-self'\] = "unsafe self-start stretch" should set align-self] + expected: FAIL + + [e.style['place-self'\] = "first baseline" should set justify-self] + expected: FAIL + + [e.style['place-self'\] = "unsafe self-start stretch" should set justify-self] + expected: FAIL + + [e.style['place-self'\] = "last baseline flex-start" should set align-self] + expected: FAIL + + [e.style['place-self'\] = "normal" should set justify-self] + expected: FAIL + + [e.style['place-self'\] = "first baseline" should set align-self] + expected: FAIL + + [e.style['place-self'\] = "last baseline flex-start" should set justify-self] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-backgrounds/parsing/border-image-width-computed.html.ini b/tests/wpt/metadata/css/css-backgrounds/parsing/border-image-width-computed.html.ini new file mode 100644 index 00000000000..bbf93406cad --- /dev/null +++ b/tests/wpt/metadata/css/css-backgrounds/parsing/border-image-width-computed.html.ini @@ -0,0 +1,4 @@ +[border-image-width-computed.html] + [Property border-image-width value '0' computes to '0'] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/percentage-heights-003.html.ini b/tests/wpt/metadata/css/css-flexbox/percentage-heights-003.html.ini index 1291e66cabd..254cec90415 100644 --- a/tests/wpt/metadata/css/css-flexbox/percentage-heights-003.html.ini +++ b/tests/wpt/metadata/css/css-flexbox/percentage-heights-003.html.ini @@ -5,9 +5,9 @@ [.flexbox 2] expected: FAIL - [.flexbox 5] + [.flexbox 6] expected: FAIL - [.flexbox 6] + [.flexbox 7] expected: FAIL diff --git a/tests/wpt/metadata/css/css-text-decor/parsing/text-decoration-shorthand.html.ini b/tests/wpt/metadata/css/css-text-decor/parsing/text-decoration-shorthand.html.ini new file mode 100644 index 00000000000..a416cf44931 --- /dev/null +++ b/tests/wpt/metadata/css/css-text-decor/parsing/text-decoration-shorthand.html.ini @@ -0,0 +1,10 @@ +[text-decoration-shorthand.html] + [e.style['text-decoration'\] = "overline dotted green" should set text-decoration-line] + expected: FAIL + + [e.style['text-decoration'\] = "overline dotted green" should set text-decoration-style] + expected: FAIL + + [e.style['text-decoration'\] = "overline dotted green" should set text-decoration-color] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini index c511d92d674..03f2f3fe9d1 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini @@ -1,4 +1,5 @@ [perspective-interpolation.html] + expected: CRASH [ perspective interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transitions/AnimationEffect-getComputedTiming.tentative.html.ini b/tests/wpt/metadata/css/css-transitions/AnimationEffect-getComputedTiming.tentative.html.ini index 7f5bbb7f31b..89a2a619d61 100644 --- a/tests/wpt/metadata/css/css-transitions/AnimationEffect-getComputedTiming.tentative.html.ini +++ b/tests/wpt/metadata/css/css-transitions/AnimationEffect-getComputedTiming.tentative.html.ini @@ -62,3 +62,6 @@ [delay of a new tranisition] expected: FAIL + [non-default easing of a new transition] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html.ini b/tests/wpt/metadata/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html.ini index c03a2664e97..44c9aacc065 100644 --- a/tests/wpt/metadata/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html.ini +++ b/tests/wpt/metadata/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html.ini @@ -8,3 +8,6 @@ [KeyframeEffect.getKeyframes() returns expected frames for a simple transition with a non-default easing function] expected: FAIL + [KeyframeEffect.getKeyframes() returns frames unaffected by a non-default easing function] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-values/clamp-length-computed.html.ini b/tests/wpt/metadata/css/css-values/clamp-length-computed.html.ini new file mode 100644 index 00000000000..1e17130fab5 --- /dev/null +++ b/tests/wpt/metadata/css/css-values/clamp-length-computed.html.ini @@ -0,0 +1,13 @@ +[clamp-length-computed.html] + [Property letter-spacing value 'clamp(10px, 5px, 30px)' computes to '10px'] + expected: FAIL + + [Property letter-spacing value 'clamp(10px, 35px, 30px)' computes to '30px'] + expected: FAIL + + [Property letter-spacing value 'clamp(30px, 100px, 20px)' computes to '30px'] + expected: FAIL + + [Property letter-spacing value 'clamp(10px, 20px, 30px)' computes to '20px'] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-values/clamp-length-serialize.html.ini b/tests/wpt/metadata/css/css-values/clamp-length-serialize.html.ini new file mode 100644 index 00000000000..f39169db7b6 --- /dev/null +++ b/tests/wpt/metadata/css/css-values/clamp-length-serialize.html.ini @@ -0,0 +1,7 @@ +[clamp-length-serialize.html] + [e.style['letter-spacing'\] = "clamp(1px, 2px, clamp(2px, 3px, 4px))" should set the property value] + expected: FAIL + + [e.style['letter-spacing'\] = "clamp(1px, 2px, 3px)" should set the property value] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-values/min-max-percentage-length-interpolation.html.ini b/tests/wpt/metadata/css/css-values/min-max-percentage-length-interpolation.html.ini new file mode 100644 index 00000000000..d59c7b30211 --- /dev/null +++ b/tests/wpt/metadata/css/css-values/min-max-percentage-length-interpolation.html.ini @@ -0,0 +1,2 @@ +[min-max-percentage-length-interpolation.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini b/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini new file mode 100644 index 00000000000..e6e1f29e274 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini @@ -0,0 +1,2 @@ +[matchMedia-display-none-iframe.html] + expected: ERROR diff --git a/tests/wpt/metadata/css/mediaqueries/aspect-ratio-serialization.html.ini b/tests/wpt/metadata/css/mediaqueries/aspect-ratio-serialization.html.ini new file mode 100644 index 00000000000..e87166456e6 --- /dev/null +++ b/tests/wpt/metadata/css/mediaqueries/aspect-ratio-serialization.html.ini @@ -0,0 +1,4 @@ +[aspect-ratio-serialization.html] + [<ratio> serializes with spaces around the integer.] + expected: FAIL + diff --git a/tests/wpt/metadata/css/mediaqueries/navigation-controls.tentative.html.ini b/tests/wpt/metadata/css/mediaqueries/navigation-controls.tentative.html.ini new file mode 100644 index 00000000000..f34e5d89c79 --- /dev/null +++ b/tests/wpt/metadata/css/mediaqueries/navigation-controls.tentative.html.ini @@ -0,0 +1,22 @@ +[navigation-controls.tentative.html] + [Should be parseable in JS: '(navigation-controls)'] + expected: FAIL + + [Should be parseable in a CSS stylesheet: '(navigation-controls: back-button)'] + expected: FAIL + + [Check that none evaluates to false in the boolean context] + expected: FAIL + + [Should be parseable in a CSS stylesheet: '(navigation-controls: none)'] + expected: FAIL + + [Should be parseable in JS: '(navigation-controls: none)'] + expected: FAIL + + [Should be parseable in a CSS stylesheet: '(navigation-controls)'] + expected: FAIL + + [Should be parseable in JS: '(navigation-controls: back-button)'] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini index 7e9e768846c..bb3703d3f92 100644 --- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini @@ -315,9 +315,6 @@ [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html] expected: FAIL - [<iframe>: separate response Content-Type: text/html */*] - expected: FAIL - [<iframe>: combined response Content-Type: text/html;" \\" text/plain] expected: FAIL @@ -327,6 +324,18 @@ [<iframe>: separate response Content-Type: text/html;" text/plain] expected: FAIL - [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] + [<iframe>: combined response Content-Type: text/html;" text/plain] + expected: FAIL + + [<iframe>: separate response Content-Type: text/html */*;charset=gbk] + expected: FAIL + + [<iframe>: separate response Content-Type: text/plain */*] + expected: FAIL + + [<iframe>: separate response Content-Type: text/html;" \\" text/plain] + expected: FAIL + + [<iframe>: combined response Content-Type: text/html;x=" text/plain] expected: FAIL diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini index d2df9b78483..2003288747e 100644 --- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini @@ -56,3 +56,9 @@ [separate text/javascript x/x] expected: FAIL + [separate text/javascript;charset=windows-1252 error text/javascript] + expected: FAIL + + [separate text/javascript ] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini index f8988fcd904..a639f15230c 100644 --- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini +++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini @@ -11,9 +11,6 @@ [X-Content-Type-Options%3A%20nosniff%0C] expected: FAIL - [X-Content-Type-Options%3A%20'NosniFF'] - expected: FAIL - [Content-Type-Options%3A%20nosniff] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini index 75d75b4cda2..51f8272a6de 100644 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini @@ -1,4 +1,4 @@ -[traverse_the_history_2.html] +[traverse_the_history_3.html] [Multiple history traversals, last would be aborted] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini new file mode 100644 index 00000000000..dc2e45516de --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini @@ -0,0 +1,4 @@ +[traverse_the_history_5.html] + [Multiple history traversals, last would be aborted] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini new file mode 100644 index 00000000000..16fa2c5cfc1 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini @@ -0,0 +1,4 @@ +[creating_browsing_context_test_01.html] + [first argument: absolute url] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html.ini index e02f179ec25..bf50d59df41 100644 --- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html.ini +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html.ini @@ -1,24 +1,5 @@ [open-features-negative-innerwidth-innerheight.html] type: testharness - expected: TIMEOUT [HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`] expected: FAIL - [features "innerheight=-404.5" should NOT set "height=404"] - expected: TIMEOUT - - [features "innerwidth=-404.5" should NOT set "width=404"] - expected: TIMEOUT - - [features "innerwidth=-404" should NOT set "width=404"] - expected: TIMEOUT - - [features "innerheight=-404e1" should NOT set "height=404"] - expected: TIMEOUT - - [features "innerheight=-404" should NOT set "height=404"] - expected: TIMEOUT - - [features "innerwidth=-404e1" should NOT set "width=404"] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html.ini index 23eefb8eaf9..e150c9d848f 100644 --- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html.ini +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html.ini @@ -1,24 +1,5 @@ [open-features-negative-screenx-screeny.html] type: testharness - expected: TIMEOUT [HTML: window.open `features`: negative values for legacy `screenx`, `screeny`] expected: FAIL - [features "screenx=-204" should NOT set "left=204"] - expected: TIMEOUT - - [features "screeny=-204" should NOT set "top=204"] - expected: TIMEOUT - - [features "screeny=-204.5" should NOT set "top=204"] - expected: TIMEOUT - - [features "screeny=-0" should NOT set "top=204"] - expected: TIMEOUT - - [features "screenx=-0" should NOT set "left=204"] - expected: TIMEOUT - - [features "screenx=-204.5" should NOT set "left=204"] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini index 940516ddd33..ad8840fbb68 100644 --- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini @@ -1,24 +1,5 @@ [open-features-negative-top-left.html] type: testharness - expected: TIMEOUT [HTML: window.open `features`: negative values for `top`, `left`] expected: FAIL - [features "top=-204" should NOT set "top=204"] - expected: TIMEOUT - - [features "top=-204.5" should NOT set "top=204"] - expected: TIMEOUT - - [features "left=-204" should NOT set "left=204"] - expected: TIMEOUT - - [features "top=-0" should NOT set "top=204"] - expected: TIMEOUT - - [features "left=-204.5" should NOT set "left=204"] - expected: TIMEOUT - - [features "left=-0" should NOT set "left=204"] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html.ini index 9027336b453..d1ed9088b2b 100644 --- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html.ini +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html.ini @@ -1,24 +1,5 @@ [open-features-negative-width-height.html] type: testharness - expected: TIMEOUT [HTML: window.open `features`: negative values for `width`, `height`] expected: FAIL - [features "height=-404" should NOT set "height=404"] - expected: TIMEOUT - - [features "height=-404e1" should NOT set "height=404"] - expected: TIMEOUT - - [features "height=-404.5" should NOT set "height=404"] - expected: TIMEOUT - - [features "width=-404" should NOT set "width=404"] - expected: TIMEOUT - - [features "width=-404e1" should NOT set "width=404"] - expected: TIMEOUT - - [features "width=-404.5" should NOT set "width=404"] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html.ini index 4e44584b123..a70e9dbad4d 100644 --- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html.ini +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html.ini @@ -1,48 +1,32 @@ [open-features-non-integer-height.html] type: testharness - expected: TIMEOUT [HTML: window.open `features`: non-integer values for feature `height`] expected: FAIL [features "height=405*3" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "height=405.32" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "height=405e1" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "height=405/5" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "height=405^4" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "height=405.5" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "height=405e-1" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "height=405 " should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "height=405LLl" should set "height=405"] - expected: TIMEOUT - - [features "height=/404" should NOT set "height=404"] - expected: TIMEOUT - - [top=0,left=0,width=401,: absence of feature "height" should be treated same as "height=0"] - expected: TIMEOUT - - [top=0,left=0: absence of feature "height" should be treated same as "height=0"] - expected: TIMEOUT - - [features "height=_404" should NOT set "height=404"] - expected: TIMEOUT - - [features "height=L404" should NOT set "height=404"] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html.ini index fcaeae5336d..779531b4a98 100644 --- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html.ini +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html.ini @@ -1,42 +1,32 @@ [open-features-non-integer-innerheight.html] type: testharness - expected: TIMEOUT [HTML: window.open `features`: non-integer values for legacy feature `innerheight`] expected: FAIL [features "innerheight=405e-1" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "innerheight=405LLl" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "innerheight=405^4" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "innerheight=405e1" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "innerheight=405 " should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "innerheight=405/5" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "innerheight=405.32" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "innerheight=405.5" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "innerheight=405*3" should set "height=405"] - expected: TIMEOUT - - [features "innerheight=_404" should NOT set "height=404"] - expected: TIMEOUT - - [features "innerheight=L404" should NOT set "height=404"] - expected: TIMEOUT - - [features "innerheight=/404" should NOT set "height=404"] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html.ini index 42327fedd27..7a1b258d52e 100644 --- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html.ini +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html.ini @@ -1,42 +1,32 @@ [open-features-non-integer-innerwidth.html] type: testharness - expected: TIMEOUT [HTML: window.open `features`: non-integer values for legacy feature `innerwidth`] expected: FAIL [features "innerwidth=405e-1" should set "width=405"] - expected: TIMEOUT + expected: FAIL [features "innerwidth=405*3" should set "width=405"] - expected: TIMEOUT + expected: FAIL [features "innerwidth=405.5" should set "width=405"] - expected: TIMEOUT + expected: FAIL [features "innerwidth=405e1" should set "width=405"] - expected: TIMEOUT + expected: FAIL [features "innerwidth=405.32" should set "width=405"] - expected: TIMEOUT + expected: FAIL [features "innerwidth=405 " should set "width=405"] - expected: TIMEOUT + expected: FAIL [features "innerwidth=405LLl" should set "width=405"] - expected: TIMEOUT + expected: FAIL [features "innerwidth=405/5" should set "width=405"] - expected: TIMEOUT + expected: FAIL [features "innerwidth=405^4" should set "width=405"] - expected: TIMEOUT - - [features "innerwidth=/404" should NOT set "width=404"] - expected: TIMEOUT - - [features "innerwidth=_404" should NOT set "width=404"] - expected: TIMEOUT - - [features "innerwidth=L404" should NOT set "width=404"] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html.ini index a8e4fe06618..caba4124f0b 100644 --- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html.ini +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html.ini @@ -1,42 +1,32 @@ [open-features-non-integer-left.html] type: testharness - expected: TIMEOUT [HTML: window.open `features`: non-integer values for feature `left`] expected: FAIL [features "left=105e1" should set "left=105"] - expected: TIMEOUT + expected: FAIL [features "left=105 " should set "left=105"] - expected: TIMEOUT + expected: FAIL [features "left=105/5" should set "left=105"] - expected: TIMEOUT + expected: FAIL [features "left=105e-1" should set "left=105"] - expected: TIMEOUT + expected: FAIL [features "left=105^4" should set "left=105"] - expected: TIMEOUT + expected: FAIL [features "left=105LLl" should set "left=105"] - expected: TIMEOUT + expected: FAIL [features "left=105.32" should set "left=105"] - expected: TIMEOUT + expected: FAIL [features "left=105*3" should set "left=105"] - expected: TIMEOUT + expected: FAIL [features "left=105.5" should set "left=105"] - expected: TIMEOUT - - [features "left=L104" should NOT set "left=104"] - expected: TIMEOUT - - [features "left=/104" should NOT set "left=104"] - expected: TIMEOUT - - [features "left=_104" should NOT set "left=104"] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html.ini index 64a08faf0e6..9ace8a4cbdb 100644 --- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html.ini +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html.ini @@ -1,42 +1,32 @@ [open-features-non-integer-screenx.html] type: testharness - expected: TIMEOUT [HTML: window.open `features`: non-integer values for legacy feature `screenx`] expected: FAIL [features "screenx=105.5" should set "left=105"] - expected: TIMEOUT + expected: FAIL [features "screenx=105e1" should set "left=105"] - expected: TIMEOUT + expected: FAIL [features "screenx=105 " should set "left=105"] - expected: TIMEOUT + expected: FAIL [features "screenx=105*3" should set "left=105"] - expected: TIMEOUT + expected: FAIL [features "screenx=105e-1" should set "left=105"] - expected: TIMEOUT + expected: FAIL [features "screenx=105^4" should set "left=105"] - expected: TIMEOUT + expected: FAIL [features "screenx=105LLl" should set "left=105"] - expected: TIMEOUT + expected: FAIL [features "screenx=105/5" should set "left=105"] - expected: TIMEOUT + expected: FAIL [features "screenx=105.32" should set "left=105"] - expected: TIMEOUT - - [features "screenx=_104" should NOT set "left=104"] - expected: TIMEOUT - - [features "screenx=L104" should NOT set "left=104"] - expected: TIMEOUT - - [features "screenx=/104" should NOT set "left=104"] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html.ini index 4f22ef4ef29..a82bd0f981a 100644 --- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html.ini +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html.ini @@ -1,42 +1,32 @@ [open-features-non-integer-screeny.html] type: testharness - expected: TIMEOUT [HTML: window.open `features`: non-integer values for legacy feature `screeny`] expected: FAIL [features "screeny=405^4" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "screeny=405e-1" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "screeny=405LLl" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "screeny=405e1" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "screeny=405 " should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "screeny=405/5" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "screeny=405*3" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "screeny=405.32" should set "height=405"] - expected: TIMEOUT + expected: FAIL [features "screeny=405.5" should set "height=405"] - expected: TIMEOUT - - [features "screeny=_404" should NOT set "height=404"] - expected: TIMEOUT - - [features "screeny=L404" should NOT set "height=404"] - expected: TIMEOUT - - [features "screeny=/404" should NOT set "height=404"] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html.ini index 9d841e61bc0..28f93ee71b5 100644 --- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html.ini +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html.ini @@ -1,48 +1,32 @@ [open-features-non-integer-width.html] type: testharness - expected: TIMEOUT [HTML: window.open `features`: non-integer values for feature `width`] expected: FAIL [features "width=405^4" should set "width=405"] - expected: TIMEOUT + expected: FAIL [features "width=405.5" should set "width=405"] - expected: TIMEOUT + expected: FAIL [features "width=405e1" should set "width=405"] - expected: TIMEOUT + expected: FAIL [features "width=405 " should set "width=405"] - expected: TIMEOUT + expected: FAIL [features "width=405.32" should set "width=405"] - expected: TIMEOUT + expected: FAIL [features "width=405LLl" should set "width=405"] - expected: TIMEOUT + expected: FAIL [features "width=405*3" should set "width=405"] - expected: TIMEOUT + expected: FAIL [features "width=405e-1" should set "width=405"] - expected: TIMEOUT + expected: FAIL [features "width=405/5" should set "width=405"] - expected: TIMEOUT - - [top=0,left=0: absence of feature "width" should be treated same as "width=0"] - expected: TIMEOUT - - [features "width=_404" should NOT set "width=404"] - expected: TIMEOUT - - [top=0,left=0,height=401,: absence of feature "width" should be treated same as "width=0"] - expected: TIMEOUT - - [features "width=/404" should NOT set "width=404"] - expected: TIMEOUT - - [features "width=L404" should NOT set "width=404"] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/tables/table-column-width.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/tables/table-column-width.html.ini new file mode 100644 index 00000000000..b0c28c2b4e3 --- /dev/null +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/tables/table-column-width.html.ini @@ -0,0 +1,2 @@ +[table-column-width.html] + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-aspect-ratio.html.ini b/tests/wpt/metadata/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-aspect-ratio.html.ini new file mode 100644 index 00000000000..cdaa9983929 --- /dev/null +++ b/tests/wpt/metadata/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-aspect-ratio.html.ini @@ -0,0 +1,4 @@ +[video-aspect-ratio.html] + [Video width and height attributes are not used to infer aspect-ratio] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/srcset/avoid-reload-on-resize.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/srcset/avoid-reload-on-resize.html.ini deleted file mode 100644 index 317900a024d..00000000000 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/srcset/avoid-reload-on-resize.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[avoid-reload-on-resize.html] - [Avoid srcset image reloads when viewport resizes] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini deleted file mode 100644 index 9e522297c94..00000000000 --- a/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini +++ /dev/null @@ -1,7 +0,0 @@ -[toggleEvent.html] - [Calling open twice on 'details' fires only one toggle event] - expected: FAIL - - [Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element] - expected: FAIL - diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini index 034d9baebfa..496bad988c6 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini @@ -1,5 +1,4 @@ [promise-rejection-events.html] - expected: TIMEOUT [delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire] expected: FAIL @@ -9,6 +8,3 @@ [no unhandledrejection/rejectionhandled: rejection handler attached synchronously to a promise created from createImageBitmap] expected: FAIL - [rejectionhandled is dispatched from a queued task, and not immediately] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/permissions/permissions-query-feature-policy-attribute.https.sub.html.ini b/tests/wpt/metadata/permissions/permissions-query-feature-policy-attribute.https.sub.html.ini new file mode 100644 index 00000000000..bff0021798f --- /dev/null +++ b/tests/wpt/metadata/permissions/permissions-query-feature-policy-attribute.https.sub.html.ini @@ -0,0 +1,4 @@ +[permissions-query-feature-policy-attribute.https.sub.html] + [Permission.state is "denied" in cross-origin iframes.] + expected: FAIL + diff --git a/tests/wpt/metadata/resource-timing/resource_TAO_origin.htm.ini b/tests/wpt/metadata/resource-timing/resource_TAO_origin.htm.ini index 5c59982f790..06cbc30aae8 100644 --- a/tests/wpt/metadata/resource-timing/resource_TAO_origin.htm.ini +++ b/tests/wpt/metadata/resource-timing/resource_TAO_origin.htm.ini @@ -5,12 +5,3 @@ [responseStart should not be 0 in timing-allow cross-origin request.] expected: FAIL - [secureConnectionStart should be 0 in cross-origin request since no ssl!] - expected: FAIL - - [The iframe should have one resource timing entry.] - expected: FAIL - - [responseEnd should not be 0 in timing-allow cross-origin request.] - expected: FAIL - diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/active-processing.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/active-processing.https.html.ini index 116273a1a34..c7a155de23d 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/active-processing.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/active-processing.https.html.ini @@ -1,2 +1,19 @@ [active-processing.https.html] - expected: ERROR + [X Number of channels in input[-1:\]: Expected 1 for all values but found 1 unexpected values: \n\tIndex\tActual\n\t[0\]\t0] + expected: FAIL + + [X Number of channels changed is not true. Got false.] + expected: FAIL + + [< [verify count change\] 3 out of 4 assertions were failed.] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 1 out of 2 tasks were failed.] + expected: FAIL + + [Executing "Setup graph"] + expected: FAIL + + [X Number of channels in input[0:-2\]: Expected 7 for all values but found 1279 unexpected values: \n\tIndex\tActual\n\t[0\]\t0\n\t[1\]\t0\n\t[2\]\t0\n\t[3\]\t0\n\t...and 1275 more errors.] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini index e568498d654..5729621467c 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini @@ -89,3 +89,9 @@ [X SNR (-428.623168034801 dB) is not greater than or equal to 65.737. Got -428.623168034801.] expected: FAIL + [X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t1.9724091887474060e-1\t9.5236867666244507e-1\t7.5512775778770447e-1\t7.9289436569253091e-1\t3.8985999999999999e-3\n\t[60\]\t-2.2450675070285797e-1\t-5.8084785938262939e-1\t3.5634110867977142e-1\t6.1348441407448528e-1\t3.8985999999999999e-3\n\t[90\]\t-3.7808802723884583e-1\t-5.9811043739318848e-1\t2.2002241015434265e-1\t3.6786251568070089e-1\t3.8985999999999999e-3\n\t[120\]\t7.6881676912307739e-1\t9.4563448429107666e-1\t1.7681771516799927e-1\t1.8698315057805445e-1\t3.8985999999999999e-3\n\t[151\]\t5.4644601186737418e-4\t-4.1306272149085999e-2\t4.1852718160953373e-2\t1.0132291292202573e+0\t3.8985999999999999e-3\n\t...and 1415 more errors.\n\tMax AbsError of 9.8619294445961714e-1 at index of 1178.\n\t[1178\]\t-1.3593670912086964e-2\t-9.9978661537170410e-1\t9.8619294445961714e-1\t9.8640342778840562e-1\t3.8985999999999999e-3\n\tMax RelError of 1.0132291292202573e+0 at index of 151.\n] + expected: FAIL + + [X SNR (19.538850442445742 dB) is not greater than or equal to 65.737. Got 19.538850442445742.] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume.html.ini index ea96d4b24a2..7aa97f3b4f6 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume.html.ini @@ -1,8 +1,20 @@ [audiocontext-suspend-resume.html] - expected: ERROR + expected: TIMEOUT [X p1 = offlineContext.suspend() incorrectly threw TypeError: "offlineContext.suspend is not a function".] expected: FAIL [X p1 instanceof Promise is not true. Got false.] expected: FAIL + [X p2 resolved incorrectly. Got Promise.] + expected: FAIL + + [< [test-suspend\] 2 out of 4 assertions were failed.] + expected: FAIL + + [Executing "test-suspend"] + expected: FAIL + + [< [test-resume\] 1 out of 4 assertions were failed.] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions.html.ini index 312d61c2c68..12d17b1b1fe 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions.html.ini @@ -1,5 +1,4 @@ [audiocontextoptions.html] - expected: ERROR [X creating two high latency contexts incorrectly threw TypeError: "'0' is not a valid enum value for enumeration 'AudioContextLatencyCategory'.".] expected: FAIL @@ -9,3 +8,21 @@ [X context = new AudioContext({'latencyHint': validLatency}) incorrectly threw TypeError: "'0' is not a valid enum value for enumeration 'AudioContextLatencyCategory'.".] expected: FAIL + [X context = new AudioContext({sampleRate: 1}) did not throw an exception.] + expected: FAIL + + [< [test-audiocontextoptions-latencyHint-double\] 3 out of 6 assertions were failed.] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 2 out of 3 tasks were failed.] + expected: FAIL + + [Executing "test-audiocontextoptions-latencyHint-double"] + expected: FAIL + + [X context = new AudioContext({sampleRate: 1000000}) did not throw an exception.] + expected: FAIL + + [< [test-audiocontextoptions-sampleRate\] 2 out of 4 assertions were failed.] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html.ini index fcc810e1dd7..ba34af314d3 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html.ini @@ -1,2 +1,7 @@ [audionode-connect-method-chaining.html] - expected: ERROR + [Executing "from-dictionary"] + expected: FAIL + + [Executing "media-group"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audionode-interface/audionode-connect-order.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audionode-interface/audionode-connect-order.html.ini index 416dfa0ae18..07047dbcc70 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audionode-interface/audionode-connect-order.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audionode-interface/audionode-connect-order.html.ini @@ -1,2 +1,4 @@ [audionode-connect-order.html] - expected: ERROR + [Executing "Test connections"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html.ini index cad8cb42b1d..305e46c29a3 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html.ini @@ -1,2 +1,22 @@ [audionode-disconnect-audioparam.html] - expected: ERROR + [X splitter.disconnect(gain1.gain, 2) did not throw an exception.] + expected: FAIL + + [X gain1.disconnect(gain3.gain) did not throw an exception.] + expected: FAIL + + [< [exceptions\] 3 out of 3 assertions were failed.] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 1 out of 3 tasks were failed.] + expected: FAIL + + [Executing "disconnect(AudioParam, output)"] + expected: FAIL + + [X splitter.disconnect(gain1.gain, 1) did not throw an exception.] + expected: FAIL + + [Executing "disconnect(AudioParam)"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/adding-events.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/adding-events.html.ini index 56096461d86..a5a62565810 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/adding-events.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/adding-events.html.ini @@ -1,2 +1,7 @@ [adding-events.html] - expected: ERROR + [Executing "expoRamp"] + expected: FAIL + + [Executing "linearRamp"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html.ini index 0e6dd67be7a..c1a94c07694 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html.ini @@ -1,5 +1,4 @@ [audioparam-setValueCurve-exceptions.html] - expected: ERROR [< [setValueCurve\] 5 out of 6 assertions were failed.] expected: FAIL @@ -48,3 +47,33 @@ [X setValueCurveAtTime(curve, 0.03125, 0.01) did not throw an exception.] expected: FAIL + [Executing "automations"] + expected: FAIL + + [< [curve overlap\] 6 out of 8 assertions were failed.] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 3 out of 6 tasks were failed.] + expected: FAIL + + [X g.gain.setValueCurveAtTime([1,2,3\], 5, 5) did not throw an exception.] + expected: FAIL + + [X second g.gain.setValueCurveAtTime([1,2,3\], 5, 10) did not throw an exception.] + expected: FAIL + + [X g.gain.setValueCurveAtTime([1,2,3\], 6, 9) did not throw an exception.] + expected: FAIL + + [X g.gain.setValueCurveAtTime([1,2,3\], 10, 10) did not throw an exception.] + expected: FAIL + + [< [automations\] 4 out of 10 assertions were failed.] + expected: FAIL + + [X g.gain.setValueCurveAtTime([1,2,3\], 2.5, 10) did not throw an exception.] + expected: FAIL + + [X g.gain.setValueCurveAtTime([1,2,3\], 4, 11) did not throw an exception.] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html.ini index 084e1dec905..e8b876936e0 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html.ini @@ -1,5 +1,4 @@ [automation-rate.html] - expected: ERROR [< [AudioBufferSourceNode\] 2 out of 4 assertions were failed.] expected: FAIL @@ -9,3 +8,12 @@ [X Set AudioBufferSourceNode.playbackRate.automationRate to "a-rate" did not throw an exception.] expected: FAIL + [Executing "DelayNode"] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 1 out of 10 tasks were failed.] + expected: FAIL + + [Executing "DynamicsCompressorNode"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https.html.ini index ddf48045720..cdec8c9952f 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https.html.ini @@ -1,2 +1,7 @@ [k-rate-audioworklet.https.html] - expected: ERROR + [Executing "Create Test Worklet"] + expected: FAIL + + [Executing "AudioWorklet k-rate AudioParam"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay.html.ini index ee7a689ec43..b3eb0740b53 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay.html.ini @@ -1,2 +1,4 @@ [k-rate-delay.html] - expected: ERROR + [Executing "Test k-rate DelayNode"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-exponentialRampToValueAtTime.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-exponentialRampToValueAtTime.html.ini index 40b86091760..da47b2bae11 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-exponentialRampToValueAtTime.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-exponentialRampToValueAtTime.html.ini @@ -1,2 +1,4 @@ [retrospective-exponentialRampToValueAtTime.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-linearRampToValueAtTime.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-linearRampToValueAtTime.html.ini index b1b685eaef1..cc895942924 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-linearRampToValueAtTime.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-linearRampToValueAtTime.html.ini @@ -1,2 +1,4 @@ [retrospective-linearRampToValueAtTime.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-setTargetAtTime.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-setTargetAtTime.html.ini index b100363750f..fd74d662693 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-setTargetAtTime.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-setTargetAtTime.html.ini @@ -1,2 +1,4 @@ [retrospective-setTargetAtTime.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-setValueAtTime.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-setValueAtTime.html.ini index c9647f410fd..5ee2d1cfc02 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-setValueAtTime.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-setValueAtTime.html.ini @@ -1,2 +1,4 @@ [retrospective-setValueAtTime.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-setValueCurveAtTime.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-setValueCurveAtTime.html.ini index 28e1d12c231..ec7e865eeeb 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-setValueCurveAtTime.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/retrospective-setValueCurveAtTime.html.ini @@ -1,2 +1,4 @@ [retrospective-setValueCurveAtTime.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-addmodule-resolution.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-addmodule-resolution.https.html.ini index 2fa755c898b..ad6eb7b82b9 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-addmodule-resolution.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-addmodule-resolution.https.html.ini @@ -1,4 +1,5 @@ [audioworklet-addmodule-resolution.https.html] + expected: ERROR [\n Test the invocation order of AudioWorklet.addModule() and BaseAudioContext\n ] expected: FAIL diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-audioparam-size.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-audioparam-size.https.html.ini index 96c7333c9aa..6c3371545b8 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-audioparam-size.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-audioparam-size.https.html.ini @@ -1,2 +1,7 @@ [audioworklet-audioparam-size.https.html] - expected: ERROR + [Executing "Initializing AudioWorklet and Context"] + expected: FAIL + + [Executing "Verify Size of AudioParam Arrays"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-audioparam.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-audioparam.https.html.ini index 5ae63f521cc..a6129b22cee 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-audioparam.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-audioparam.https.html.ini @@ -1,2 +1,7 @@ [audioworklet-audioparam.https.html] - expected: ERROR + [Executing "Verifying AudioParam in AudioWorkletNode"] + expected: FAIL + + [Executing "Initializing AudioWorklet and Context"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-automatic-pull.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-automatic-pull.https.html.ini index a9dede82004..ee6ba2e5ffb 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-automatic-pull.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-automatic-pull.https.html.ini @@ -1,2 +1,4 @@ [audioworkletnode-automatic-pull.https.html] - expected: ERROR + [Executing "setup-worklet"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-channel-count.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-channel-count.https.html.ini index 96ee5123835..075de341a4a 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-channel-count.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-channel-count.https.html.ini @@ -1,2 +1,19 @@ [audioworkletnode-channel-count.https.html] - expected: ERROR + [X Second half of Channel #1: Expected 2 for all values but found 128 unexpected values: \n\tIndex\tActual\n\t[0\]\t0\n\t[1\]\t0\n\t[2\]\t0\n\t[3\]\t0\n\t...and 124 more errors.] + expected: FAIL + + [X Second half of Channel #0: Expected 1 for all values but found 128 unexpected values: \n\tIndex\tActual\n\t[0\]\t0\n\t[1\]\t0\n\t[2\]\t0\n\t[3\]\t0\n\t...and 124 more errors.] + expected: FAIL + + [X Second half of Channel #2: Expected 3 for all values but found 128 unexpected values: \n\tIndex\tActual\n\t[0\]\t0\n\t[1\]\t0\n\t[2\]\t0\n\t[3\]\t0\n\t...and 124 more errors.] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 1 out of 2 tasks were failed.] + expected: FAIL + + [Executing "setup-buffer-and-worklet"] + expected: FAIL + + [< [verify-rendered-buffer\] 3 out of 6 assertions were failed.] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html.ini index af49d11d616..2ee588122bf 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html.ini @@ -1,8 +1,13 @@ [audioworkletnode-construction.https.html] - expected: ERROR [X Creating a node before loading a module should throw. threw "ReferenceError" instead of InvalidStateError.] expected: FAIL [< [construction-before-module-loading\] 1 out of 1 assertions were failed.] expected: FAIL + [Executing "construction-after-module-loading"] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 1 out of 2 tasks were failed.] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-constructor-options.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-constructor-options.https.html.ini index 4a7d9fded52..ce0841682d3 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-constructor-options.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-constructor-options.https.html.ini @@ -1,2 +1,34 @@ [audioworkletnode-constructor-options.https.html] - expected: ERROR + [< [audio-node-options\] 1 out of 1 assertions were failed.] + expected: FAIL + + [Executing "channel-count-mode"] + expected: FAIL + + [< [without-audio-node-options\] 1 out of 1 assertions were failed.] + expected: FAIL + + [Executing "channel-count"] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 2 out of 6 tasks were failed.] + expected: FAIL + + [X Creating AudioWOrkletNode without options incorrectly threw ReferenceError: "AudioWorkletNode is not defined".] + expected: FAIL + + [Executing "without-audio-node-options"] + expected: FAIL + + [Executing "audio-node-options"] + expected: FAIL + + [Executing "setup"] + expected: FAIL + + [X Creating AudioWOrkletNode with options: {"numberOfInputs":7,"numberOfOutputs":18,"channelCount":4,"channelCountMode":"clamped-max","channelInterpretation":"discrete"} incorrectly threw ReferenceError: "AudioWorkletNode is not defined".] + expected: FAIL + + [Executing "channel-interpretation"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-disconnected-input.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-disconnected-input.https.html.ini index 2949be5b509..0b441eb51a4 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-disconnected-input.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-disconnected-input.https.html.ini @@ -1,2 +1,4 @@ [audioworkletnode-disconnected-input.https.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletprocessor-options.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletprocessor-options.https.html.ini index a07e70774d5..98a5b63b99e 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletprocessor-options.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletprocessor-options.https.html.ini @@ -1,2 +1,7 @@ [audioworkletprocessor-options.https.html] - expected: ERROR + [Executing "empty-option"] + expected: FAIL + + [Executing "valid-processor-data"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/baseaudiocontext-audioworklet.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/baseaudiocontext-audioworklet.https.html.ini index aca30bb33fb..d744a16a216 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/baseaudiocontext-audioworklet.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/baseaudiocontext-audioworklet.https.html.ini @@ -1,2 +1,4 @@ [baseaudiocontext-audioworklet.https.html] - expected: ERROR + [Executing "Test if AudioWorklet exists"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/simple-input-output.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/simple-input-output.https.html.ini index 4e377aa48a8..aabe8d29733 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/simple-input-output.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/simple-input-output.https.html.ini @@ -1,2 +1,7 @@ [simple-input-output.https.html] - expected: ERROR + [Executing "Initialize worklet"] + expected: FAIL + + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-getFrequencyResponse.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-getFrequencyResponse.html.ini index bda92b1d005..efebf8e525a 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-getFrequencyResponse.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-getFrequencyResponse.html.ini @@ -1,2 +1,28 @@ [biquad-getFrequencyResponse.html] - expected: ERROR + [Executing "notch"] + expected: FAIL + + [Executing "bandpass"] + expected: FAIL + + [Executing "highpass"] + expected: FAIL + + [Executing "peaking"] + expected: FAIL + + [Executing "allpass"] + expected: FAIL + + [Executing "highshelf"] + expected: FAIL + + [Executing "lowshelf"] + expected: FAIL + + [Executing "lowpass"] + expected: FAIL + + [Executing "getFrequencyResponse"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-biquadfilternode-interface/no-dezippering.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-biquadfilternode-interface/no-dezippering.html.ini index a09d9921c49..4dff0d98847 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-biquadfilternode-interface/no-dezippering.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-biquadfilternode-interface/no-dezippering.html.ini @@ -1,2 +1,19 @@ [no-dezippering.html] - expected: ERROR + [Executing "Test 5"] + expected: FAIL + + [Executing "Test 3"] + expected: FAIL + + [Executing "Test 1"] + expected: FAIL + + [Executing "Test 4"] + expected: FAIL + + [Executing "Test 2"] + expected: FAIL + + [Executing "Test 0"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-channelmergernode-interface/active-processing.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-channelmergernode-interface/active-processing.https.html.ini index 116273a1a34..afe1ef7efdc 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-channelmergernode-interface/active-processing.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-channelmergernode-interface/active-processing.https.html.ini @@ -1,2 +1,7 @@ [active-processing.https.html] - expected: ERROR + [Executing "initialize"] + expected: FAIL + + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-disconnect.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-disconnect.html.ini index c85f6c075d8..e04499f9afa 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-disconnect.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-disconnect.html.ini @@ -1,2 +1,4 @@ [audiochannelmerger-disconnect.html] - expected: ERROR + [Executing "silent-disconnect"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/active-processing.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/active-processing.https.html.ini index 116273a1a34..afe1ef7efdc 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/active-processing.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/active-processing.https.html.ini @@ -1,2 +1,7 @@ [active-processing.https.html] - expected: ERROR + [Executing "initialize"] + expected: FAIL + + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolution-mono-mono.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolution-mono-mono.html.ini index ad0581a239e..1f8d873f9af 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolution-mono-mono.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolution-mono-mono.html.ini @@ -1,2 +1,4 @@ [convolution-mono-mono.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-cascade.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-cascade.html.ini index 4cbf9a25487..10202ce7d84 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-cascade.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-cascade.html.ini @@ -1,2 +1,4 @@ [convolver-cascade.html] - expected: ERROR + [Executing "cascade-mono"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-channels.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-channels.html.ini index df70e50599b..6a15a277693 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-channels.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-channels.html.ini @@ -1,2 +1,4 @@ [convolver-channels.html] - expected: ERROR + [Executing "channel-count-test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-1-chan.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-1-chan.html.ini index b16c9494baf..39dde8493e8 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-1-chan.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-1-chan.html.ini @@ -1,2 +1,16 @@ [convolver-response-1-chan.html] - expected: ERROR + [Executing "3-channel input"] + expected: FAIL + + [Executing "4-channel input"] + expected: FAIL + + [Executing "2-channel input"] + expected: FAIL + + [Executing "5.1-channel input"] + expected: FAIL + + [Executing "1-channel input"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-2-chan.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-2-chan.html.ini index 9f76052af48..3439700de3f 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-2-chan.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-2-chan.html.ini @@ -1,2 +1,16 @@ [convolver-response-2-chan.html] - expected: ERROR + [Executing "3-channel input"] + expected: FAIL + + [Executing "2-channel input"] + expected: FAIL + + [Executing "4-channel input"] + expected: FAIL + + [Executing "1-channel input"] + expected: FAIL + + [Executing "5.1-channel input"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-4-chan.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-4-chan.html.ini index 591a89c6ebe..acf644dc3e7 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-4-chan.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-4-chan.html.ini @@ -1,2 +1,19 @@ [convolver-response-4-chan.html] - expected: ERROR + [Executing "2-channel input"] + expected: FAIL + + [Executing "delayed buffer set"] + expected: FAIL + + [Executing "4-channel input"] + expected: FAIL + + [Executing "1-channel input"] + expected: FAIL + + [Executing "3-channel input"] + expected: FAIL + + [Executing "5.1-channel input"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html.ini index 231d4038bd0..ad225f39dfc 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html.ini @@ -1,2 +1,4 @@ [convolver-setBuffer-already-has-value.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-null.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-null.html.ini index 9fea5ff2474..50a3c57c38d 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-null.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-null.html.ini @@ -1,2 +1,4 @@ [convolver-setBuffer-null.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html.ini index 48fae67227f..a70eac76243 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html.ini @@ -1,5 +1,46 @@ [ctor-convolver.html] - expected: ERROR [X node0 = new ConvolverNode(context) incorrectly threw TypeError: "window[name\] is not a constructor".] expected: FAIL + [Executing "nullable buffer"] + expected: FAIL + + [Executing "construct with options"] + expected: FAIL + + [X node1 = new ConvolverNode(c, {"buffer":{}} threw "ReferenceError" instead of NotSupportedError.] + expected: FAIL + + [< [construct with options\] 1 out of 1 assertions were failed.] + expected: FAIL + + [< [nullable buffer\] 1 out of 1 assertions were failed.] + expected: FAIL + + [< [illegal sample-rate\] 1 out of 1 assertions were failed.] + expected: FAIL + + [< [default constructor\] 1 out of 1 assertions were failed.] + expected: FAIL + + [Executing "test AudioNodeOptions"] + expected: FAIL + + [< [test AudioNodeOptions\] 1 out of 1 assertions were failed.] + expected: FAIL + + [X node = new ConvolverNode(c, {"buffer":{},"disableNormalization":false}) incorrectly threw ReferenceError: "ConvolverNode is not defined".] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 5 out of 7 tasks were failed.] + expected: FAIL + + [Executing "default constructor"] + expected: FAIL + + [X new ConvolverNode(c, {channelCount: 2}} incorrectly threw TypeError: "window[nodeName\] is not a constructor".] + expected: FAIL + + [X node1 = new ConvolverNode(c, {"buffer":null} incorrectly threw ReferenceError: "ConvolverNode is not defined".] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/realtime-conv.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/realtime-conv.html.ini index 87a247cb5ad..44f25e501f8 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/realtime-conv.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/realtime-conv.html.ini @@ -1,2 +1,4 @@ [realtime-conv.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/ctor-delay.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/ctor-delay.html.ini index 03c0e35753a..061ae663da2 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/ctor-delay.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/ctor-delay.html.ini @@ -1,5 +1,31 @@ [ctor-delay.html] - expected: ERROR [X node0 = new DelayNode(context) incorrectly threw TypeError: "window[name\] is not a constructor".] expected: FAIL + [< [constructor options\] 1 out of 1 assertions were failed.] + expected: FAIL + + [Executing "constructor options"] + expected: FAIL + + [< [default constructor\] 1 out of 1 assertions were failed.] + expected: FAIL + + [Executing "test AudioNodeOptions"] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 3 out of 5 tasks were failed.] + expected: FAIL + + [< [test AudioNodeOptions\] 1 out of 1 assertions were failed.] + expected: FAIL + + [Executing "default constructor"] + expected: FAIL + + [X new DelayNode(c, {channelCount: 17}} incorrectly threw TypeError: "window[nodeName\] is not a constructor".] + expected: FAIL + + [X node1 = new DelayNode(c, {"delayTime":0.5,"maxDelayTime":1.5}) incorrectly threw ReferenceError: "DelayNode is not defined".] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-max-default-delay.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-max-default-delay.html.ini index 1f2ee4b07e1..0cb672f18a8 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-max-default-delay.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-max-default-delay.html.ini @@ -1,2 +1,4 @@ [delaynode-max-default-delay.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-max-nondefault-delay.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-max-nondefault-delay.html.ini index b5029de5f80..87ee624a502 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-max-nondefault-delay.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-max-nondefault-delay.html.ini @@ -1,2 +1,4 @@ [delaynode-max-nondefault-delay.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelay.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelay.html.ini index b6b9a1d2ead..45439cb63ab 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelay.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelay.html.ini @@ -1,2 +1,4 @@ [delaynode-maxdelay.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html.ini index 2691f449994..1d2ca2df121 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html.ini @@ -1,5 +1,4 @@ [delaynode-maxdelaylimit.html] - expected: ERROR [X Setting Delay length to negative threw "TypeError" instead of NotSupportedError.] expected: FAIL @@ -9,3 +8,12 @@ [X Setting Delay length to 180 seconds or more threw "TypeError" instead of NotSupportedError.] expected: FAIL + [< [test\] 3 out of 4 assertions were failed.] + expected: FAIL + + [Executing "test"] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed.] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-scheduling.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-scheduling.html.ini index 73b40d82b00..13c0beeafda 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-scheduling.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-scheduling.html.ini @@ -1,2 +1,4 @@ [delaynode-scheduling.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode.html.ini index 8943424a61b..275d61f3555 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode.html.ini @@ -1,2 +1,4 @@ [delaynode.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/no-dezippering.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/no-dezippering.html.ini index a09d9921c49..167010e3220 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/no-dezippering.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/no-dezippering.html.ini @@ -1,2 +1,10 @@ [no-dezippering.html] - expected: ERROR + [Executing "test2"] + expected: FAIL + + [Executing "test0"] + expected: FAIL + + [Executing "test1"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html.ini index b7b3d3da3ae..372a354d1a5 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html.ini @@ -1,5 +1,31 @@ [ctor-dynamicscompressor.html] - expected: ERROR [X node0 = new DynamicsCompressorNode(context) incorrectly threw TypeError: "window[name\] is not a constructor".] expected: FAIL + [Executing "constructor with options"] + expected: FAIL + + [X new DynamicsCompressorNode(c, {"channelCount":1}) incorrectly threw ReferenceError: "DynamicsCompressorNode is not defined".] + expected: FAIL + + [< [constructor with options\] 1 out of 1 assertions were failed.] + expected: FAIL + + [X node1 = new DynamicsCompressorNode(c, {"threshold":-33,"knee":15,"ratio":7,"attack":0.625,"release":0.125}) incorrectly threw ReferenceError: "DynamicsCompressorNode is not defined".] + expected: FAIL + + [< [default constructor\] 1 out of 1 assertions were failed.] + expected: FAIL + + [< [test AudioNodeOptions\] 1 out of 1 assertions were failed.] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 3 out of 5 tasks were failed.] + expected: FAIL + + [Executing "default constructor"] + expected: FAIL + + [Executing "test AudioNodeOptions"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-dynamicscompressornode-interface/dynamicscompressor-basic.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-dynamicscompressornode-interface/dynamicscompressor-basic.html.ini index 479a20cea02..f38d13aa9b3 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-dynamicscompressornode-interface/dynamicscompressor-basic.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-dynamicscompressornode-interface/dynamicscompressor-basic.html.ini @@ -1,2 +1,4 @@ [dynamicscompressor-basic.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-gainnode-interface/no-dezippering.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-gainnode-interface/no-dezippering.html.ini index a09d9921c49..01b915b9267 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-gainnode-interface/no-dezippering.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-gainnode-interface/no-dezippering.html.ini @@ -1,2 +1,10 @@ [no-dezippering.html] - expected: ERROR + [Executing "test3"] + expected: FAIL + + [Executing "test2"] + expected: FAIL + + [Executing "test0"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-iirfilternode-interface/ctor-iirfilter.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-iirfilternode-interface/ctor-iirfilter.html.ini index 7c06aafddf3..a3fa462c68c 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-iirfilternode-interface/ctor-iirfilter.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-iirfilternode-interface/ctor-iirfilter.html.ini @@ -1,5 +1,34 @@ [ctor-iirfilter.html] - expected: ERROR [X node0 = new IIRFilterNode(context, {"feedforward":[1\],"feedback":[1,-0.9\]}) incorrectly threw TypeError: "window[name\] is not a constructor".] expected: FAIL + [X node = new IIRFilterNode(c, {"feedforward":[1,0.5\]}) threw "ReferenceError" instead of EcmaScript error TypeError.] + expected: FAIL + + [Executing "functionality"] + expected: FAIL + + [X node = new IIRFilterNode(, {"feedback":[1,0.5\]}) threw "ReferenceError" instead of EcmaScript error TypeError.] + expected: FAIL + + [X new IIRFilterNode(c, {channelCount: 17}} incorrectly threw TypeError: "window[nodeName\] is not a constructor".] + expected: FAIL + + [< [default constructor\] 1 out of 1 assertions were failed.] + expected: FAIL + + [Executing "test AudioNodeOptions"] + expected: FAIL + + [< [test AudioNodeOptions\] 1 out of 1 assertions were failed.] + expected: FAIL + + [Executing "default constructor"] + expected: FAIL + + [< [constructor options\] 2 out of 2 assertions were failed.] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 3 out of 6 tasks were failed.] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-basic.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-basic.html.ini index 9914ef448f9..0307fdc0b9e 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-basic.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-basic.html.ini @@ -1,8 +1,43 @@ [iirfilter-basic.html] - expected: ERROR [< [existence\] 1 out of 1 assertions were failed.] expected: FAIL [X context.createIIRFilter does not exist. Got undefined.] expected: FAIL + [# AUDIT TASK RUNNER FINISHED: 2 out of 5 tasks were failed.] + expected: FAIL + + [X createIIRFilter([1\], new Float32Array(21)) threw "TypeError" instead of NotSupportedError.] + expected: FAIL + + [X createIIRFilter([\], [\]) threw "TypeError" instead of NotSupportedError.] + expected: FAIL + + [X createIIRFilter(new Float32Array(20), new Float32Array(20)) incorrectly threw TypeError: "context.createIIRFilter is not a function".] + expected: FAIL + + [< [exceptions-createIIRFilter\] 8 out of 14 assertions were failed.] + expected: FAIL + + [X createIIRFilter(new Float32Array(21), [1\]) threw "TypeError" instead of NotSupportedError.] + expected: FAIL + + [X createIIRFilter([1\], new Float32Array(2)) threw "TypeError" instead of InvalidStateError.] + expected: FAIL + + [X createIIRFilter([1\], [\]) threw "TypeError" instead of NotSupportedError.] + expected: FAIL + + [X createIIRFilter(new Float32Array(10), [1\]) threw "TypeError" instead of InvalidStateError.] + expected: FAIL + + [X createIIRFilter([\], [1\]) threw "TypeError" instead of NotSupportedError.] + expected: FAIL + + [Executing "parameters"] + expected: FAIL + + [Executing "exceptions-getFrequencyData"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-getFrequencyResponse.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-getFrequencyResponse.html.ini index 5c657325deb..59fa2e214d7 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-getFrequencyResponse.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-getFrequencyResponse.html.ini @@ -1,2 +1,10 @@ [iirfilter-getFrequencyResponse.html] - expected: ERROR + [Executing "compare IIR and biquad"] + expected: FAIL + + [Executing "1-pole IIR"] + expected: FAIL + + [Executing "getFrequencyResponse"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter.html.ini index ffe829f89f6..b80498f0cf7 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter.html.ini @@ -1,7 +1,52 @@ [iirfilter.html] - expected: ERROR - [X createIIRFilter with unnormalized coefficients incorrectly threw TypeError: \"context.createIIRFilter is not a function\".] + [X createIIRFilter with unnormalized coefficients incorrectly threw TypeError: "context.createIIRFilter is not a function".] expected: FAIL - [X createIIRFilter with normalized coefficients incorrectly threw TypeError: \"context.createIIRFilter is not a function\".] + [X createIIRFilter with normalized coefficients incorrectly threw TypeError: "context.createIIRFilter is not a function".] expected: FAIL + + [Executing "coefficient-normalization"] + expected: FAIL + + [Executing "7: peaking"] + expected: FAIL + + [Executing "0: lowpass"] + expected: FAIL + + [Executing "one-zero"] + expected: FAIL + + [Executing "6: highshelf"] + expected: FAIL + + [< [coefficient-normalization\] 2 out of 2 assertions were failed.] + expected: FAIL + + [Executing "5: lowshelf"] + expected: FAIL + + [Executing "one-pole"] + expected: FAIL + + [Executing "1: highpass"] + expected: FAIL + + [Executing "4: allpass"] + expected: FAIL + + [Executing "4th-order-iir"] + expected: FAIL + + [Executing "multi-channel"] + expected: FAIL + + [Executing "2: bandpass"] + expected: FAIL + + [Executing "3: notch"] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 1 out of 13 tasks were failed.] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html.ini index 86cf943f0b2..41a94a54627 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html.ini @@ -1,5 +1,4 @@ [mediaElementAudioSourceToScriptProcessorTest.html] - expected: ERROR [Element Source tests completed] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiodestinationnode-interface/ctor-mediastreamaudiodestination.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiodestinationnode-interface/ctor-mediastreamaudiodestination.html.ini index bc21843f0de..98c5d0954e0 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiodestinationnode-interface/ctor-mediastreamaudiodestination.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiodestinationnode-interface/ctor-mediastreamaudiodestination.html.ini @@ -1,5 +1,22 @@ [ctor-mediastreamaudiodestination.html] - expected: ERROR [X node0 = new MediaStreamAudioDestinationNode(context) incorrectly threw TypeError: "window[name\] is not a constructor".] expected: FAIL + [< [test AudioNodeOptions\] 1 out of 1 assertions were failed.] + expected: FAIL + + [Executing "default constructor"] + expected: FAIL + + [X new MediaStreamAudioDestinationNode(c, {channelCount: 7}} incorrectly threw TypeError: "window[nodeName\] is not a constructor".] + expected: FAIL + + [< [default constructor\] 1 out of 1 assertions were failed.] + expected: FAIL + + [Executing "test AudioNodeOptions"] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 2 out of 4 tasks were failed.] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-routing.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-routing.html.ini index f1bdca6094a..6fbfc5ecb1d 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-routing.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-routing.html.ini @@ -1,5 +1,4 @@ [mediastreamaudiosourcenode-routing.html] - expected: ERROR [MediaStreamAudioSourceNode captures the right track.] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html.ini index 9d7b93abe2b..afa56ebad15 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html.ini @@ -1,2 +1,4 @@ [ctor-oscillator.html] - expected: ERROR + [Executing "constructor options"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/automation-changes.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/automation-changes.html.ini index a20719e01f3..dfcc66099ae 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/automation-changes.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/automation-changes.html.ini @@ -1,2 +1,19 @@ [automation-changes.html] - expected: ERROR + [< [Listener.positionX.setValue\] 2 out of 4 assertions were failed.] + expected: FAIL + + [Executing "Listener.setPosition"] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 1 out of 3 tasks were failed.] + expected: FAIL + + [Executing "Set Listener.positionX.value"] + expected: FAIL + + [X listener.positionX.setValueATTime: output0[512:\] should have contain at least one value different from 0.] + expected: FAIL + + [X listener.positionX.setValueATTime: output1[0:511\] should have contain at least one value different from 0.] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/panner-automation-basic.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/panner-automation-basic.html.ini index a1c827555e2..2d26d543fbb 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/panner-automation-basic.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/panner-automation-basic.html.ini @@ -1,2 +1,49 @@ [panner-automation-basic.html] - expected: ERROR + [Executing "forward setter"] + expected: FAIL + + [Executing "Stereo listener.positionZ"] + expected: FAIL + + [Executing "Stereo listener.positionX"] + expected: FAIL + + [Executing "Stereo panner.positionZ"] + expected: FAIL + + [Executing "Mono panner.positionX"] + expected: FAIL + + [Executing "Stereo panner.positionX"] + expected: FAIL + + [Executing "Mono panner.positionZ"] + expected: FAIL + + [Executing "orientation setter"] + expected: FAIL + + [Executing "Mono listener.positionY"] + expected: FAIL + + [Executing "up setter"] + expected: FAIL + + [Executing "Stereo listener.positionY"] + expected: FAIL + + [Executing "Mono listener.positionX"] + expected: FAIL + + [Executing "Mono listener.positionZ"] + expected: FAIL + + [Executing "Mono panner.positionY"] + expected: FAIL + + [Executing "Stereo panner.positionY"] + expected: FAIL + + [Executing "setPosition"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-scriptprocessornode-interface/simple-input-output.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-scriptprocessornode-interface/simple-input-output.html.ini index eb3dae12ffc..63c44594ad3 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-scriptprocessornode-interface/simple-input-output.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-scriptprocessornode-interface/simple-input-output.html.ini @@ -1,2 +1,4 @@ [simple-input-output.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-stereopanner-interface/no-dezippering.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-stereopanner-interface/no-dezippering.html.ini index a09d9921c49..401f30cb203 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-stereopanner-interface/no-dezippering.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-stereopanner-interface/no-dezippering.html.ini @@ -1,2 +1,16 @@ [no-dezippering.html] - expected: ERROR + [Executing "test mono input setValue"] + expected: FAIL + + [Executing "test stereo input setValue"] + expected: FAIL + + [Executing "test mono input"] + expected: FAIL + + [Executing "test stereo input"] + expected: FAIL + + [Executing "test mono input automation"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/ctor-waveshaper.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/ctor-waveshaper.html.ini index 472044f8544..3db3a40db5c 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/ctor-waveshaper.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/ctor-waveshaper.html.ini @@ -1,5 +1,31 @@ [ctor-waveshaper.html] - expected: ERROR [X node0 = new WaveShaperNode(context) incorrectly threw TypeError: "window[name\] is not a constructor".] expected: FAIL + [< [valid non-default\] 1 out of 1 assertions were failed.] + expected: FAIL + + [X node1 = new WaveShaperNode(, {"curve":{"0":1,"1":2,"2":3},"oversample":"4x"}) incorrectly threw ReferenceError: "WaveShaperNode is not defined".] + expected: FAIL + + [< [valid default construction\] 1 out of 1 assertions were failed.] + expected: FAIL + + [Executing "valid non-default"] + expected: FAIL + + [< [test AudioNodeOptions\] 1 out of 1 assertions were failed.] + expected: FAIL + + [# AUDIT TASK RUNNER FINISHED: 3 out of 5 tasks were failed.] + expected: FAIL + + [Executing "valid default construction"] + expected: FAIL + + [X new WaveShaperNode(c, {channelCount: 17}} incorrectly threw TypeError: "window[nodeName\] is not a constructor".] + expected: FAIL + + [Executing "test AudioNodeOptions"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html.ini index a03586bfd27..a9b505e1ab3 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html.ini @@ -1,5 +1,22 @@ [curve-tests.html] - expected: ERROR [WaveShaperNode - Testing that -1, 0 and +1 map correctly to curve (with 1:1 correlation)] - expected: NOTRUN + expected: FAIL + + [WaveShaperNode - Testing interpolation (where inputs don't correlate directly to curve elements)] + expected: FAIL + + [WaveShaperNode - Testing a 4-element curve (does not have a middle element)] + expected: FAIL + + [WaveShaperNode - Testing out-of-range inputs (should be mapped to the first/last elements of the curve)] + expected: FAIL + + [WaveShaperNode - Testing a 2-element curve (does not have a middle element)] + expected: FAIL + + [WaveShaperNode - Testing null curve (should return input values)] + expected: FAIL + + [WaveShaperNode - Testing a huge curve] + expected: FAIL diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/silent-inputs.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/silent-inputs.html.ini index f7af301e826..2f27ed6e05a 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/silent-inputs.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/silent-inputs.html.ini @@ -1,2 +1,10 @@ [silent-inputs.html] - expected: ERROR + [Executing "test-1"] + expected: FAIL + + [Executing "test-0"] + expected: FAIL + + [Executing "test-2"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper-copy-curve.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper-copy-curve.html.ini index e89b8bae3de..87798c615b5 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper-copy-curve.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper-copy-curve.html.ini @@ -1,2 +1,4 @@ [waveshaper-copy-curve.html] - expected: ERROR + [Executing "test copying"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper-limits.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper-limits.html.ini index 5928332c45c..f0d34b7c3d4 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper-limits.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper-limits.html.ini @@ -1,2 +1,4 @@ [waveshaper-limits.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper-simple.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper-simple.html.ini index 8cacd43311b..ba6ead136f4 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper-simple.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper-simple.html.ini @@ -1,2 +1,4 @@ [waveshaper-simple.html] - expected: ERROR + [Executing "simple"] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper.html.ini index 5e5b20fe070..24245143ddb 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper.html.ini @@ -1,2 +1,4 @@ [waveshaper.html] - expected: ERROR + [Executing "test"] + expected: FAIL + diff --git a/tests/wpt/metadata/webxr/gamepads-module/idlharness.https.window.js.ini b/tests/wpt/metadata/webxr/gamepads-module/idlharness.https.window.js.ini new file mode 100644 index 00000000000..ee1d63b830d --- /dev/null +++ b/tests/wpt/metadata/webxr/gamepads-module/idlharness.https.window.js.ini @@ -0,0 +1,4 @@ +[idlharness.https.window.html] + [XRInputSource interface: attribute gamepad] + expected: FAIL + diff --git a/tests/wpt/metadata/webxr/xrWebGLLayer_constructor.https.html.ini b/tests/wpt/metadata/webxr/xrWebGLLayer_constructor.https.html.ini index 08a51f5b1bc..f9f55152f51 100644 --- a/tests/wpt/metadata/webxr/xrWebGLLayer_constructor.https.html.ini +++ b/tests/wpt/metadata/webxr/xrWebGLLayer_constructor.https.html.ini @@ -1,5 +1,4 @@ [xrWebGLLayer_constructor.https.html] - expected: ERROR [Ensure that XRWebGLLayer's constructor throws appropriate errors] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/workers/semantics/interface-objects/003.any.js.ini b/tests/wpt/metadata/workers/semantics/interface-objects/003.any.js.ini new file mode 100644 index 00000000000..66d358167ba --- /dev/null +++ b/tests/wpt/metadata/workers/semantics/interface-objects/003.any.js.ini @@ -0,0 +1,4 @@ +[003.any.sharedworker.html] + [003] + expected: FAIL + diff --git a/tests/wpt/metadata/workers/semantics/interface-objects/004.any.js.ini b/tests/wpt/metadata/workers/semantics/interface-objects/004.any.js.ini new file mode 100644 index 00000000000..00de8ef15b1 --- /dev/null +++ b/tests/wpt/metadata/workers/semantics/interface-objects/004.any.js.ini @@ -0,0 +1,4 @@ +[004.any.sharedworker.html] + [004] + expected: FAIL + diff --git a/tests/wpt/mozilla/meta/mozilla/xmlhttprequest_url.html.ini b/tests/wpt/mozilla/meta/mozilla/xmlhttprequest_url.html.ini new file mode 100644 index 00000000000..f1ebb2bf40e --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/xmlhttprequest_url.html.ini @@ -0,0 +1,4 @@ +[xmlhttprequest_url.html] + [Performance entries should contain the URL where the XMLHttpRequest originated] + expected: FAIL + diff --git a/tests/wpt/web-platform-tests/.github/workflows/pull_request.yml b/tests/wpt/web-platform-tests/.github/workflows/pull_request.yml index 9d288c0c920..81a53c67f4b 100644 --- a/tests/wpt/web-platform-tests/.github/workflows/pull_request.yml +++ b/tests/wpt/web-platform-tests/.github/workflows/pull_request.yml @@ -7,7 +7,7 @@ jobs: - uses: actions/checkout@v1 with: ref: refs/heads/master - fetch-depth: 1 + fetch-depth: 50 - name: update-pr-preview uses: ./tools/docker/github env: diff --git a/tests/wpt/web-platform-tests/.github/workflows/push-build-publish-documentation-website.yml b/tests/wpt/web-platform-tests/.github/workflows/push-build-publish-documentation-website.yml index 167e0d930f4..f6a1401a3dd 100644 --- a/tests/wpt/web-platform-tests/.github/workflows/push-build-publish-documentation-website.yml +++ b/tests/wpt/web-platform-tests/.github/workflows/push-build-publish-documentation-website.yml @@ -9,7 +9,7 @@ jobs: steps: - uses: actions/checkout@v1 with: - fetch-depth: 1 + fetch-depth: 50 - name: website-build-and-publish uses: ./tools/docker/documentation env: diff --git a/tests/wpt/web-platform-tests/.github/workflows/push-build-release-manifest.yml b/tests/wpt/web-platform-tests/.github/workflows/push-build-release-manifest.yml index af677454fdd..baa06cc14fd 100644 --- a/tests/wpt/web-platform-tests/.github/workflows/push-build-release-manifest.yml +++ b/tests/wpt/web-platform-tests/.github/workflows/push-build-release-manifest.yml @@ -9,7 +9,7 @@ jobs: steps: - uses: actions/checkout@v1 with: - fetch-depth: 1 + fetch-depth: 50 - name: manifest-build-and-tag uses: ./tools/docker/github env: diff --git a/tests/wpt/web-platform-tests/.taskcluster.yml b/tests/wpt/web-platform-tests/.taskcluster.yml index dfe3b36e3a5..61cc38c9bd1 100644 --- a/tests/wpt/web-platform-tests/.taskcluster.yml +++ b/tests/wpt/web-platform-tests/.taskcluster.yml @@ -86,6 +86,9 @@ tasks: ${event.repository.url} ${event.ref}; cd ~/web-platform-tests; + sudo cp tools/certs/cacert.pem + /usr/local/share/ca-certificates/cacert.crt; + sudo update-ca-certificates; ./tools/ci/run_tc.py --checkout=${event.after} --oom-killer diff --git a/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html index 004b3ca6bf3..c64371eaa8c 100644 --- a/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html +++ b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html @@ -52,7 +52,7 @@ testCases = [ description: 'createImageBitmap with <sourceType> source and sw set to 0', promiseTestFunction: (source, t) => { - return promise_rejects(t, new RangeError(), + return promise_rejects_js(t, RangeError, createImageBitmap(source, 0, 0, 0, 10)); } }, @@ -60,7 +60,7 @@ testCases = [ description: 'createImageBitmap with <sourceType> source and sh set to 0', promiseTestFunction: (source, t) => { - return promise_rejects(t, new RangeError(), + return promise_rejects_js(t, RangeError, createImageBitmap(source, 0, 0, 10, 0)); } }, @@ -100,88 +100,88 @@ imageSourceTypes.forEach(imageSourceType => { }); promise_test( t => { - return promise_rejects(t, new TypeError(), createImageBitmap(undefined)); + return promise_rejects_js(t, TypeError, createImageBitmap(undefined)); }, "createImageBitmap with undefined image source."); promise_test( t => { - return promise_rejects(t, new TypeError(), createImageBitmap(null)); + return promise_rejects_js(t, TypeError, createImageBitmap(null)); }, "createImageBitmap with null image source."); promise_test( t => { var context = document.createElement("canvas").getContext("2d"); - return promise_rejects(t, new TypeError(), createImageBitmap(context)); + return promise_rejects_js(t, TypeError, createImageBitmap(context)); }, "createImageBitmap with CanvasRenderingContext2D image source."); promise_test( t => { var context = document.createElement("canvas").getContext("webgl"); - return promise_rejects(t, new TypeError(), createImageBitmap(context)); + return promise_rejects_js(t, TypeError, createImageBitmap(context)); }, "createImageBitmap with WebGLRenderingContext image source."); promise_test( t => { var buffer = new Uint8Array(); - return promise_rejects(t, new TypeError(), createImageBitmap(buffer)); + return promise_rejects_js(t, TypeError, createImageBitmap(buffer)); }, "createImageBitmap with Uint8Array image source."); promise_test( t => { var buffer = new ArrayBuffer(8); - return promise_rejects(t, new TypeError(), createImageBitmap(buffer)); + return promise_rejects_js(t, TypeError, createImageBitmap(buffer)); }, "createImageBitmap with ArrayBuffer image source."); promise_test( t => { - return promise_rejects(t, "InvalidStateError", + return promise_rejects_dom(t, "InvalidStateError", createImageBitmap(new Image())); }, "createImageBitmap with empty image source."); promise_test( t => { - return promise_rejects(t, "InvalidStateError", + return promise_rejects_dom(t, "InvalidStateError", createImageBitmap(document.createElement('video'))); }, "createImageBitmap with empty video source."); promise_test( t => { return makeOversizedCanvas().then(canvas => { - return promise_rejects(t, "InvalidStateError", + return promise_rejects_dom(t, "InvalidStateError", createImageBitmap(canvas)); }); }, "createImageBitmap with an oversized canvas source."); promise_test( t => { return makeOversizedOffscreenCanvas().then(offscreenCanvas => { - return promise_rejects(t, "InvalidStateError", + return promise_rejects_dom(t, "InvalidStateError", createImageBitmap(offscreenCanvas)); }); }, "createImageBitmap with an invalid OffscreenCanvas source."); promise_test( t => { return makeInvalidBlob().then(blob => { - return promise_rejects(t, "InvalidStateError", + return promise_rejects_dom(t, "InvalidStateError", createImageBitmap(blob)); }); }, "createImageBitmap with an undecodable blob source."); promise_test( t => { return makeBrokenImage().then(image => { - return promise_rejects(t, "InvalidStateError", + return promise_rejects_dom(t, "InvalidStateError", createImageBitmap(image)); }); }, "createImageBitmap with a broken image source."); promise_test( t => { return makeAvailableButBrokenImage("/images/broken.png").then(image => { - return promise_rejects(t, "InvalidStateError", + return promise_rejects_dom(t, "InvalidStateError", createImageBitmap(image)); }); }, "createImageBitmap with an available but undecodable image source."); promise_test( t => { return makeAvailableButBrokenImage("/images/red-zeroheight.svg").then(image => { - return promise_rejects(t, "InvalidStateError", + return promise_rejects_dom(t, "InvalidStateError", createImageBitmap(image)); }); }, "createImageBitmap with an available but zero height image source."); promise_test( t => { return makeAvailableButBrokenImage("/images/red-zerowidth.svg").then(image => { - return promise_rejects(t, "InvalidStateError", + return promise_rejects_dom(t, "InvalidStateError", createImageBitmap(image)); }); }, "createImageBitmap with an available but zero width image source."); @@ -189,7 +189,8 @@ promise_test( t => { promise_test( t => { return makeImageBitmap().then(bitmap => { bitmap.close() - return promise_rejects(t, "InvalidStateError", createImageBitmap(bitmap)); + return promise_rejects_dom(t, "InvalidStateError", + createImageBitmap(bitmap)); }); }, "createImageBitmap with a closed ImageBitmap."); </script> diff --git a/tests/wpt/web-platform-tests/IndexedDB/fire-error-event-exception.html b/tests/wpt/web-platform-tests/IndexedDB/fire-error-event-exception.html index fe0dc182567..0a3f1226589 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/fire-error-event-exception.html +++ b/tests/wpt/web-platform-tests/IndexedDB/fire-error-event-exception.html @@ -21,6 +21,9 @@ function fire_error_event_test(func, description) { const request = store.add(0, 0); request.onsuccess = t.unreached_func('request should fail'); func(t, db, tx, request); + tx.addEventListener('abort', t.step_func_done(() => { + assert_equals(tx.error.name, 'AbortError'); + })); }, description); } @@ -31,9 +34,6 @@ fire_error_event_test((t, db, tx, request) => { request.onerror = () => { throw Error(); }; - tx.onabort = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in error event handler on request'); fire_error_event_test((t, db, tx, request) => { @@ -41,30 +41,33 @@ fire_error_event_test((t, db, tx, request) => { e.preventDefault(); throw Error(); }; - tx.onabort = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in error event handler on request, with preventDefault'); fire_error_event_test((t, db, tx, request) => { request.addEventListener('error', () => { throw Error(); }); - tx.onabort = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in error event listener on request'); fire_error_event_test((t, db, tx, request) => { + request.addEventListener('error', { + get handleEvent() { + throw new Error(); + }, + }); +}, 'Exception in error event listener ("handleEvent" lookup) on request'); + +fire_error_event_test((t, db, tx, request) => { + request.addEventListener('error', {}); +}, 'Exception in error event listener (non-callable "handleEvent") on request'); + +fire_error_event_test((t, db, tx, request) => { request.addEventListener('error', () => { // no-op }); request.addEventListener('error', () => { throw Error(); }); - tx.onabort = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in second error event listener on request'); fire_error_event_test((t, db, tx, request) => { @@ -77,10 +80,9 @@ fire_error_event_test((t, db, tx, request) => { assert_true(is_transaction_active(tx, 's'), 'Transaction should be active until dispatch completes'); })); - tx.onabort = t.step_func_done(() => { + tx.addEventListener('abort', t.step_func(() => { assert_true(second_listener_called); - assert_equals(tx.error.name, 'AbortError'); - }); + })); }, 'Exception in first error event listener on request, ' + 'transaction active in second'); @@ -90,9 +92,6 @@ fire_error_event_test((t, db, tx, request) => { tx.onerror = () => { throw Error(); }; - tx.onabort = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in error event handler on transaction'); fire_error_event_test((t, db, tx, request) => { @@ -100,18 +99,12 @@ fire_error_event_test((t, db, tx, request) => { e.preventDefault(); throw Error(); }; - tx.onabort = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in error event handler on transaction, with preventDefault'); fire_error_event_test((t, db, tx, request) => { tx.addEventListener('error', () => { throw Error(); }); - tx.onabort = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in error event listener on transaction'); fire_error_event_test((t, db, tx, request) => { @@ -121,9 +114,6 @@ fire_error_event_test((t, db, tx, request) => { tx.addEventListener('error', () => { throw Error(); }); - tx.onabort = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in second error event listener on transaction'); fire_error_event_test((t, db, tx, request) => { @@ -136,10 +126,9 @@ fire_error_event_test((t, db, tx, request) => { assert_true(is_transaction_active(tx, 's'), 'Transaction should be active until dispatch completes'); })); - tx.onabort = t.step_func_done(() => { + tx.addEventListener('abort', t.step_func(() => { assert_true(second_listener_called); - assert_equals(tx.error.name, 'AbortError'); - }); + })); }, 'Exception in first error event listener on transaction, ' + 'transaction active in second'); @@ -149,9 +138,6 @@ fire_error_event_test((t, db, tx, request) => { db.onerror = () => { throw Error(); }; - tx.onabort = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in error event handler on connection'); fire_error_event_test((t, db, tx, request) => { @@ -159,18 +145,12 @@ fire_error_event_test((t, db, tx, request) => { e.preventDefault() throw Error(); }; - tx.onabort = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in error event handler on connection, with preventDefault'); fire_error_event_test((t, db, tx, request) => { db.addEventListener('error', () => { throw Error(); }); - tx.onabort = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in error event listener on connection'); fire_error_event_test((t, db, tx, request) => { @@ -180,9 +160,6 @@ fire_error_event_test((t, db, tx, request) => { db.addEventListener('error', () => { throw Error(); }); - tx.onabort = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in second error event listener on connection'); fire_error_event_test((t, db, tx, request) => { @@ -195,10 +172,9 @@ fire_error_event_test((t, db, tx, request) => { assert_true(is_transaction_active(tx, 's'), 'Transaction should be active until dispatch completes'); })); - tx.onabort = t.step_func_done(() => { + tx.addEventListener('abort', t.step_func(() => { assert_true(second_listener_called); - assert_equals(tx.error.name, 'AbortError'); - }); + })); }, 'Exception in first error event listener on connection, ' + 'transaction active in second'); diff --git a/tests/wpt/web-platform-tests/IndexedDB/fire-success-event-exception.html b/tests/wpt/web-platform-tests/IndexedDB/fire-success-event-exception.html index c4e55066bba..ab0ac44eb7c 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/fire-success-event-exception.html +++ b/tests/wpt/web-platform-tests/IndexedDB/fire-success-event-exception.html @@ -19,6 +19,9 @@ function fire_success_event_test(func, description) { const store = tx.objectStore('s'); const request = store.get(0); func(t, db, tx, request); + tx.addEventListener('abort', t.step_func_done(() => { + assert_equals(tx.error.name, 'AbortError'); + })); }, description); } @@ -27,30 +30,35 @@ fire_success_event_test((t, db, tx, request) => { request.onsuccess = () => { throw Error(); }; - tx.onabort = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in success event handler on request'); fire_success_event_test((t, db, tx, request) => { request.addEventListener('success', () => { throw Error(); }); - tx.onabort = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in success event listener on request'); fire_success_event_test((t, db, tx, request) => { + request.addEventListener('success', { + get handleEvent() { + throw new Error(); + }, + }); +}, 'Exception in success event listener ("handleEvent" lookup) on request'); + +fire_success_event_test((t, db, tx, request) => { + request.addEventListener('success', { + handleEvent: null, + }); +}, 'Exception in success event listener (non-callable "handleEvent") on request'); + +fire_success_event_test((t, db, tx, request) => { request.addEventListener('success', () => { // no-op }); request.addEventListener('success', () => { throw Error(); }); - tx.onabort = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in second success event listener on request'); fire_success_event_test((t, db, tx, request) => { @@ -63,10 +71,9 @@ fire_success_event_test((t, db, tx, request) => { assert_true(is_transaction_active(tx, 's'), 'Transaction should be active until dispatch completes'); })); - tx.onabort = t.step_func_done(() => { + tx.addEventListener('abort', t.step_func(() => { assert_true(second_listener_called); - assert_equals(tx.error.name, 'AbortError'); - }); + })); }, 'Exception in first success event listener, tx active in second'); </script> diff --git a/tests/wpt/web-platform-tests/IndexedDB/fire-upgradeneeded-event-exception.html b/tests/wpt/web-platform-tests/IndexedDB/fire-upgradeneeded-event-exception.html index 5db452ebafe..1a8163a58b1 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/fire-upgradeneeded-event-exception.html +++ b/tests/wpt/web-platform-tests/IndexedDB/fire-upgradeneeded-event-exception.html @@ -15,48 +15,55 @@ function fire_upgradeneeded_event_test(func, description) { del.onerror = t.unreached_func('deleteDatabase should succeed'); const open = indexedDB.open(dbname, 1); open.onsuccess = t.unreached_func('open should fail'); + let tx; + open.addEventListener('upgradeneeded', () => { + tx = open.transaction; + }); func(t, open); + open.addEventListener('error', t.step_func_done(() => { + assert_equals(tx.error.name, 'AbortError'); + })); }, description); } fire_upgradeneeded_event_test((t, open) => { - let tx; open.onupgradeneeded = () => { - tx = open.transaction; throw Error(); }; - open.onerror = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in upgradeneeded handler'); fire_upgradeneeded_event_test((t, open) => { - let tx; open.addEventListener('upgradeneeded', () => { - tx = open.transaction; throw Error(); }); - open.onerror = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in upgradeneeded listener'); fire_upgradeneeded_event_test((t, open) => { - let tx; + open.addEventListener('upgradeneeded', { + get handleEvent() { + throw new Error(); + }, + }); +}, 'Exception in upgradeneeded "handleEvent" lookup'); + +fire_upgradeneeded_event_test((t, open) => { + open.addEventListener('upgradeneeded', { + get handleEvent() { + return 10; + }, + }); +}, 'Exception in upgradeneeded due to non-callable "handleEvent"'); + +fire_upgradeneeded_event_test((t, open) => { open.addEventListener('upgradeneeded', () => { // No-op. }); open.addEventListener('upgradeneeded', () => { - tx = open.transaction; throw Error(); }); - open.onerror = t.step_func_done(() => { - assert_equals(tx.error.name, 'AbortError'); - }); }, 'Exception in second upgradeneeded listener'); fire_upgradeneeded_event_test((t, open) => { - let tx; let second_listener_called = false; open.addEventListener('upgradeneeded', () => { open.result.createObjectStore('s'); @@ -64,14 +71,12 @@ fire_upgradeneeded_event_test((t, open) => { }); open.addEventListener('upgradeneeded', t.step_func(() => { second_listener_called = true; - tx = open.transaction; - assert_true(is_transaction_active(tx, 's'), + assert_true(is_transaction_active(open.transaction, 's'), 'Transaction should be active until dispatch completes'); })); - open.onerror = t.step_func_done(() => { + open.addEventListener('error', t.step_func(() => { assert_true(second_listener_called); - assert_equals(tx.error.name, 'AbortError'); - }); + })); }, 'Exception in first upgradeneeded listener, tx active in second'); </script> diff --git a/tests/wpt/web-platform-tests/IndexedDB/transaction-relaxed-durability.tentative.any.js b/tests/wpt/web-platform-tests/IndexedDB/transaction-relaxed-durability.tentative.any.js index c6a6f37ba9e..2ba96ec08ed 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/transaction-relaxed-durability.tentative.any.js +++ b/tests/wpt/web-platform-tests/IndexedDB/transaction-relaxed-durability.tentative.any.js @@ -12,8 +12,9 @@ let cases = [ undefined, {}, - {relaxedDurability: false}, - {relaxedDurability: true}, + {durability: "default"}, + {durability: "relaxed"}, + {durability: "strict"}, ]; for (let i = 0; i < cases.length; ++i) { diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats/negative-margin-float-positioning.html b/tests/wpt/web-platform-tests/css/CSS2/floats/negative-margin-float-positioning.html new file mode 100644 index 00000000000..8b4aef22f71 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/floats/negative-margin-float-positioning.html @@ -0,0 +1,9 @@ +<!DOCTYPE html> +<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#float-width" title="10.3.5 Floating, non-replaced elements"> +<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html"> +<p>Test passes if there is a filled green square.</p> +<div style="width: 100px;"> + <div style="float: left; width: 50px; height: 100px; margin-left: 50px; margin-right: 50px;background: green;"></div> + <div style="float: left; width: 50px; height: 100px; margin-left: -150px; background: green;"></div> +</div> + diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats/new-fc-beside-float-with-margin-rtl.html b/tests/wpt/web-platform-tests/css/CSS2/floats/new-fc-beside-float-with-margin-rtl.html new file mode 100644 index 00000000000..5a564f7831c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/floats/new-fc-beside-float-with-margin-rtl.html @@ -0,0 +1,9 @@ +<!DOCTYPE html> +<link rel="help" href="https://www.w3.org/TR/CSS22/visuren.html#bfc-next-to-float" title="9.5 Floats"> +<meta name="assert" content="The new formatting context's margin-right does not push it down to the next area."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="width: 100px; height: 100px; background: red; direction: rtl;"> + <div style="float: left; width: 50px; height: 100px; background: green;"></div> + <div style="overflow: hidden; height: 100px; margin-left: -20px; background: green;"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats/new-fc-beside-float-with-margin.html b/tests/wpt/web-platform-tests/css/CSS2/floats/new-fc-beside-float-with-margin.html new file mode 100644 index 00000000000..ead8e548be9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/floats/new-fc-beside-float-with-margin.html @@ -0,0 +1,9 @@ +<!DOCTYPE html> +<link rel="help" href="https://www.w3.org/TR/CSS22/visuren.html#bfc-next-to-float" title="9.5 Floats"> +<meta name="assert" content="The new formatting context's margin-right does not push it down to the next area."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="width: 100px; height: 100px; background: red;"> + <div style="float:left; width:50px; height:100px; background:green;"></div> + <div style="overflow: hidden; margin-right: 1px; width:50px; height:100px; background:green;"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats/zero-width-floats-positioning.html b/tests/wpt/web-platform-tests/css/CSS2/floats/zero-width-floats-positioning.tentative.html index 7f8e34daaef..18f8f6e2046 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/floats/zero-width-floats-positioning.html +++ b/tests/wpt/web-platform-tests/css/CSS2/floats/zero-width-floats-positioning.tentative.html @@ -4,7 +4,7 @@ <link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#float-width" title="10.3.5 Floating, non-replaced elements"> <link rel="match" href="../../reference/ref-filled-green-100px-square-only.html"> <p>Test passes if there is a filled green square.</p> -<div style="margin-left: 50px; width: 125px;"> +<div style="width: 125px;"> <div style="float: left; width: 0px; height: 50px;"></div> <div style="float: right; clear: left; width: 25px; height: 50px;"></div> <div style="overflow: hidden; margin-left: -50px; height: 100px; background: green;"></div> diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-invalid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-invalid.html index a58d2cd11bc..52e42a2e2b6 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-invalid.html @@ -14,6 +14,9 @@ test_invalid_value("animation-delay", "infinite"); test_invalid_value("animation-delay", "0"); test_invalid_value("animation-delay", "1s 2s"); + +test_invalid_value("animation-delay", "initial, -3s"); +test_invalid_value("animation-delay", "-3s, initial"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-direction-invalid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-direction-invalid.html index 0b48d97f0a1..5c96216d045 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-direction-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-direction-invalid.html @@ -13,6 +13,9 @@ <script> test_invalid_value("animation-direction", "auto"); test_invalid_value("animation-direction", "normal reverse"); + +test_invalid_value("animation-direction", "reverse, initial"); +test_invalid_value("animation-direction", "initial, reverse"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-invalid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-invalid.html index 5edacd3735e..bd8cf2adfe9 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-invalid.html @@ -15,6 +15,9 @@ test_invalid_value("animation-duration", '-3s'); test_invalid_value("animation-duration", '0'); test_invalid_value("animation-duration", 'infinite'); test_invalid_value("animation-duration", '1s 2s'); + +test_invalid_value("animation-duration", 'initial, 1s'); +test_invalid_value("animation-duration", '1s, initial'); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-fill-mode-invalid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-fill-mode-invalid.html index dda2221f474..2a82f235463 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-fill-mode-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-fill-mode-invalid.html @@ -13,6 +13,9 @@ <script> test_invalid_value("animation-fill-mode", "auto"); test_invalid_value("animation-fill-mode", "forwards backwards"); + +test_invalid_value("animation-fill-mode", "both, initial"); +test_invalid_value("animation-fill-mode", "initial, both"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-invalid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-invalid.html new file mode 100644 index 00000000000..c5790a3fafa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-invalid.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Animations: parsing animation with invalid values</title> +<link rel="help" href="https://drafts.csswg.org/css-animations/#propdef-animation"> +<meta name="assert" content="animation supports only the grammar '<single-animation> #'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("animation", "1s 2s 3s"); +test_invalid_value("animation", "-1s -2s"); + +test_invalid_value("animation", "steps(1) steps(2)"); + +test_invalid_value("animation", "1 2"); + +test_invalid_value("animation", "reverse alternate anim"); + +test_invalid_value("animation", "both backwards anim"); + +test_invalid_value("animation", "paused running anim"); + +test_invalid_value("animation", "anim1 anim2"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-iteration-count-invalid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-iteration-count-invalid.html index ff1e8e23a08..621340f7c3d 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-iteration-count-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-iteration-count-invalid.html @@ -14,6 +14,9 @@ test_invalid_value("animation-iteration-count", "auto"); test_invalid_value("animation-iteration-count", "-2"); test_invalid_value("animation-iteration-count", "3 4"); + +test_invalid_value("animation-iteration-count", "initial, 4"); +test_invalid_value("animation-iteration-count", "4, initial"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-play-state-invalid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-play-state-invalid.html index f47a2f75ddf..91a6f017370 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-play-state-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-play-state-invalid.html @@ -13,6 +13,9 @@ <script> test_invalid_value("animation-play-state", "auto"); test_invalid_value("animation-play-state", "paused running"); + +test_invalid_value("animation-play-state", "paused, initial"); +test_invalid_value("animation-play-state", "initial, paused"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.html new file mode 100644 index 00000000000..2e3053e7afc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.html @@ -0,0 +1,48 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Animations: animation sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-animations/#propdef-animation"> +<meta name="assert" content="animation supports the full grammar '<single-animation> #'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('animation', 'anim paused both reverse 4 1s -3s cubic-bezier(0, -2, 1, 3)', { + 'animation-duration': '1s', + 'animation-timing-function': 'cubic-bezier(0, -2, 1, 3)', + 'animation-delay': '-3s', + 'animation-iteration-count': '4', + 'animation-direction': 'reverse', + 'animation-fill-mode': 'both', + 'animation-play-state': 'paused', + 'animation-name': 'anim' +}); + +test_shorthand_value('animation', 'anim paused both reverse, 4 1s -3s cubic-bezier(0, -2, 1, 3)', { + 'animation-duration': '0s, 1s', + 'animation-timing-function': 'ease, cubic-bezier(0, -2, 1, 3)', + 'animation-delay': '0s, -3s', + 'animation-iteration-count': '1, 4', + 'animation-direction': 'reverse, normal', + 'animation-fill-mode': 'both, none', + 'animation-play-state': 'paused, running', + 'animation-name': 'anim, none' +}); + +test_shorthand_value('animation', '4 1s -3s cubic-bezier(0, -2, 1, 3), anim paused both reverse', { + 'animation-duration': '1s, 0s', + 'animation-timing-function': 'cubic-bezier(0, -2, 1, 3), ease', + 'animation-delay': '-3s, 0s', + 'animation-iteration-count': '4, 1', + 'animation-direction': 'normal, reverse', + 'animation-fill-mode': 'none, both', + 'animation-play-state': 'running, paused', + 'animation-name': 'none, anim' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-timing-function-invalid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-timing-function-invalid.html index adc1cc10e39..621145b0e00 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-timing-function-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-timing-function-invalid.html @@ -18,6 +18,9 @@ test_invalid_value("animation-timing-function", "cubic-bezier(1, 2, 3, infinite) test_invalid_value("animation-timing-function", "cubic-bezier(1, 2, 3, 4, 5)"); test_invalid_value("animation-timing-function", "cubic-bezier(-0.1, 0.1, 0.5, 0.9)"); test_invalid_value("animation-timing-function", "cubic-bezier(0.5, 0.1, 1.1, 0.9)"); + +test_invalid_value("animation-timing-function", "initial, cubic-bezier(0, -2, 1, 3)"); +test_invalid_value("animation-timing-function", "cubic-bezier(0, -2, 1, 3), initial"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-valid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-valid.html new file mode 100644 index 00000000000..65de3c6fcfe --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-valid.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Animations: parsing animation with valid values</title> +<link rel="help" href="https://drafts.csswg.org/css-animations/#propdef-animation"> +<meta name="assert" content="animation supports the full grammar '<single-animation> #'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +// <single-animation> = <time> || <easing-function> || <time> || +// <single-animation-iteration-count> || <single-animation-direction> || +// <single-animation-fill-mode> || <single-animation-play-state> || +// [ none | <keyframes-name> ] +test_valid_value("animation", "1s", ["1s", "1s ease 0s 1 normal none running none"]); +test_valid_value("animation", "cubic-bezier(0, -2, 1, 3)", ["cubic-bezier(0, -2, 1, 3)", "0s cubic-bezier(0, -2, 1, 3) 0s 1 normal none running none"]); +test_valid_value("animation", "1s -3s", ["1s -3s", "1s ease -3s 1 normal none running none"]); +test_valid_value("animation", "4", ["4", "0s ease 0s 4 normal none running none"]); +test_valid_value("animation", "reverse", ["reverse", "0s ease 0s 1 reverse none running none"]); +test_valid_value("animation", "both", ["both", "0s ease 0s 1 normal both running none"]); +test_valid_value("animation", "paused", ["paused", "0s ease 0s 1 normal none paused none"]); +test_valid_value("animation", "none", ["none", "0s ease 0s 1 normal none running none"]); +test_valid_value("animation", "anim", ["anim", "0s ease 0s 1 normal none running anim"]); + +test_valid_value("animation", "anim paused both reverse 4 1s -3s cubic-bezier(0, -2, 1, 3)", + "1s cubic-bezier(0, -2, 1, 3) -3s 4 reverse both paused anim"); + +test_valid_value("animation", "anim paused both reverse, 4 1s -3s cubic-bezier(0, -2, 1, 3)", + "0s ease 0s 1 reverse both paused anim, 1s cubic-bezier(0, -2, 1, 3) -3s 4 normal none running none"); + +// TODO: Add test with a single negative time. +// TODO: Add test with a single timing-function keyword. +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/animations/border-image-outset-interpolation.html b/tests/wpt/web-platform-tests/css/css-backgrounds/animations/border-image-outset-interpolation.html index d4726e87d11..aebadbbafb2 100644 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/animations/border-image-outset-interpolation.html +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/animations/border-image-outset-interpolation.html @@ -48,14 +48,14 @@ test_interpolation({ test_interpolation({ property: 'border-image-outset', from: 'initial', - to: '2px', + to: '2', }, [ - {at: -0.3, expect: '0px'}, // Non-negative - {at: 0, expect: '0px'}, - {at: 0.3, expect: '0.6px'}, - {at: 0.6, expect: '1.2px'}, - {at: 1, expect: '2px'}, - {at: 1.5, expect: '3px'}, + {at: -0.3, expect: '0'}, // Non-negative + {at: 0, expect: '0'}, + {at: 0.3, expect: '0.6'}, + {at: 0.6, expect: '1.2'}, + {at: 1, expect: '2'}, + {at: 1.5, expect: '3'}, ]); test_interpolation({ @@ -74,14 +74,14 @@ test_interpolation({ test_interpolation({ property: 'border-image-outset', from: 'unset', - to: '2px', + to: '2', }, [ - {at: -0.3, expect: '0px'}, // Non-negative - {at: 0, expect: '0px'}, - {at: 0.3, expect: '0.6px'}, - {at: 0.6, expect: '1.2px'}, - {at: 1, expect: '2px'}, - {at: 1.5, expect: '3px'}, + {at: -0.3, expect: '0'}, // Non-negative + {at: 0, expect: '0'}, + {at: 0.3, expect: '0.6'}, + {at: 0.6, expect: '1.2'}, + {at: 1, expect: '2'}, + {at: 1.5, expect: '3'}, ]); test_interpolation({ diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-color-shorthand.html b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-color-shorthand.html new file mode 100644 index 00000000000..012567830ea --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-color-shorthand.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Backgrounds and Borders Module Level 3: border-color sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-backgrounds/#border-color"> +<meta name="assert" content="border-color supports the full grammar '<color>{1,4}'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('border-color', 'currentcolor', { + 'border-top-color': 'currentcolor', + 'border-right-color': 'currentcolor', + 'border-bottom-color': 'currentcolor', + 'border-left-color': 'currentcolor' +}); + +test_shorthand_value('border-color', 'red yellow', { + 'border-top-color': 'red', + 'border-right-color': 'yellow', + 'border-bottom-color': 'red', + 'border-left-color': 'yellow' +}); + +test_shorthand_value('border-color', 'red yellow green', { + 'border-top-color': 'red', + 'border-right-color': 'yellow', + 'border-bottom-color': 'green', + 'border-left-color': 'yellow' +}); + +test_shorthand_value('border-color', 'red yellow green blue', { + 'border-top-color': 'red', + 'border-right-color': 'yellow', + 'border-bottom-color': 'green', + 'border-left-color': 'blue' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-image-shorthand.sub.html b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-image-shorthand.sub.html new file mode 100644 index 00000000000..37fb998d6c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-image-shorthand.sub.html @@ -0,0 +1,55 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Backgrounds and Borders Module Level 3: border-image sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-backgrounds/#border-image"> +<meta name="assert" content="border-image supports the full grammar ' <‘border-image-source’> || <‘border-image-slice’> [ / <‘border-image-width’> | / <‘border-image-width’>? / <‘border-image-outset’> ]? || <‘border-image-repeat’>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('border-image', 'none', { + 'border-image-source': 'none', + 'border-image-slice': '100%', + 'border-image-width': '1', + 'border-image-outset': '0', + 'border-image-repeat': 'stretch' +}); + +test_shorthand_value('border-image', 'url("http://{{host}}/") 1 2 3 4 fill', { + 'border-image-source': 'url("http://{{host}}/")', + 'border-image-slice': '1 2 3 4 fill', + 'border-image-width': '1', + 'border-image-outset': '0', + 'border-image-repeat': 'stretch' +}); + +test_shorthand_value('border-image', 'repeat round', { + 'border-image-source': 'none', + 'border-image-slice': '100%', + 'border-image-width': '1', + 'border-image-outset': '0', + 'border-image-repeat': 'repeat round' +}); + +test_shorthand_value('border-image', 'url("http://{{host}}/") fill 1 2% 3 4%', { + 'border-image-source': 'url("http://{{host}}/")', + 'border-image-slice': '1 2% 3 4% fill', + 'border-image-width': '1', + 'border-image-outset': '0', + 'border-image-repeat': 'stretch' +}); + +test_shorthand_value('border-image', '1 2% 3 4% / 5% / 6', { + 'border-image-source': 'none', + 'border-image-slice': '1 2% 3 4%', + 'border-image-width': '5%', + 'border-image-outset': '6', + 'border-image-repeat': 'stretch' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-image-width-computed.html b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-image-width-computed.html index 98e5616a228..2c36eda8c78 100644 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-image-width-computed.html +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-image-width-computed.html @@ -17,6 +17,7 @@ <body> <div id="target"></div> <script> +test_computed_value("border-image-width", "0"); test_computed_value("border-image-width", "1"); test_computed_value("border-image-width", "auto"); test_computed_value("border-image-width", "10px"); diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-invalid.html b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-invalid.html index 71404f2ce3e..870e741f445 100644 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-invalid.html @@ -3,9 +3,8 @@ <head> <meta charset="utf-8"> <title>CSS Backgrounds and Borders Module Level 3: parsing border with invalid values</title> -<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> <link rel="help" href="https://drafts.csswg.org/css-backgrounds/#border-shorthands"> -<meta name="assert" content="border-width supports only the grammar '<line-width> || <line-style> || <color>'."> +<meta name="assert" content="border supports only the grammar '<line-width> || <line-style> || <color>'."> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/css/support/parsing-testcommon.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-shorthand.html b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-shorthand.html new file mode 100644 index 00000000000..30491a534ec --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-shorthand.html @@ -0,0 +1,61 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Backgrounds and Borders Module Level 3: border sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-backgrounds/#border-shorthands"> +<meta name="assert" content="border supports the full grammar '<line-width> || <line-style> || <color>'."> +<meta name="assert" content="The border shorthand also resets border-image to its initial value."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('border', '5px dotted blue', { + 'border-top-width': '5px', + 'border-right-width': '5px', + 'border-bottom-width': '5px', + 'border-left-width': '5px', + 'border-top-style': 'dotted', + 'border-right-style': 'dotted', + 'border-bottom-style': 'dotted', + 'border-left-style': 'dotted', + 'border-top-color': 'blue', + 'border-right-color': 'blue', + 'border-bottom-color': 'blue', + 'border-left-color': 'blue', + + 'border-image-source': 'none', + 'border-image-slice': '100%', + 'border-image-width': '1', + 'border-image-outset': '0', + 'border-image-repeat': 'stretch' +}); + +test_shorthand_value('border-top', 'thin', { + 'border-top-width': 'thin', + 'border-top-style': 'none', + 'border-top-color': 'currentcolor' +}); + +test_shorthand_value('border-right', 'double', { + 'border-right-width': 'medium', + 'border-right-style': 'double', + 'border-right-color': 'currentcolor' +}); + +test_shorthand_value('border-bottom', 'green', { + 'border-bottom-width': 'medium', + 'border-bottom-style': 'none', + 'border-bottom-color': 'green' +}); + +test_shorthand_value('border-left', '1px dotted red', { + 'border-left-width': '1px', + 'border-left-style': 'dotted', + 'border-left-color': 'red' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-style-shorthand.html b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-style-shorthand.html new file mode 100644 index 00000000000..b85804e287e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-style-shorthand.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Backgrounds and Borders Module Level 3: border-style sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-backgrounds/#border-style"> +<meta name="assert" content="border-style supports the full grammar '<line-style>{1,4}'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('border-style', 'none', { + 'border-top-style': 'none', + 'border-right-style': 'none', + 'border-bottom-style': 'none', + 'border-left-style': 'none' +}); + +test_shorthand_value('border-style', 'inset outset', { + 'border-top-style': 'inset', + 'border-right-style': 'outset', + 'border-bottom-style': 'inset', + 'border-left-style': 'outset' +}); + +test_shorthand_value('border-style', 'hidden dotted dashed', { + 'border-top-style': 'hidden', + 'border-right-style': 'dotted', + 'border-bottom-style': 'dashed', + 'border-left-style': 'dotted' +}); + +test_shorthand_value('border-style', 'solid double groove ridge', { + 'border-top-style': 'solid', + 'border-right-style': 'double', + 'border-bottom-style': 'groove', + 'border-left-style': 'ridge' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-valid.html b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-valid.html index 37b876ce4e9..8c52b428ba9 100644 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-valid.html +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-valid.html @@ -3,9 +3,8 @@ <head> <meta charset="utf-8"> <title>CSS Backgrounds and Borders Module Level 3: parsing border with valid values</title> -<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> <link rel="help" href="https://drafts.csswg.org/css-backgrounds/#border-shorthands"> -<meta name="assert" content="border-width supports the full grammar '<line-width> || <line-style> || <color>'."> +<meta name="assert" content="border supports the full grammar '<line-width> || <line-style> || <color>'."> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/css/support/parsing-testcommon.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-width-shorthand.html b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-width-shorthand.html new file mode 100644 index 00000000000..07461bc94d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/border-width-shorthand.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Backgrounds and Borders Module Level 3: border-width sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-backgrounds/#border-width"> +<meta name="assert" content="border-width supports the full grammar '<line-width>{1,4}'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('border-width', '5px', { + 'border-top-width': '5px', + 'border-right-width': '5px', + 'border-bottom-width': '5px', + 'border-left-width': '5px' +}); + +test_shorthand_value('border-width', 'thick thin', { + 'border-top-width': 'thick', + 'border-right-width': 'thin', + 'border-bottom-width': 'thick', + 'border-left-width': 'thin' +}); + +test_shorthand_value('border-width', 'thin medium thick', { + 'border-top-width': 'thin', + 'border-right-width': 'medium', + 'border-bottom-width': 'thick', + 'border-left-width': 'medium' +}); + +test_shorthand_value('border-width', '1px 2px 3px 4px', { + 'border-top-width': '1px', + 'border-right-width': '2px', + 'border-bottom-width': '3px', + 'border-left-width': '4px' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/margin-shorthand.html b/tests/wpt/web-platform-tests/css/css-box/parsing/margin-shorthand.html new file mode 100644 index 00000000000..293927983e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/margin-shorthand.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: margin sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-margin"> +<meta name="assert" content="margin supports the full grammar '<length-percentage>{1,4}'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('margin', '1px 2px 3px 4px', { + 'margin-top': '1px', + 'margin-right': '2px', + 'margin-bottom': '3px', + 'margin-left': '4px' +}); + +test_shorthand_value('margin', '1px 2px 3px', { + 'margin-top': '1px', + 'margin-right': '2px', + 'margin-bottom': '3px', + 'margin-left': '2px' +}); + +test_shorthand_value('margin', '1px 2px', { + 'margin-top': '1px', + 'margin-right': '2px', + 'margin-bottom': '1px', + 'margin-left': '2px' +}); + +test_shorthand_value('margin', '1px', { + 'margin-top': '1px', + 'margin-right': '1px', + 'margin-bottom': '1px', + 'margin-left': '1px' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/padding-shorthand.html b/tests/wpt/web-platform-tests/css/css-box/parsing/padding-shorthand.html new file mode 100644 index 00000000000..dc0139dc47a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/padding-shorthand.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: padding sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-padding"> +<meta name="assert" content="padding supports the full grammar '<length-percentage>{1,4}'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('padding', '1px 2px 3px 4px', { + 'padding-top': '1px', + 'padding-right': '2px', + 'padding-bottom': '3px', + 'padding-left': '4px' +}); + +test_shorthand_value('padding', '1px 2px 3px', { + 'padding-top': '1px', + 'padding-right': '2px', + 'padding-bottom': '3px', + 'padding-left': '2px' +}); + +test_shorthand_value('padding', '1px 2px', { + 'padding-top': '1px', + 'padding-right': '2px', + 'padding-bottom': '1px', + 'padding-left': '2px' +}); + +test_shorthand_value('padding', '1px', { + 'padding-top': '1px', + 'padding-right': '1px', + 'padding-bottom': '1px', + 'padding-left': '1px' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-cascade/all-prop-initial-visited-ref.html b/tests/wpt/web-platform-tests/css/css-cascade/all-prop-initial-visited-ref.html new file mode 100644 index 00000000000..f596b559b0e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-cascade/all-prop-initial-visited-ref.html @@ -0,0 +1,3 @@ +<!doctype html> +<title>CSS Test: Reference</title> +<span style="color:green">This text must be green.</a> diff --git a/tests/wpt/web-platform-tests/css/css-cascade/all-prop-initial-visited.html b/tests/wpt/web-platform-tests/css/css-cascade/all-prop-initial-visited.html new file mode 100644 index 00000000000..6fb7936652a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-cascade/all-prop-initial-visited.html @@ -0,0 +1,9 @@ +<!doctype html> +<title>CSS Cascade: Apply all:initial to a visited link overriding with a color</title> +<link rel="help" href="https://drafts.csswg.org/css-cascade/#initial"> +<link rel="match" href="all-prop-initial-visited-ref.html"> +<style> + a { all: initial } + a:visited { color: green } +</style> +<a href="">This text must be green.</a> diff --git a/tests/wpt/web-platform-tests/css/css-content/inheritance.html b/tests/wpt/web-platform-tests/css/css-content/inheritance.html new file mode 100644 index 00000000000..a3242556fdc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-content/inheritance.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Inheritance of CSS Contents properties</title> +<link rel="help" href="https://drafts.csswg.org/css-content/#propdef-quotes"> +<link rel="help" href="https://drafts.csswg.org/css-content/#property-index"> +<meta name="assert" content="Properties inherit or not according to the spec."> +<meta name="assert" content="Properties have initial values according to the spec."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/inheritance-testcommon.js"></script> +</head> +<body> +<div id="container"> + <div id="target"></div> +</div> +<script> +assert_inherited('quotes', 'auto', 'none'); +assert_not_inherited('bookmark-level', 'none', '1'); +assert_not_inherited('bookmark-state', 'open', 'closed'); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/flex-minimum-height-flex-items-019.html b/tests/wpt/web-platform-tests/css/css-flexbox/flex-minimum-height-flex-items-019.html new file mode 100644 index 00000000000..3572a6cc88e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/flex-minimum-height-flex-items-019.html @@ -0,0 +1,53 @@ +<!DOCTYPE html> +<title>CSS Flexbox: min-height: auto with flex items containing percentage-sized children</title> +<link rel="author" title="Google LLC" href="https://www.google.com/" /> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#min-size-auto" /> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht" /> +<link rel="issue" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1003556" /> + +<style> +.flex { + display: flex; +} +.column { + flex-direction: column; +} + +.bigger-than-parent { + height: 100%; + min-height: 100px; + background-color: red; +} + +#reference-overlapped-green { + position: absolute; + background-color: green; + width: 100px; + height: 100px; + z-index: 1; +} + +</style> + +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> + +<div id="reference-overlapped-green"></div> + +<div id="outer" style="width: 100px; height: 300px;" class="flex"> + <div style="height: 100px; width: 100px; background: blue;" class="flex column"> + <div style="flex: 0 1 100%"></div> + + <div style="flex: 1 0 30px;"> + <div class="bigger-than-parent"> + </div> + </div> + </div> +</div> + +<script> +onload = function() { + var outer = document.getElementById("outer"); + outer.offsetWidth; + outer.style.height = "200px"; +}; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/parsing/flex-flow-shorthand.html b/tests/wpt/web-platform-tests/css/css-flexbox/parsing/flex-flow-shorthand.html new file mode 100644 index 00000000000..6ae19bdc044 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/parsing/flex-flow-shorthand.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Flexible Box Layout Module Level 1: flex-flow sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#propdef-flex-flow"> +<meta name="assert" content="flex-flow supports the full grammar '<flex-direction> || <flex-wrap>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('flex-flow', 'nowrap column', { + 'flex-direction': 'column', + 'flex-wrap': 'nowrap' +}); + +test_shorthand_value('flex-flow', 'wrap row-reverse', { + 'flex-direction': 'row-reverse', + 'flex-wrap': 'wrap' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/parsing/flex-shorthand.html b/tests/wpt/web-platform-tests/css/css-flexbox/parsing/flex-shorthand.html new file mode 100644 index 00000000000..51e01794154 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/parsing/flex-shorthand.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Flexible Box Layout Module Level 1: flex sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#propdef-flex"> +<meta name="assert" content="flex supports the full grammar 'none | [ <‘flex-grow’> <‘flex-shrink’>? || <‘flex-basis’> ]'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('flex', 'none', { + 'flex-grow': '0', + 'flex-shrink': '0', + 'flex-basis': 'auto' +}); + +test_shorthand_value('flex', '1', { + 'flex-grow': '1', + 'flex-shrink': '1', + 'flex-basis': '0%' +}); + +test_shorthand_value('flex', '2 3', { + 'flex-grow': '2', + 'flex-shrink': '3', + 'flex-basis': '0%' +}); + +test_shorthand_value('flex', '4 5 6px', { + 'flex-grow': '4', + 'flex-shrink': '5', + 'flex-basis': '6px' +}); + +test_shorthand_value('flex', '7% 8', { + 'flex-grow': '8', + 'flex-shrink': '1', + 'flex-basis': '7%' +}); + +test_shorthand_value('flex', '8 auto', { + 'flex-grow': '8', + 'flex-shrink': '1', + 'flex-basis': 'auto' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-003.html b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-003.html index 9d434cf7cb8..c27af532169 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-003.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-003.html @@ -76,6 +76,15 @@ </div> </div> +<!-- indefinite unwrapped column flexbox where item doesn't stretch --> +<div style="height: 100px;"> + <div class="flexbox column"> + <div style="align-self: flex-start"> + <span data-expected-height="0"></span> + </div> + </div> +</div> + <!-- indefinite wrapped column flexbox --> <div style="height: 100px;"> <div class="flexbox column-wrap"> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html new file mode 100644 index 00000000000..c4ced6b2a12 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<title>CSS Grid Layout Test: dynamic minimum contribution</title> +<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-grid/#min-size-contribution"> +<meta name="assert" content="This test checks that grid items are sized correctly when their minimum contribution is dynamically changed with JavaScript." /> +<style> +#grid { + display: grid; + height: 100px; + width: 100px; +} +</style> +<div id="log"></div> +<div id="grid"> + <div id="item"></div> +</div> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +const tests = [ + ["auto", "100px"], + ["0%", "100px"], + ["100%", "100px"], + ["200%", "200px"], + ["300%", "300px"], + ["400px", "400px"], + ["500px", "500px"], +]; +const item = document.getElementById("item"); +for (let [minSize, expectedSize] of tests) { + test(() => { + item.style.minHeight = item.style.minWidth = minSize; + let cs = getComputedStyle(item); + assert_equals(cs.height, expectedSize, "height"); + assert_equals(cs.width, expectedSize, "width"); + }, `Minimum size: ${minSize}`); +} +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-003.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-003.html new file mode 100644 index 00000000000..03d5d7f2c49 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-003.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage margins</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage margins are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + font: 25px/1 Ahem; + width: 100px; +} +.child { + margin: 50px; + color: red; +} +.ref { + position: absolute; + z-index: -1; + background: green; + height: 100px; +} +.grid { + background: none; +} +#item { + margin: 50%; + color: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child">X</div></div> +<div class="container grid"><div class="child" id="item">X</div></div> +<script> + item.offsetLeft; + item.style.width = "0px"; + item.offsetLeft; + item.style.width = "auto"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-004.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-004.html new file mode 100644 index 00000000000..52e6f3bf1a6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-004.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage margins</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage margins are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + width: 25px; + height: 25px; + margin: 50px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + background: green; + height: 100px; +} +.grid { + background: none; +} +#item { + margin: 50%; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.width = "0px"; + item.offsetLeft; + item.style.width = "25px"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-005.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-005.html new file mode 100644 index 00000000000..9cff92d1aa0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-005.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage margins</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage margins are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + width: 25px; + height: 25px; + margin: 50px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + background: green; + height: 100px; +} +.grid { + background: none; +} +#item { + margin: 50%; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.margin = "100%"; + item.offsetLeft; + item.style.margin = "50%"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-006.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-006.html new file mode 100644 index 00000000000..04d30e3edfc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-006.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage margins</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage margins are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + min-width: 25px; + min-height: 25px; + margin: 50px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + background: green; + height: 100px; +} +.grid { + background: none; +} +#item { + margin: 50%; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.margin = "100%"; + item.offsetLeft; + item.style.margin = "50%"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-007.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-007.html new file mode 100644 index 00000000000..2906fe06087 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-007.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage margins</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage margins are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + font: 25px/1 Ahem; + width: 100px; +} +.child { + margin: 0px 50px; + color: red; +} +.ref { + position: absolute; + z-index: -1; + background: green; + height: 100px; +} +.grid { + background: none; + grid-template-rows: 100px; +} +#item { + margin: 0px 50%; + color: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child">X</div></div> +<div class="container grid"><div class="child" id="item">X</div></div> +<script> + item.offsetLeft; + item.style.width = "0px"; + item.offsetLeft; + item.style.width = "auto"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-008.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-008.html new file mode 100644 index 00000000000..7bd2e0fc5f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-008.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage margins</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage margins are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + width: 25px; + height: 25px; + margin: 0px 50px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + background: green; + height: 100px; +} +.grid { + background: none; + grid-template-rows: 100px; +} +#item { + margin: 0px 50%; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.width = "0px"; + item.offsetLeft; + item.style.width = "25px"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-009.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-009.html new file mode 100644 index 00000000000..70a6c231dc9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-009.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage margins</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage margins are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + width: 25px; + height: 25px; + margin: 0px 50px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + background: green; + height: 100px; +} +.grid { + background: none; + grid-template-rows: 100px; +} +#item { + margin: 0px 50%; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.margin = "0px 100%"; + item.offsetLeft; + item.style.margin = "0px 50%"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-010.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-010.html new file mode 100644 index 00000000000..34352f60020 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-010.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage margins</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage margins are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + min-width: 25px; + min-height: 25px; + margin: 0px 50px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + background: green; + height: 100px; +} +.grid { + background: none; + grid-template-rows: 100px; +} +#item { + margin: 0px 50%; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.margin = "0px 100%"; + item.offsetLeft; + item.style.margin = "0px 50%"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-011.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-011.html new file mode 100644 index 00000000000..36bd208df00 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-011.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage margins</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage margins are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + font: 25px/1 Ahem; + width: 100px; +} +.child { + margin: 50px 0px; + color: red; +} +.ref { + position: absolute; + z-index: -1; + background: green; + height: 100px; +} +.grid { + background: none; +} +#item { + margin: 50% 0px; + color: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child">X</div></div> +<div class="container grid"><div class="child" id="item">X</div></div> +<script> + item.offsetLeft; + item.style.width = "0px"; + item.offsetLeft; + item.style.width = "auto"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-012.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-012.html new file mode 100644 index 00000000000..9cdc15337a9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-012.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage margins</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage margins are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + width: 25px; + height: 25px; + margin: 50px 0px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + background: green; + height: 100px; +} +.grid { + background: none; +} +#item { + margin: 50% 0px; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.width = "0px"; + item.offsetLeft; + item.style.width = "25px"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-013.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-013.html new file mode 100644 index 00000000000..581415b828e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-013.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage margins</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage margins are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + width: 25px; + height: 25px; + margin: 50px 0px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + background: green; + height: 100px; +} +.grid { + background: none; +} +#item { + margin: 50% 0px; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.margin = "100% 0px"; + item.offsetLeft; + item.style.margin = "50% 0px"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-014.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-014.html new file mode 100644 index 00000000000..5766e60339a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-014.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage margins</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage margins are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + min-width: 25px; + min-height: 25px; + margin: 50px 0px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + background: green; + height: 100px; +} +.grid { + background: none; + grid-template-columns: 100px; +} +#item { + margin: 50% 0px; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.margin = "100% 0px"; + item.offsetLeft; + item.style.margin = "50% 0px"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-003.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-003.html new file mode 100644 index 00000000000..d85a6c1abcf --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-003.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage paddings</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage paddings are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + font: 80px/1 Ahem; + width: 100px; +} +.child { + padding: 10px; + color: red; +} +.ref { + position: absolute; + z-index: -1; + background: red; + height: 100px; +} +.grid { + background: green; +} +#item { + padding: 10%; + color: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child">X</div></div> +<div class="container grid"><div class="child" id="item">X</div></div> +<script> + item.offsetLeft; + item.style.width = "0px"; + item.offsetLeft; + item.style.width = "auto"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-004.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-004.html new file mode 100644 index 00000000000..26302daf2d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-004.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage paddings</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage paddings are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + width: 80px; + height: 80px; + padding: 10px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + background: none; + height: 100px; +} +.grid { + background: none; +} +#item { + padding: 10%; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.width = "0px"; + item.offsetLeft; + item.style.width = "80px"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-005.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-005.html new file mode 100644 index 00000000000..151b604f9bb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-005.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage paddings</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage paddings are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + width: 80px; + height: 80px; + padding: 10px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + height: 100px; +} +.grid { + background: none; +} +#item { + padding: 10%; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.padding = "50%"; + item.offsetLeft; + item.style.padding = "10%"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-006.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-006.html new file mode 100644 index 00000000000..bcbc7ced73a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-006.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage paddings</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage paddings are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + min-width: 80px; + min-height: 80px; + padding: 10px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + height: 100px; +} +.grid { + background: none; +} +#item { + padding: 10%; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.padding = "50%"; + item.offsetLeft; + item.style.padding = "10%"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-007.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-007.html new file mode 100644 index 00000000000..d4cf80c18df --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-007.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage paddings</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage paddings are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + font: 80px/1 Ahem; + width: 100px; +} +.child { + padding: 0px 10px; + color: red; +} +.ref { + position: absolute; + z-index: -1; + background: red; + height: 100px; +} +.grid { + background: green; + grid-template-rows: 100px; +} +#item { + padding: 0px 10%; + color: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child">X</div></div> +<div class="container grid"><div class="child" id="item">X</div></div> +<script> + item.offsetLeft; + item.style.width = "0px"; + item.offsetLeft; + item.style.width = "auto"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-008.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-008.html new file mode 100644 index 00000000000..38f766b5cff --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-008.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage paddings</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage paddings are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + width: 80px; + height: 100px; + padding: 0px 10px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + background: none; + height: 100px; +} +.grid { + background: none; + grid-template-rows: 100px; +} +#item { + padding: 0px 10%; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.width = "0px"; + item.offsetLeft; + item.style.width = "80px"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-009.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-009.html new file mode 100644 index 00000000000..eb1d1f47f28 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-009.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage paddings</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage paddings are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + width: 80px; + height: 100px; + padding: 0px 10px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + height: 100px; + grid-template-rows: 100px; +} +.grid { + background: none; + grid-template-rows: 100px; +} +#item { + padding: 0px 10%; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.padding = "0px 50%"; + item.offsetLeft; + item.style.padding = "0px 10%"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-010.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-010.html new file mode 100644 index 00000000000..ecd430c68d4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-010.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage paddings</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage paddings are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + min-width: 80px; + min-height: 100px; + padding: 0px 10px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + height: 100px; +} +.grid { + background: none; + grid-template-rows: 100px; +} +#item { + padding: 0px 10%; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.padding = "0px 50%"; + item.offsetLeft; + item.style.padding = "0px 10%"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-011.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-011.html new file mode 100644 index 00000000000..e394ced4e6e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-011.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage paddings</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage paddings are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + font: 80px/1 Ahem; + width: 100px; +} +.child { + padding: 10px 0px; + color: red; +} +.ref { + position: absolute; + z-index: -1; + background: red; + height: 100px; +} +.grid { + background: green; +} +#item { + padding: 10px 0px; + color: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child">X</div></div> +<div class="container grid"><div class="child" id="item">X</div></div> +<script> + item.offsetLeft; + item.style.width = "0px"; + item.offsetLeft; + item.style.width = "auto"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-012.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-012.html new file mode 100644 index 00000000000..07b2d27b581 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-012.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage paddings</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage paddings are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + width: 100px; + height: 80px; + padding: 10px 0px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + background: none; + height: 100px; +} +.grid { + background: none; +} +#item { + padding: 10% 0px; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.height = "0px"; + item.offsetLeft; + item.style.height = "80px"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-013.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-013.html new file mode 100644 index 00000000000..9b6c2bfe0ad --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-013.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage paddings</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage paddings are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + width: 100px; + height: 80px; + padding: 10px 0px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + height: 100px; +} +.grid { + background: none; +} +#item { + padding: 10% 0px; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.padding = "50% 0px"; + item.offsetLeft; + item.style.padding = "10% 0px"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-014.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-014.html new file mode 100644 index 00000000000..9e67960913a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-014.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with percentage paddings</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> +<meta name="assert" content="Checks grid items percentage paddings are resolved correctly in a 'auto' sized grid area after changing the item's width and forcing a new layout."> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<link rel="stylesheet" href="support/grid.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.container { + width: 100px; +} +.child { + min-width: 100px; + min-height: 80px; + padding: 10px 0px; + background: red; +} +.ref { + position: absolute; + z-index: -1; + height: 100px; +} +.grid { + background: none; +} +#item { + padding: 10% 0px; + background: green; +} +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container ref"><div class="child"></div></div> +<div class="container grid"><div class="child" id="item"></div></div> +<script> + item.offsetLeft; + item.style.padding = "50% 0px"; + item.offsetLeft; + item.style.padding = "10% 0px"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-area-shorthand.html b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-area-shorthand.html new file mode 100644 index 00000000000..9a265502d5c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-area-shorthand.html @@ -0,0 +1,99 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: grid-area sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#propdef-grid-area"> +<meta name="assert" content="grid-area supports the full grammar '<grid-line> [ / <grid-line> ]{0,3}'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('grid-area', 'auto', { + 'grid-row-start': 'auto', + 'grid-column-start': 'auto', + 'grid-row-end': 'auto', + 'grid-column-end': 'auto' +}); + +// <custom-ident> +test_shorthand_value('grid-area', '--a', { + 'grid-row-start': '--a', + 'grid-column-start': '--a', + 'grid-row-end': '--a', + 'grid-column-end': '--a' +}); + +test_shorthand_value('grid-area', 'a / b', { + 'grid-row-start': 'a', + 'grid-column-start': 'b', + 'grid-row-end': 'a', + 'grid-column-end': 'b' +}); + +test_shorthand_value('grid-area', 'a / b / c', { + 'grid-row-start': 'a', + 'grid-column-start': 'b', + 'grid-row-end': 'c', + 'grid-column-end': 'b' +}); + +test_shorthand_value('grid-area', 'a / b / c / d', { + 'grid-row-start': 'a', + 'grid-column-start': 'b', + 'grid-row-end': 'c', + 'grid-column-end': 'd' +}); + +// <integer> && <custom-ident>? +// span && [ <integer> || <custom-ident> ] +test_shorthand_value('grid-area', '+90 -a- / 2 i span', { + 'grid-row-start': '90 -a-', + 'grid-column-start': 'span 2 i', + 'grid-row-end': 'auto', + 'grid-column-end': 'auto' +}); + +test_shorthand_value('grid-area', '1 / 2 / 3 / 4', { + 'grid-row-start': '1', + 'grid-column-start': '2', + 'grid-row-end': '3', + 'grid-column-end': '4' +}); + + +test_shorthand_value('grid-row', 'auto', { + 'grid-row-start': 'auto', + 'grid-row-end': 'auto' +}); + +test_shorthand_value('grid-row', 'one / 2', { + 'grid-row-start': 'one', + 'grid-row-end': '2' +}); + +test_shorthand_value('grid-row', '1 two / four 3', { + 'grid-row-start': '1 two', + 'grid-row-end': '3 four' +}); + + +test_shorthand_value('grid-column', '5 span', { + 'grid-column-start': 'span 5', + 'grid-column-end': 'auto' +}); + +test_shorthand_value('grid-column', '1 / two', { + 'grid-column-start': '1', + 'grid-column-end': 'two' +}); + +test_shorthand_value('grid-column', 'span 1 two / four 3 span', { + 'grid-column-start': 'span 1 two', + 'grid-column-end': 'span 3 four' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-auto-columns-invalid.html b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-auto-columns-invalid.html index 40b6059a7e8..04e0fadf0df 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-auto-columns-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-auto-columns-invalid.html @@ -32,7 +32,8 @@ test_invalid_value("grid-auto-columns", "fit-content(1px auto)"); // <track-size>+ test_invalid_value("grid-auto-columns", "2em / 3em"); test_invalid_value("grid-auto-columns", "auto, 10%"); -test_invalid_value("grid-auto-rows", "1px [a] 1px"); +test_invalid_value("grid-auto-columns", "1px [a] 1px"); +test_invalid_value("grid-auto-columns", "[] 1px []"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-auto-rows-invalid.html b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-auto-rows-invalid.html index 4111e256336..1b61479f3c2 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-auto-rows-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-auto-rows-invalid.html @@ -32,6 +32,7 @@ test_invalid_value("grid-auto-rows", "fit-content(1px auto)"); test_invalid_value("grid-auto-rows", "2em / 3em"); test_invalid_value("grid-auto-rows", "auto, 10%"); test_invalid_value("grid-auto-rows", "1px [a] 1px"); +test_invalid_value("grid-auto-rows", "[] 1px []"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-columns-valid.html b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-columns-valid.html index 85ac76a999a..6bf2e7bce63 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-columns-valid.html +++ b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-columns-valid.html @@ -47,7 +47,7 @@ test_valid_value("grid-template-columns", 'fit-content(calc(30% + 40vw))'); // 'repeat(1, 10px)' in Firefox // '[] 10px' in Safari // '10px' in Edge 18 -test_valid_value("grid-template-columns", 'repeat(1, [] 10px)', ['repeat(1, 10px)', 'repeat(1, [] 10px)']); +test_valid_value("grid-template-columns", 'repeat(1, [] 10px [])', 'repeat(1, 10px)'); // 'repeat(1, [one two] 20%)' in Blink, Firefox // '[one two] 20%' in Safari, Edge 18 @@ -61,6 +61,7 @@ test_valid_value("grid-template-columns", 'repeat(2, fit-content(20%) [three fou // <track-list> = [ <line-names>? [ <track-size> | <track-repeat> ] ]+ <line-names>? test_valid_value("grid-template-columns", 'min-content repeat(5, minmax(10px, auto))'); +test_valid_value("grid-template-columns", '[] 150px [] 1fr []', '150px 1fr'); // <auto-repeat> = repeat( [ auto-fill | auto-fit ] , [ <line-names>? <fixed-size> ]+ <line-names>? ) test_valid_value("grid-template-columns", 'repeat(auto-fill, 10px)'); diff --git a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-rows-valid.html b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-rows-valid.html index ec8d64f79ba..2d3a1ed8045 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-rows-valid.html +++ b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-rows-valid.html @@ -43,11 +43,7 @@ test_valid_value("grid-template-rows", 'fit-content(calc(30% + 40vw))'); // <track-repeat> = repeat( [ <positive-integer> ] , [ <line-names>? <track-size> ]+ <line-names>? ) -// 'repeat(1, [] 10px)' in Blink -// 'repeat(1, 10px)' in Firefox -// '[] 10px' in Safari -// '10px' in Edge 18 -test_valid_value("grid-template-rows", 'repeat(1, [] 10px)', ['repeat(1, 10px)', 'repeat(1, [] 10px)']); +test_valid_value("grid-template-rows", 'repeat(1, [] 10px [])', 'repeat(1, 10px)'); // 'repeat(1, [one two] 20%)' in Blink, Firefox // '[one two] 20%' in Safari, Edge 18 @@ -61,6 +57,7 @@ test_valid_value("grid-template-rows", 'repeat(2, fit-content(20%) [three four] // <track-list> = [ <line-names>? [ <track-size> | <track-repeat> ] ]+ <line-names>? test_valid_value("grid-template-rows", 'min-content repeat(5, minmax(10px, auto))'); +test_valid_value("grid-template-rows", '[] 150px [] 1fr []', '150px 1fr'); // <auto-repeat> = repeat( [ auto-fill | auto-fit ] , [ <line-names>? <fixed-size> ]+ <line-names>? ) test_valid_value("grid-template-rows", 'repeat(auto-fill, 10px)'); diff --git a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-shorthand.html b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-shorthand.html new file mode 100644 index 00000000000..b9165359a72 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-shorthand.html @@ -0,0 +1,62 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: grid-template sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#propdef-grid-template"> +<meta name="assert" content="grid-template supports the full grammar 'none | [ <grid-template-rows> / <grid-template-columns> ] | [ <line-names>? <string> <track-size>? <line-names>? ]+ [ / <explicit-track-list> ]?'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('grid-template', 'none', { + 'grid-template-rows': 'none', + 'grid-template-columns': 'none', + 'grid-template-areas': 'none' +}); + +// <grid-template-rows> / <grid-template-columns> +test_shorthand_value('grid-template', '10px / 20%', { + 'grid-template-rows': '10px', + 'grid-template-columns': '20%', + 'grid-template-areas': 'none' +}); + +test_shorthand_value('grid-template', 'fit-content(calc(-0.5em + 10px)) / fit-content(calc(0.5em + 10px))', { + 'grid-template-rows': 'fit-content(calc(-0.5em + 10px))', + 'grid-template-columns': 'fit-content(calc(0.5em + 10px))', + 'grid-template-areas': 'none' +}); + +// [ <line-names>? <string> <track-size>? <line-names>? ]+ [ / <explicit-track-list> ]? +test_shorthand_value('grid-template', + '[header-top] "a a a" [header-bottom]' + + ' [main-top] "b b b" 1fr [main-bottom]' + + ' / auto 1fr auto', { + 'grid-template-rows': '[header-top] auto [header-bottom main-top] 1fr [main-bottom]', + 'grid-template-columns': 'auto 1fr auto', + 'grid-template-areas': '"a a a" "b b b"' +}); + +test_shorthand_value('grid-template', + ' "a a a"' + + ' "b b b" 1fr' + + '/ auto 1fr auto', { + 'grid-template-rows': 'auto 1fr', + 'grid-template-columns': 'auto 1fr auto', + 'grid-template-areas': '"a a a" "b b b"' +}); + +test_shorthand_value('grid-template', + ' [] "a a a" []' + + ' [] "b b b" 1fr []' + + ' / [] auto 1fr [] auto []', { + 'grid-template-rows': 'auto 1fr', + 'grid-template-columns': 'auto 1fr auto', + 'grid-template-areas': '"a a a" "b b b"' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-lists/parsing/list-style-shorthand.sub.html b/tests/wpt/web-platform-tests/css/css-lists/parsing/list-style-shorthand.sub.html new file mode 100644 index 00000000000..140df208aab --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-lists/parsing/list-style-shorthand.sub.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Lists: list-style sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-lists-3/#propdef-list-style"> +<meta name="assert" content="list-style supports the full grammar '<'list-style-position'> || <'list-style-image'> || <'list-style-type'>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('list-style', 'square url("https://{{host}}/") inside', { + 'list-style-position': 'inside', + 'list-style-image': 'url("https://{{host}}/")', + 'list-style-type': 'square' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-logical/parsing/inset-shorthand.html b/tests/wpt/web-platform-tests/css/css-logical/parsing/inset-shorthand.html new file mode 100644 index 00000000000..4557879129e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-logical/parsing/inset-shorthand.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Logical Properties and Values: inset sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-logical/#propdef-inset"> +<meta name="assert" content="inset supports the full grammar '<'top'>{1,4}'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('inset', '1px 2px 3px 4px', { + 'top': '1px', + 'right': '2px', + 'bottom': '3px', + 'left': '4px' +}); + +test_shorthand_value('inset', '1px 2px 3px', { + 'top': '1px', + 'right': '2px', + 'bottom': '3px', + 'left': '2px' +}); + +test_shorthand_value('inset', '1px 2px', { + 'top': '1px', + 'right': '2px', + 'bottom': '1px', + 'left': '2px' +}); + +test_shorthand_value('inset', '1px', { + 'top': '1px', + 'right': '1px', + 'bottom': '1px', + 'left': '1px' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-margin.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-margin.html index c85232edf23..e6ce4ac49c0 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-margin.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-margin.html @@ -58,14 +58,31 @@ test(() => { test(() => { target.style.left = "0px"; target.style.top = "0px"; - target.style.scrollSnapAlign = "start"; - target.style.scrollMargin = "100px"; - // Scroll to the position between #target and #another-target elements but - // if the scroll-margin 100px contributed to the snap start-aligned snap - // position it will be farther than #another-target. - scroller.scrollTo(200, 200); + // Since the target is at (0px, 0px) in the scroll port, the added margin + // should not be considered, and the snap points for this snap area should be + // the closest points in the scroll port (i.e x=0 or y=0). + target.style.scrollMargin = "200px"; + + // Distance from target without margin: + // `scroll position (150px, 150px)` - `target position (0px, 0px)` + // = (150px, 150px) + // + // Distance from target with margin: + // `scroll position (150px, 150px)` - [`target position (0px, 0px)` - + // `target margin (200px, 200px)`] + // = (350px, 350px) + // + // Distance from other target: + // `other target position (400px, 400px)` - `scroll position (150px, 150px)` + // = (250px, 250px) + // + // Therefore if the "out-of-scrollport" scroll-margin contributes to the + // calculation, then the other target would be snapped to. However if the + // scroll-margin is not considered, then the (0px, 0px) target should be + // snapped to. + scroller.scrollTo(150, 150); assert_equals(scroller.scrollLeft, 0); assert_equals(scroller.scrollTop, 0); }, "scroll-margin doesn't contribute to the snap position of the element " + diff --git a/tests/wpt/web-platform-tests/css/css-text-decor/parsing/text-decoration-shorthand.html b/tests/wpt/web-platform-tests/css/css-text-decor/parsing/text-decoration-shorthand.html new file mode 100644 index 00000000000..904313f0528 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text-decor/parsing/text-decoration-shorthand.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Text Decoration: text-decoration sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-text-decor-3/#propdef-text-decoration"> +<meta name="assert" content="text-decoration supports the full grammar '<‘text-decoration-line’> || <‘text-decoration-style’> || <‘text-decoration-color’>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('text-decoration', 'overline dotted green', { + 'text-decoration-line': 'overline', + 'text-decoration-style': 'dotted', + 'text-decoration-color': 'green' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/AnimationEffect-getComputedTiming.tentative.html b/tests/wpt/web-platform-tests/css/css-transitions/AnimationEffect-getComputedTiming.tentative.html index 4b6a28b5694..32c15f07a96 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/AnimationEffect-getComputedTiming.tentative.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/AnimationEffect-getComputedTiming.tentative.html @@ -162,10 +162,21 @@ test(t => { div.style.marginLeft = '10px'; const effect = div.getAnimations()[0].effect; - assert_equals(effect.getComputedTiming().easing, 'linear', + assert_equals(effect.getComputedTiming().easing, 'ease', 'Initial value of easing'); }, 'easing of a new transition'); +test(t => { + const div = addDiv(t, { class: 'animated-div' }); + div.style.transition = 'margin-left 10s steps(4)'; + getComputedStyle(div).marginLeft; + div.style.marginLeft = '10px'; + + const effect = div.getAnimations()[0].effect; + assert_equals(effect.getComputedTiming().easing, 'steps(4)', + 'Initial value of easing'); +}, 'non-default easing of a new transition'); + // ------------------------------ // endTime diff --git a/tests/wpt/web-platform-tests/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html b/tests/wpt/web-platform-tests/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html index 08a90734392..47b769b13a9 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html @@ -45,7 +45,7 @@ test(t => { const expected = [ { offset: 0, computedOffset: 0, - easing: 'ease', + easing: 'linear', composite: 'auto', left: '0px', }, @@ -80,7 +80,7 @@ test(t => { { offset: 0, computedOffset: 0, - easing: 'steps(2)', + easing: 'linear', composite: 'auto', left: '0px', }, @@ -96,8 +96,7 @@ test(t => { for (let i = 0; i < frames.length; i++) { assert_frames_equal(frames[i], expected[i], `ComputedKeyframe #${i}`); } -}, 'KeyframeEffect.getKeyframes() returns expected frames for a simple' - + ' transition with a non-default easing function'); +}, 'KeyframeEffect.getKeyframes() returns frames unaffected by a non-default easing function'); test(t => { const div = addDiv(t); @@ -114,7 +113,7 @@ test(t => { { offset: 0, computedOffset: 0, - easing: 'ease', + easing: 'linear', composite: 'auto', left: '0px', }, diff --git a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-delay-invalid.html b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-delay-invalid.html index b34d50551ce..4b7a1432860 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-delay-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-delay-invalid.html @@ -14,6 +14,9 @@ test_invalid_value("transition-delay", 'infinite'); test_invalid_value("transition-delay", '0'); test_invalid_value("transition-delay", '500ms 0.5s'); + +test_invalid_value("transition-delay", '-3s, initial'); +test_invalid_value("transition-delay", 'initial, -3s'); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-duration-invalid.html b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-duration-invalid.html index fd0f341f407..4474089bbb0 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-duration-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-duration-invalid.html @@ -14,6 +14,9 @@ test_invalid_value("transition-duration", 'infinite'); test_invalid_value("transition-duration", '-500ms'); test_invalid_value("transition-duration", '1s 2s'); + +test_invalid_value("transition-duration", '1s, initial'); +test_invalid_value("transition-duration", 'initial, 1s'); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-invalid.html b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-invalid.html new file mode 100644 index 00000000000..64310b13a15 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-invalid.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Transitions: parsing transition with invalid values</title> +<link rel="help" href="https://drafts.csswg.org/css-transitions/#transition-shorthand-property"> +<meta name="assert" content="transition supports only the grammar '<single-transition> #'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +// <single-transition> = [ none | <single-transition-property> ] || +// <time> || <easing-function> || <time> +test_invalid_value("transition", "1s 2s 3s"); +test_invalid_value("transition", "-1s -2s"); + +test_invalid_value("transition", "steps(1) steps(2)"); + +test_invalid_value("transition", "none top"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-property-invalid.html b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-property-invalid.html index 903a206eac1..715e13d7a24 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-property-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-property-invalid.html @@ -14,6 +14,9 @@ test_invalid_value("transition-property", 'one two three'); test_invalid_value("transition-property", '1, 2, 3'); test_invalid_value("transition-property", 'none, one'); + +test_invalid_value("transition-property", 'initial, top'); +test_invalid_value("transition-property", 'top, initial'); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-shorthand.html b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-shorthand.html new file mode 100644 index 00000000000..caffb3978cf --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-shorthand.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Transitions: transition sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-transitions/#transition-shorthand-property"> +<meta name="assert" content="transition supports the full grammar '<single-transition> #'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('transition', '1s -3s cubic-bezier(0, -2, 1, 3) top', { + 'transition-property': 'top', + 'transition-duration': '1s', + 'transition-timing-function': 'cubic-bezier(0, -2, 1, 3)', + 'transition-delay': '-3s' +}); + +test_shorthand_value('transition', '1s -3s, cubic-bezier(0, -2, 1, 3) top', { + 'transition-property': 'all, top', + 'transition-duration': '1s, 0s', + 'transition-timing-function': 'ease, cubic-bezier(0, -2, 1, 3)', + 'transition-delay': '-3s, 0s' +}); + +test_shorthand_value('transition', 'cubic-bezier(0, -2, 1, 3) top, 1s -3s', { + 'transition-property': 'top, all', + 'transition-duration': '0s, 1s', + 'transition-timing-function': 'cubic-bezier(0, -2, 1, 3), ease', + 'transition-delay': '0s, -3s' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-timing-function-computed.html b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-timing-function-computed.html index 9834dfdbf0d..fa03b2295b9 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-timing-function-computed.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-timing-function-computed.html @@ -13,6 +13,8 @@ <div id="target"></div> <script> test_computed_value("transition-timing-function", "linear"); +test_computed_value("transition-timing-function", "", "ease"); +test_computed_value("transition-timing-function", "initial", "ease"); test_computed_value("transition-timing-function", "ease"); test_computed_value("transition-timing-function", "ease-in"); @@ -22,7 +24,8 @@ test_computed_value("transition-timing-function", "cubic-bezier(0.1, 0.2, 0.8, 0 test_computed_value("transition-timing-function", "cubic-bezier(0, -2, 1, 3)"); test_computed_value("transition-timing-function", "cubic-bezier(0, 0.7, 1, 1.3)"); - +test_computed_value("transition-timing-function", "step-start", "steps(1, start)"); +test_computed_value("transition-timing-function", "step-end", "steps(1)"); test_computed_value("transition-timing-function", "steps(4, start)"); test_computed_value("transition-timing-function", "steps(2, end)", "steps(2)"); test_computed_value("transition-timing-function", "steps(2, jump-start)"); diff --git a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-timing-function-invalid.html b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-timing-function-invalid.html index 00bd2131e09..c69b7e75d3d 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-timing-function-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-timing-function-invalid.html @@ -14,11 +14,25 @@ <script> test_invalid_value("transition-timing-function", "auto"); test_invalid_value("transition-timing-function", "ease-in ease-out"); + +test_invalid_value("transition-timing-function", "cubic-bezier(foobar)"); test_invalid_value("transition-timing-function", "cubic-bezier(1, 2, 3)"); test_invalid_value("transition-timing-function", "cubic-bezier(1, 2, 3, infinite)"); test_invalid_value("transition-timing-function", "cubic-bezier(1, 2, 3, 4, 5)"); test_invalid_value("transition-timing-function", "cubic-bezier(-0.1, 0.1, 0.5, 0.9)"); test_invalid_value("transition-timing-function", "cubic-bezier(0.5, 0.1, 1.1, 0.9)"); + +test_invalid_value("transition-timing-function", "steps(foobar)"); +test_invalid_value("transition-timing-function", "steps(3.3, end)"); +test_invalid_value("transition-timing-function", "steps(3, top)"); +test_invalid_value("transition-timing-function", "steps(-3, top)"); +test_invalid_value("transition-timing-function", "steps(0, jump-start)"); +test_invalid_value("transition-timing-function", "steps(0, jump-end)"); +test_invalid_value("transition-timing-function", "steps(0, jump-both)"); +test_invalid_value("transition-timing-function", "steps(1, jump-none)"); + +test_invalid_value("transition-timing-function", "initial, cubic-bezier(0, -2, 1, 3)"); +test_invalid_value("transition-timing-function", "cubic-bezier(0, -2, 1, 3), initial"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-timing-function-valid.html b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-timing-function-valid.html index 2e2c1827bfb..5402fdac195 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-timing-function-valid.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-timing-function-valid.html @@ -22,6 +22,9 @@ test_valid_value("transition-timing-function", "cubic-bezier(0.1, 0.2, 0.8, 0.9) test_valid_value("transition-timing-function", "cubic-bezier(0, -2, 1, 3)"); test_valid_value("transition-timing-function", "cubic-bezier(0, 0.7, 1, 1.3)"); +test_valid_value("transition-timing-function", "step-start", "steps(1, start)"); +test_valid_value("transition-timing-function", "step-end", "steps(1)"); +test_valid_value("transition-timing-function", "steps(4)"); test_valid_value("transition-timing-function", "steps(4, start)"); test_valid_value("transition-timing-function", "steps(2, end)", "steps(2)"); test_valid_value("transition-timing-function", "steps(2, jump-start)"); diff --git a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-valid.html b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-valid.html new file mode 100644 index 00000000000..c4651f5f125 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-valid.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Transitions: parsing transition with valid values</title> +<link rel="help" href="https://drafts.csswg.org/css-transitions/#transition-shorthand-property"> +<meta name="assert" content="transition supports the full grammar '<single-transition> #'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +// <single-transition> = [ none | <single-transition-property> ] || +// <time> || <easing-function> || <time> +test_valid_value("transition", "1s", ["1s", "all 1s ease 0s"]); +test_valid_value("transition", "cubic-bezier(0, -2, 1, 3)", ["cubic-bezier(0, -2, 1, 3)", "all 0s cubic-bezier(0, -2, 1, 3) 0s"]); +test_valid_value("transition", "1s -3s", ["1s -3s", "all 1s ease -3s"]); +test_valid_value("transition", "none", ["none", "none 0s ease 0s"]); +test_valid_value("transition", "top", ["top", "top 0s ease 0s"]); + +test_valid_value("transition", "1s -3s cubic-bezier(0, -2, 1, 3) top", "top 1s cubic-bezier(0, -2, 1, 3) -3s"); +test_valid_value("transition", "1s -3s, cubic-bezier(0, -2, 1, 3) top", ["1s -3s, top cubic-bezier(0, -2, 1, 3)", "all 1s ease -3s, top 0s cubic-bezier(0, -2, 1, 3) 0s"]); + +// TODO: Add test with a single negative time. +// TODO: Add test with a single timing-function keyword. +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-delay-000.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-delay-000-manual.html index 2b4cedbb524..b205085997c 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-delay-000.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-delay-000-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="2.4. The 'transition-delay' Property" href="http://www.w3.org/TR/css3-transitions/#transition-delay-property"> -<meta name="flags" content="interact"> <meta name="assert" content="The 'transition-delay' property set positive number to delay the execution of transition"> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-delay-002.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-delay-002-manual.html index 70e952b308c..168f94b9c05 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-delay-002.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-delay-002-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="2.4. The 'transition-delay' Property" href="http://www.w3.org/TR/css3-transitions/#transition-delay-property"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'transition-delay' property set 0 will not delay the execution of transition"> <style> div { @@ -33,7 +32,7 @@ test.addEventListener("click", function(evt) { if (clicked == 0) { ref.setAttribute("style", "background-color: green;"); - setInterval(function() {console.log(clicked); + setInterval(function() { if (clicked == 2) { test.setAttribute("style", "background-color: green;"); } diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-delay-003.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-delay-003-manual.html index 3062e9a4842..e3680ca2615 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-delay-003.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-delay-003-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="2.4. The 'transition-delay' Property" href="http://www.w3.org/TR/css3-transitions/#transition-delay-property"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'transition-delay' property set negative number will not delay the execution of transition"> <style> div { @@ -33,7 +32,7 @@ test.addEventListener("click", function(evt) { if (clicked == 0) { ref.setAttribute("style", "background-color: green;"); - setInterval(function() {console.log(clicked); + setInterval(function() { if (clicked == 2) { test.setAttribute("style", "background-color: green;"); } diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-duration-002.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-duration-002-manual.html index e9ba5760c60..03f514d365d 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-duration-002.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-duration-002-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="2.2. The 'transition-duration' Property" href="http://www.w3.org/TR/css3-transitions/#transition-duration-property"> -<meta name="flags" content="interact"> <meta name="assert" content="The 'transition-duration' property set positive number specifies the time that transition from the old value to the new value should take."> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-duration-003.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-duration-003-manual.html index bb68b5f51c1..cb561008836 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-duration-003.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-duration-003-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="2.2. The 'transition-duration' Property" href="http://www.w3.org/TR/css3-transitions/#transition-duration-property"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the initial value of 'transition-duration' property is '0s' which means the transition is immediate."> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-duration-004.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-duration-004-manual.html index 01c42473319..b93904bb766 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-duration-004.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-duration-004-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="2.2. The 'transition-duration' Property" href="http://www.w3.org/TR/css3-transitions/#transition-duration-property"> -<meta name="flags" content="interact"> <meta name="assert" content="A negative value for 'transition-duration renders the declaration invalid which means the transition is immediate."> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-003.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-003-manual.html index 17668b053e8..291204d5752 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-003.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-003-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="2.1. The 'transition-property' Property" href="http://www.w3.org/TR/css3-transitions/#transition-property-property"> -<meta name="flags" content="interact"> <meta name="assert" content="The 'transition-duration' property set 'none' means that no property will be transitioned."> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-004.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-004-manual.html index 6393c6e3d54..d2e84c99d69 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-004.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-004-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="2.1. The 'transition-property' Property" href="http://www.w3.org/TR/css3-transitions/#transition-property-property"> -<meta name="flags" content="interact"> <meta name="assert" content="The 'transition-duration' property set 'all' means that all properties are transitioned."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-005.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-005-manual.html index a10ff4a3c1a..e69941001bc 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-005.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-005-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="2.1. The 'transition-property' Property" href="http://www.w3.org/TR/css3-transitions/#transition-property-property"> -<meta name="flags" content="interact"> <meta name="assert" content="The 'transition-duration' property set more than one properties like 'height, width' means only the specified properties will be transitioned."> <style> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-006.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-006-manual.html index e7d8c5e3946..6032a401d0c 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-006.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-006-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'background-position' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-007.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-007-manual.html index 0d006fe9b0b..898aea5b207 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-007.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-007-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'border-bottom-color' property animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-008.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-008-manual.html index 47ca1eee105..53caa1028a4 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-008.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-008-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'border-bottom-width' property animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-009.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-009-manual.html index b45948b9dd6..5f272854eb2 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-009.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-009-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'border-left-color' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-010.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-010-manual.html index f05f6aa133e..a7e06ef7807 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-010.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-010-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'border-left-width' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-011.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-011-manual.html index 7b3716dde8a..3799ad212ae 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-011.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-011-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'border-right-color' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-012.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-012-manual.html index 0e19e52d62a..8587e264119 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-012.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-012-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'border-right-width' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-013.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-013-manual.html index 9fb075b09d2..3b13c038161 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-013.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-013-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'border-top-color' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-014.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-014-manual.html index 91075ff638f..d4aca3805b3 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-014.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-014-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'border-top-width' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-015.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-015-manual.html index b37d4fc9a7b..e5805bc4ba6 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-015.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-015-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'border-spacing' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-016.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-016-manual.html index 2670cd73852..d2cc57cd979 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-016.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-016-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'bottom' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-017.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-017-manual.html index 3b94ecde0c5..f24c51a7383 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-017.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-017-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'clip' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-018.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-018-manual.html index 593e3ff7194..e0b6bd955b5 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-018.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-018-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'color' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-019.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-019-manual.html index 83f90000546..24751292c28 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-019.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-019-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'font-size' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-020.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-020-manual.html index af0aea41bcd..e4f7b577920 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-020.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-020-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'font-weight' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-021.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-021-manual.html index f499c9aee43..c0492223bbf 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-021.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-021-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'left' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-022.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-022-manual.html index f36954902e3..ece1a32eb09 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-022.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-022-manual.html @@ -4,7 +4,7 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="ahem interact"> +<meta name="flags" content="ahem"> <meta name="assert" content="Test checks that the 'letter-spacing' property is animatable."> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <style> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-023.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-023-manual.html index 81c8cadac42..267be61aa15 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-023.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-023-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'line-height' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-024.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-024-manual.html index b0e9d41dbc0..fad3d7ac239 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-024.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-024-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'margin-bottom' property is animatable."> <style> #ref { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-025.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-025-manual.html index bfa6f698930..c0f27618489 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-025.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-025-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'margin-left' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-026.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-026-manual.html index d6f0481bea7..35846e3fb53 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-026.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-026-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'margin-right' property is animatable."> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-027.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-027-manual.html index 01f50dc475a..5ad5f5d5bd5 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-027.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-027-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'max-height' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-028.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-028-manual.html index 83d8751109b..be319d2c212 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-028.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-028-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'max-width' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-029.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-029-manual.html index fb435c91249..84c55326fe8 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-029.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-029-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'min-height' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-030.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-030-manual.html index 286af42e12c..ba75f7ce725 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-030.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-030-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'min-width' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-031.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-031-manual.html index d5bf23276f7..14cf23c6bdc 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-031.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-031-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'opacity' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-032.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-032-manual.html index 020a8573c87..c6596608ed1 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-032.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-032-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'outline-color' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-033.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-033-manual.html index fcb999fa079..fd7646c66bc 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-033.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-033-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'outline-width' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-034.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-034-manual.html index b4da3a9bca0..07804121c9c 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-034.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-034-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'padding-bottom' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-035.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-035-manual.html index 27c9ea9e1d8..4a9e9b128fd 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-035.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-035-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'padding-left' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-036.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-036-manual.html index 326e615398c..746bc409ee0 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-036.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-036-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'padding-right' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-037.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-037-manual.html index 79ce16fb961..d031caaaa40 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-037.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-037-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'padding-top' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-038.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-038-manual.html index 5b16e41f578..2f9302bad75 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-038.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-038-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'right' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-039.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-039-manual.html index 0ef6da528cb..bf0b209bdad 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-039.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-039-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'text-indent' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-040.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-040-manual.html index b333f371f3f..83a3cf802b3 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-040.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-040-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'text-shadow' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-041.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-041-manual.html index b3386a0534f..04f8351a030 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-041.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-041-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'top' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-042.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-042-manual.html index fbb3e2d8b1a..15977497fbb 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-042.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-042-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'vertical-align' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-043.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-043-manual.html index b87dc84a856..3b939bcf0ab 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-043.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-043-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the 'visibility' property is animatable."> <style> #test { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-044.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-044-manual.html index f1d584fcf25..d7c2f467492 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-044.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-044-manual.html @@ -4,7 +4,7 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="ahem interact"> +<meta name="flags" content="ahem"> <meta name="assert" content="Test checks that the 'word-spacing' property is animatable."> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <style> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-045.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-045-manual.html index 3fa82c16d1f..912ed4df50c 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-property-045.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-property-045-manual.html @@ -4,7 +4,7 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="7.1. Properties from CSS" href="http://www.w3.org/TR/css3-transitions/#animatable-css"> -<meta name="flags" content="ahem interact"> +<meta name="flags" content="ahem"> <meta name="assert" content="Test checks that the 'z-index' property is animatable."> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-001.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-001.html deleted file mode 100644 index 4c9598f3919..00000000000 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-001.html +++ /dev/null @@ -1,94 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <title>CSS Transitions Test: Parsing transition-timing-function</title> - <meta name="assert" content="Test checks that transition-timing-function values are parsed properly"> - <link rel="help" title="2.3. The 'transition-timing-function' Property" href="http://www.w3.org/TR/css3-transitions/#transition-timing-function-property"> - <link rel="author" title="Rodney Rehm" href="http://rodneyrehm.de/en/"> - <meta name="flags" content="dom"> - - <script src="/resources/testharness.js" type="text/javascript"></script> - <script src="/resources/testharnessreport.js" type="text/javascript"></script> - - <script src="./support/vendorPrefix.js" type="text/javascript"></script> - <script src="./support/helper.js" type="text/javascript"></script> - </head> - <body> - <!-- required by testharnessreport.js --> - <div id="log"></div> - <!-- elements used for testing --> - <div id="container"> - <div id="transition"></div> - </div> - - <script> - var transition = document.getElementById('transition'); - var defaultValue = 'ease'; - var values = { - // keywords - 'ease': 'ease', - 'linear': 'linear', - 'ease-in': 'ease-in', - 'ease-out': 'ease-out', - 'ease-in-out': 'ease-in-out', - 'step-start': 'steps(1, start)', - 'step-end': 'steps(1)', - // cubic bezier - 'cubic-bezier(0.1, 0.2, 0.3, 0.4)': 'cubic-bezier(0.1, 0.2, 0.3, 0.4)', - 'cubic-bezier(0.1, -0.2, 0.3, -0.4)': 'cubic-bezier(0.1, -0.2, 0.3, -0.4)', - 'cubic-bezier(0.1, 1.2, 0.3, 1.4)': 'cubic-bezier(0.1, 1.2, 0.3, 1.4)', - // steps - 'steps(3, start)': 'steps(3, start)', - 'steps(3, end)': 'steps(3)', - 'steps(3)': 'steps(3)', - 'steps(3, jump-start)': 'steps(3, jump-start)', - 'steps(3, jump-end)': 'steps(3)', - 'steps(3, jump-both)': 'steps(3, jump-both)', - 'steps(3, jump-none)': 'steps(3, jump-none)', - // invalid - 'cubic-bezier(foobar)': defaultValue, - 'steps(foobar)': defaultValue, - 'steps(3.3, end)': defaultValue, - 'steps(3, top)': defaultValue, - 'steps(-3, top)': defaultValue, - 'steps(0, jump-start)': defaultValue, - 'steps(0, jump-end)': defaultValue, - 'steps(0, jump-both)': defaultValue, - 'steps(1, jump-none)': defaultValue, - // Both x values must be in the range [0, 1] - 'cubic-bezier(-0.1, -0.2, -0.3, -0.4)': defaultValue, - 'cubic-bezier(1.1, 1.2, 1.3, 1.4)': defaultValue - }; - - // these tests are supposed to fail and - // possibly make the engine issue a parser warning - var invalidTests = { - 'cubic-bezier(foobar)': true, - 'steps(foobar)': true, - 'steps(3.3, end)': true, - 'steps(3, top)': true, - 'steps(-3, top)': true, - // Both x values must be in the range [0, 1] - 'cubic-bezier(-0.1, -0.2, -0.3, -0.4)': true, - 'cubic-bezier(1.1, 1.2, 1.3, 1.4)': true - }; - - for (var key in values) { - if (Object.prototype.hasOwnProperty.call(values, key)) { - test(function() { - setStyle('#transition', { - 'transition-timing-function': key - }); - var result = computedStyle(transition, 'transition-timing-function'); - assert_equals(result, values[key], "Expected computed value"); - }, "parse '" + key + "'", - { - // mark tests that fail as such - flags: invalidTests[key] ? "invalid" : "" - }); - } - } - </script> - </body> -</html> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-002.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-002-manual.html index 527eb9e85ad..abd729bdede 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-002.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-002-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="2.3. The 'transition-timing-function' Property" href="http://www.w3.org/TR/css3-transitions/#transition-timing-function"> -<meta name="flags" content="interact"> <meta name="assert" content="The 'transition-timing-function' property set 'ease' is equivalent to cubic-bezier(0.25, 0.1, 0.25, 1.0)"> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-003.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-003-manual.html index 353b94e7eca..9fee35a972e 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-003.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-003-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="2.3. The 'transition-timing-function' Property" href="http://www.w3.org/TR/css3-transitions/#transition-timing-function"> -<meta name="flags" content="interact"> <meta name="assert" content="The 'transition-timing-function' property set 'ease-in' is equivalent to cubic-bezier(0.42, 0, 1.0, 1.0)"> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-004.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-004-manual.html index 0601b4bd148..f57d49aeabb 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-004.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-004-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="2.3. The 'transition-timing-function' Property" href="http://www.w3.org/TR/css3-transitions/#transition-timing-function"> -<meta name="flags" content="interact"> <meta name="assert" content="The 'transition-timing-function' property set 'ease-in-out' is equivalent to cubic-bezier(0.42, 0, 0.58, 1.0)"> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-005.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-005-manual.html index eb46ece6044..27726cd6d5b 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-005.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-005-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="2.3. The 'transition-timing-function' Property" href="http://www.w3.org/TR/css3-transitions/#transition-timing-function"> -<meta name="flags" content="interact"> <meta name="assert" content="The 'transition-timing-function' property set 'ease-out' is equivalent to cubic-bezier(0, 0, 0.58, 1.0)"> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-006.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-006-manual.html index d8640d93047..d97e6bb0769 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-006.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-006-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="2.3. The 'transition-timing-function' Property" href="http://www.w3.org/TR/css3-transitions/#transition-timing-function"> -<meta name="flags" content="interact"> <meta name="assert" content="The 'transition-timing-function' property set 'linear' is equivalent to cubic-bezier(0.0, 0.0, 1.0, 1.0)"> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-007.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-007.html deleted file mode 100644 index 72ffbf6a130..00000000000 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-007.html +++ /dev/null @@ -1,40 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>CSS Transitions Test: transition-timing-function - 'step-end' equivalent to 'steps(1, end)'</title> -<link rel="author" title="Intel" href="http://www.intel.com"> -<link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> -<link rel="help" title="2.3. The 'transition-timing-function' Property" href="http://www.w3.org/TR/css3-transitions/#transition-timing-function"> -<meta name="flags" content="interact"> -<meta name="assert" content="The 'transition-timing-function' property set 'step-end' is equivalent to 'steps(1, end)'"> -<style> - div { - height: 100px; - transition: width 2s; - width: 100px; - } - #test1 { - background-color: blue; - transition-timing-function: step-end; - } - #test2 { - background-color: yellow; - transition-timing-function: steps(1, end); - } -</style> -<body> - <p>Click the 'Start' button. Test passes if the width growth of blue square is <strong>equivalent</strong> to the yellow square.</p> - <div id="test1"></div> - <div id="test2"></div> - <button>Start</button> - <script> - (function() { - var button = document.querySelector("button"); - button.addEventListener("click", function(evt) { - var test1 = document.querySelector("#test1"), - test2 = document.querySelector("#test2"); - test1.setAttribute("style", "width: 300px"); - test2.setAttribute("style", "width: 300px"); - }, false); - })(); - </script> -</body> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-008.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-008.html deleted file mode 100644 index 2e20f7ee5f2..00000000000 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-008.html +++ /dev/null @@ -1,40 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>CSS Transitions Test: transition-timing-function - 'step-start' equivalent to 'steps(1, start)'</title> -<link rel="author" title="Intel" href="http://www.intel.com"> -<link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> -<link rel="help" title="2.3. The 'transition-timing-function' Property" href="http://www.w3.org/TR/css3-transitions/#transition-timing-function"> -<meta name="flags" content="interact"> -<meta name="assert" content="The 'transition-timing-function' property set 'step-start' is equivalent to 'steps(1, start)'"> -<style> - div { - height: 100px; - transition: width 2s; - width: 100px; - } - #test1 { - background-color: blue; - transition-timing-function: step-start; - } - #test2 { - background-color: yellow; - transition-timing-function: steps(1, start); - } -</style> -<body> - <p>Click the 'Start' button. Test passes if the width growth of blue square is <strong>equivalent</strong> to the yellow square.</p> - <div id="test1"></div> - <div id="test2"></div> - <button>Start</button> - <script> - (function() { - var button = document.querySelector("button"); - button.addEventListener("click", function(evt) { - var test1 = document.querySelector("#test1"), - test2 = document.querySelector("#test2"); - test1.setAttribute("style", "width: 300px"); - test2.setAttribute("style", "width: 300px"); - }, false); - })(); - </script> -</body> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-009.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-009.html deleted file mode 100644 index a3e2f1a6bd2..00000000000 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-009.html +++ /dev/null @@ -1,40 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>CSS Transitions Test: transition-timing-function - ease(initial value)</title> -<link rel="author" title="Intel" href="http://www.intel.com"> -<link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> -<link rel="help" title="2.3. The 'transition-timing-function' Property" href="http://www.w3.org/TR/css3-transitions/#transition-timing-function"> -<meta name="flags" content="interact"> -<meta name="assert" content="Test checks that the initial value of 'transition-timing-function' property is 'ease'."> -<style> - div { - height: 100px; - transition-duration: 2s; - transition-property: width; - width: 100px; - } - #test1 { - background-color: blue; - transition-timing-function: ease; - } - #test2 { - background-color: yellow; - } -</style> -<body> - <p>Click the 'Start' button. Test passes if the width growth of blue square is <strong>equivalent</strong> to the yellow square.</p> - <div id="test1"></div> - <div id="test2"></div> - <button>Start</button> - <script> - (function() { - var button = document.querySelector("button"); - button.addEventListener("click", function(evt) { - var test1 = document.querySelector("#test1"), - test2 = document.querySelector("#test2"); - test1.setAttribute("style", "width: 300px"); - test2.setAttribute("style", "width: 300px"); - }, false); - })(); - </script> -</body> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-010.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-010-manual.html index 16af8065518..953d7210b6d 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-010.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-010-manual.html @@ -4,7 +4,6 @@ <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> <link rel="help" title="2.3. The 'transition-timing-function' Property" href="http://www.w3.org/TR/css3-transitions/#transition-timing-function"> -<meta name="flags" content="interact"> <meta name="assert" content="Test checks that the first parameter of 'steps()' function specifies the number of intervals."> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-011.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-011.html deleted file mode 100644 index 5d0f5a25b25..00000000000 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-011.html +++ /dev/null @@ -1,41 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>CSS Transitions Test: transition-timing-function - steps(the second parameter default 'end')</title> -<link rel="author" title="Intel" href="http://www.intel.com"> -<link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> -<link rel="help" title="2.3. The 'transition-timing-function' Property" href="http://www.w3.org/TR/css3-transitions/#transition-timing-function"> -<meta name="flags" content="interact"> -<meta name="assert" content="Test checks that the second parameter of 'steps()' function is default 'end'."> -<style> - div { - height: 100px; - transition-duration: 2s; - transition-property: width; - width: 100px; - } - #test1 { - background-color: blue; - transition-timing-function: steps(2); - } - #test2 { - background-color: yellow; - transition-timing-function: steps(2, end); - } -</style> -<body> - <p>Click the 'Start' button. Test passes if the width growth of blue square is <strong>equivalent</strong> to the yellow square.</p> - <div id="test1"></div> - <div id="test2"></div> - <button>Start</button> - <script> - (function() { - var button = document.querySelector("button"); - button.addEventListener("click", function(evt) { - var test1 = document.querySelector("#test1"), - test2 = document.querySelector("#test2"); - test1.setAttribute("style", "width: 300px"); - test2.setAttribute("style", "width: 300px"); - }, false); - })(); - </script> -</body> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-012.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-012.html deleted file mode 100644 index f3bc812217e..00000000000 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-012.html +++ /dev/null @@ -1,41 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>CSS Transitions Test: transition-timing-function - steps(-2)</title> -<link rel="author" title="Intel" href="http://www.intel.com"> -<link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> -<link rel="help" title="2.3. The 'transition-timing-function' Property" href="http://www.w3.org/TR/css3-transitions/#transition-timing-function"> -<meta name="flags" content="interact"> -<meta name="assert" content="Test checks that the 'steps()' function with negative number is invalid, the transition-timing-function will use 'ease' as default."> -<style> - div { - height: 100px; - transition-duration: 2s; - transition-property: width; - width: 100px; - } - #test1 { - background-color: blue; - transition-timing-function: steps(-2); - } - #test2 { - background-color: yellow; - transition-timing-function: ease; - } -</style> -<body> - <p>Click the 'Start' button. Test passes if the width growth of blue square is <strong>equivalent</strong> to the yellow square.</p> - <div id="test1"></div> - <div id="test2"></div> - <button>Start</button> - <script> - (function() { - var button = document.querySelector("button"); - button.addEventListener("click", function(evt) { - var test1 = document.querySelector("#test1"), - test2 = document.querySelector("#test2"); - test1.setAttribute("style", "width: 300px"); - test2.setAttribute("style", "width: 300px"); - }, false); - })(); - </script> -</body> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-013.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-013.html deleted file mode 100644 index 5d89c45e024..00000000000 --- a/tests/wpt/web-platform-tests/css/css-transitions/transition-timing-function-013.html +++ /dev/null @@ -1,41 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>CSS Transitions Test: transition-timing-function - steps(0)</title> -<link rel="author" title="Intel" href="http://www.intel.com"> -<link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com"> -<link rel="help" title="2.3. The 'transition-timing-function' Property" href="http://www.w3.org/TR/css3-transitions/#transition-timing-function"> -<meta name="flags" content="interact"> -<meta name="assert" content="Test checks that the 'steps()' function with '0' is invalid, the transition-timing-function will use 'ease' as default."> -<style> - div { - height: 100px; - transition-duration: 2s; - transition-property: width; - width: 100px; - } - #test1 { - background-color: blue; - transition-timing-function: steps(0); - } - #test2 { - background-color: yellow; - transition-timing-function: ease; - } -</style> -<body> - <p>Click the 'Start' button. Test passes if the width growth of blue square is <strong>equivalent</strong> to the yellow square.</p> - <div id="test1"></div> - <div id="test2"></div> - <button>Start</button> - <script> - (function() { - var button = document.querySelector("button"); - button.addEventListener("click", function(evt) { - var test1 = document.querySelector("#test1"), - test2 = document.querySelector("#test2"); - test1.setAttribute("style", "width: 300px"); - test2.setAttribute("style", "width: 300px"); - }, false); - })(); - </script> -</body> diff --git a/tests/wpt/web-platform-tests/css/css-ui/parsing/outline-shorthand.html b/tests/wpt/web-platform-tests/css/css-ui/parsing/outline-shorthand.html new file mode 100644 index 00000000000..01239e199e6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-ui/parsing/outline-shorthand.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS UI Level 3: outline sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-ui-3/#outline"> +<link rel="help" href="https://drafts.csswg.org/cssom/#serializing-css-values"> +<meta name="assert" content="outline supports the full grammar '<outline-color> || <outline> || <outline>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> +<body> +<script> +test_shorthand_value('outline', '3px ridge blue', { + 'outline-color': 'blue', + 'outline-style': 'ridge', + 'outline-width': '3px' +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-values/clamp-length-computed.html b/tests/wpt/web-platform-tests/css/css-values/clamp-length-computed.html new file mode 100644 index 00000000000..67dc19a99f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/clamp-length-computed.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-values-4/#comp-func"> +<link rel="author" title="Xiaocheng Hu" href="mailto:xiaochengh@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../support/computed-testcommon.js"></script> +<div id="container" style="font-size: 20px"> + <div id="target"></div> + <div id="reference"></div> +</div> +<script> +const property = 'letter-spacing'; + +function test_length_equals(value, expected) { + const reference = document.getElementById('reference'); + reference.style[property] = ''; + reference.style[property] = expected; + const computed = getComputedStyle(reference)[property]; + test_computed_value(property, value, computed); +} + +test_length_equals('clamp(10px, 20px, 30px)', '20px'); +test_length_equals('clamp(10px, 5px, 30px)', '10px'); +test_length_equals('clamp(10px, 35px, 30px)', '30px'); + +// clamp(MIN, VAL, MAX) is identical to max(MIN, min(VAL, MAX)), +// so MIN wins over MAX if they are in the wrong order. +test_length_equals('clamp(30px, 100px, 20px)', '30px'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-values/clamp-length-invalid.html b/tests/wpt/web-platform-tests/css/css-values/clamp-length-invalid.html new file mode 100644 index 00000000000..68c298b7ffc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/clamp-length-invalid.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-values-4/#comp-func"> +<link rel="author" title="Xiaocheng Hu" href="mailto:xiaochengh@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../support/parsing-testcommon.js"></script> +<script> +function test_invalid_length(value) { + test_invalid_value('letter-spacing', value); +} + +test_invalid_length('clamp()'); +test_invalid_length('clamp( )'); +test_invalid_length('clamp(,)'); +test_invalid_length('clamp(1px, )'); +test_invalid_length('clamp(, 1px)'); +test_invalid_length('clamp(1px, 1px)'); +test_invalid_length('clamp(1px, , 1px)'); +test_invalid_length('clamp(, 1px, 1px)'); +test_invalid_length('clamp(1px, 1px, )'); +test_invalid_length('clamp(1px, 1px, 1px, )'); +test_invalid_length('clamp(1px 1px 1px)'); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-values/clamp-length-serialize.html b/tests/wpt/web-platform-tests/css/css-values/clamp-length-serialize.html new file mode 100644 index 00000000000..4719e4c0254 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/clamp-length-serialize.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-values-4/#comp-func"> +<link rel="author" title="Xiaocheng Hu" href="mailto:xiaochengh@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../support/parsing-testcommon.js"></script> +<script> +function test_valid_length(value, expected) { + test_valid_value('letter-spacing', value, expected); +} + +test_valid_length('clamp(1px, 2px, 3px)', 'clamp(1px, 2px, 3px)'); +test_valid_length('clamp(1px, 2px, clamp(2px, 3px, 4px))', 'clamp(1px, 2px, clamp(2px, 3px, 4px))'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-values/min-max-percentage-length-interpolation.html b/tests/wpt/web-platform-tests/css/css-values/min-max-percentage-length-interpolation.html new file mode 100644 index 00000000000..14af1352d17 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/min-max-percentage-length-interpolation.html @@ -0,0 +1,33 @@ +<!doctype html> +<link rel="help" href="https://drafts.csswg.org/css-values-4/#comp-func"> +<link rel="author" title="Xiaocheng Hu" href="mailto:xiaochengh@chromium.org"> +<link rel="match" href="../reference/ref-filled-green-100px-square-only.html"> +<title>Tests interpolation between CSS comparison functions</title> +<style> +@keyframes anim { + from { + width: min(50px, 30%); + height: min(75%, 160px); + } + to { + width: max(75%, 100px); + height: max(50px, 20%); + } +} + +.test { + background-color: green; + animation: anim 2000000s linear; + animation-delay: -1000000s; +} + +.container { + position: absolute; + width: 200px; + height: 200px; +} +</style> +<p>Test passes if there is a filled green square.</p> +<div class="container"> + <div class="test"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/mediaqueries/aspect-ratio-serialization.html b/tests/wpt/web-platform-tests/css/mediaqueries/aspect-ratio-serialization.html new file mode 100644 index 00000000000..cce35592885 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/mediaqueries/aspect-ratio-serialization.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Media Queries Test: 'aspect-ratio' serializes with spaces around ' / '.</title> +<link rel="help" href="https://drafts.csswg.org/cssom/#serialize-a-css-component-value"> +<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez"> +<link rel="author" href="https://mozilla.org" title="Mozilla"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + assert_equals(matchMedia("(aspect-ratio: 1/3)").media, "(aspect-ratio: 1 / 3)"); +}, "<ratio> serializes with spaces around the integer."); +</script> diff --git a/tests/wpt/web-platform-tests/css/mediaqueries/navigation-controls.tentative.html b/tests/wpt/web-platform-tests/css/mediaqueries/navigation-controls.tentative.html new file mode 100644 index 00000000000..ac1087bb65b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/mediaqueries/navigation-controls.tentative.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<link rel="help" href="https://github.com/fallaciousreasoning/backbutton-mediaquery/blob/master/explainer.md" /> +<script type="text/javascript" src="/resources/testharness.js"></script> +<script type="text/javascript" src="/resources/testharnessreport.js"></script> +<script type="text/javascript" src="resources/matchmedia-utils.js"></script> +<script> + query_should_be_css_parseable("(navigation-controls)"); + query_should_be_css_parseable("(navigation-controls: none)"); + query_should_be_css_parseable("(navigation-controls: back-button)"); + query_should_not_be_css_parseable("(navigation-controls: none back-button)"); + query_should_not_be_css_parseable("(navigation-controls: back-button/none)"); + query_should_be_js_parseable("(navigation-controls)"); + query_should_be_js_parseable("(navigation-controls: none)"); + query_should_be_js_parseable("(navigation-controls: back-button)"); + query_should_not_be_js_parseable("(navigation-controls: none back-button)"); + query_should_not_be_js_parseable("(navigation-controls: back-button/none)"); + test(() => { + let booleanContext = window.matchMedia("(navigation-controls)"); + let none = window.matchMedia("(navigation-controls: none)"); + assert_equals(booleanContext.matches, !none.matches); + }, "Check that none evaluates to false in the boolean context"); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/motion/animation/offset-interpolation.html b/tests/wpt/web-platform-tests/css/motion/animation/offset-interpolation.html index 04f4d4b3bd7..2ee011bd77a 100644 --- a/tests/wpt/web-platform-tests/css/motion/animation/offset-interpolation.html +++ b/tests/wpt/web-platform-tests/css/motion/animation/offset-interpolation.html @@ -57,9 +57,9 @@ to: 'path("M0 0H 300") 600px 0deg', method: 'CSS Animations', }, [ - {at: -0.3, expect: 'path("M0 0H 170") 470px auto'}, - {at: 0, expect: 'path("M0 0H 200") 500px auto'}, - {at: 0.3, expect: 'path("M0 0H 230") 530px auto'}, + {at: -0.3, expect: 'path("M0 0H 170") 470px'}, + {at: 0, expect: 'path("M0 0H 200") 500px'}, + {at: 0.3, expect: 'path("M0 0H 230") 530px'}, {at: 0.6, expect: 'path("M0 0H 260") 560px 0deg'}, {at: 1, expect: 'path("M0 0H 300") 600px 0deg'}, {at: 1.5, expect: 'path("M0 0H 350") 650px 0deg'}, @@ -85,9 +85,9 @@ to: 'path("M0 0H 300") 600px 0deg', method: 'Web Animations', }, [ - {at: -0.3, expect: 'path("M0 0V 200") 470px auto'}, - {at: 0, expect: 'path("M0 0V 200") 500px auto'}, - {at: 0.3, expect: 'path("M0 0V 200") 530px auto'}, + {at: -0.3, expect: 'path("M0 0V 200") 470px'}, + {at: 0, expect: 'path("M0 0V 200") 500px'}, + {at: 0.3, expect: 'path("M0 0V 200") 530px'}, {at: 0.6, expect: 'path("M0 0H 300") 560px 0deg'}, {at: 1, expect: 'path("M0 0H 300") 600px 0deg'}, {at: 1.5, expect: 'path("M0 0H 300") 650px 0deg'}, diff --git a/tests/wpt/web-platform-tests/css/motion/parsing/offset-parsing-valid.html b/tests/wpt/web-platform-tests/css/motion/parsing/offset-parsing-valid.html index 3fe8a5b20d8..7f8a0fd34c3 100644 --- a/tests/wpt/web-platform-tests/css/motion/parsing/offset-parsing-valid.html +++ b/tests/wpt/web-platform-tests/css/motion/parsing/offset-parsing-valid.html @@ -22,15 +22,18 @@ test_valid_value("offset", "left bottom ray(0rad closest-side) 10px auto 30deg / test_valid_value("offset", "left top"); test_valid_value("offset", "none 30deg reverse", "none reverse 30deg"); test_valid_value("offset", "none 50px reverse 30deg"); -test_valid_value("offset", "none calc(10px + 20%) auto"); +test_valid_value("offset", "none calc(10px + 20%) auto", "none calc(20% + 10px)"); test_valid_value("offset", "none reverse"); -test_valid_value("offset", "path(\"M 0 0 H 1\") -200% auto"); +test_valid_value("offset", "path(\"M 0 0 H 1\") -200% auto", "path(\"M 0 0 H 1\") -200%"); test_valid_value("offset", "path(\"M 0 0 H 1\") -200%"); test_valid_value("offset", "path('M 0 0 H 1') 50px", "path(\"M 0 0 H 1\") 50px"); -test_valid_value("offset", "path(\"M 0 0 H 1\") auto"); +test_valid_value("offset", "path(\"M 0 0 H 1\") auto", "path(\"M 0 0 H 1\")"); +test_valid_value("offset", "path(\"M 0 0 H 1\") auto 0deg", "path(\"M 0 0 H 1\")"); +test_valid_value("offset", "path(\"M 0 0 H 1\") auto 0rad", "path(\"M 0 0 H 1\")"); +test_valid_value("offset", "path(\"M 0 0 H 1\") auto 0.5turn", "path(\"M 0 0 H 1\") auto 0.5turn"); test_valid_value("offset", "path('M 0 0 H 1') reverse 30deg 50px", "path(\"M 0 0 H 1\") 50px reverse 30deg"); test_valid_value("offset", "path(\"M 0 0 H 1\")"); -test_valid_value("offset", "path('m 20 0 h 100') -7rad 8px / auto", "path(\"m 20 0 h 100\") 8px -7rad / auto"); +test_valid_value("offset", "path('m 20 0 h 100') -7rad 8px / auto", "path(\"m 20 0 h 100\") 8px -7rad"); test_valid_value("offset", "path('m 0 30 v 100') -7rad 8px / left top", "path(\"m 0 30 v 100\") 8px -7rad / left top"); test_valid_value("offset", "path('m 0 0 h 100') -7rad 8px", "path(\"m 0 0 h 100\") 8px -7rad"); test_valid_value("offset", "path(\"M 0 0 H 100\") 100px 0deg"); diff --git a/tests/wpt/web-platform-tests/css/support/interpolation-testcommon.js b/tests/wpt/web-platform-tests/css/support/interpolation-testcommon.js index e7ee011cdb4..24c47e136c8 100644 --- a/tests/wpt/web-platform-tests/css/support/interpolation-testcommon.js +++ b/tests/wpt/web-platform-tests/css/support/interpolation-testcommon.js @@ -11,11 +11,10 @@ return keyframe === neutralKeyframe; } - // For the CSS interpolation methods, we set the animation duration long - // enough that any advancement in time during the test is irrelevant in terms - // of the progress. We then set the delay to be negative half the duration, so - // we are immediately at the halfway point of the animation. Finally, we use - // an easing function that maps halfway to whatever progress we actually want. + // For the CSS interpolation methods set the delay to be negative half the + // duration, so we are immediately at the halfway point of the animation. + // We then use an easing function that maps halfway to whatever progress + // we actually want. var cssAnimationsInterpolation = { name: 'CSS Animations', @@ -36,8 +35,8 @@ (isNeutralKeyframe(to) ? '' : `to {${property}:${to};}`) + '}'; target.style.animationName = 'animation' + id; - target.style.animationDuration = '2e9s'; - target.style.animationDelay = '-1e9s'; + target.style.animationDuration = '100s'; + target.style.animationDelay = '-50s'; target.style.animationTimingFunction = createEasing(at); }, }; @@ -54,9 +53,9 @@ }, interpolate: function(property, from, to, at, target) { // Force a style recalc on target to set the 'from' value. - getComputedStyle(target).left; - target.style.transitionDuration = '2e9s'; - target.style.transitionDelay = '-1e9s'; + getComputedStyle(target).getPropertyValue(property); + target.style.transitionDuration = '100s'; + target.style.transitionDelay = '-50s'; target.style.transitionTimingFunction = createEasing(at); target.style.transitionProperty = property; target.style.setProperty(property, isNeutralKeyframe(to) ? '' : to); @@ -76,9 +75,9 @@ }, interpolate: function(property, from, to, at, target) { // Force a style recalc on target to set the 'from' value. - getComputedStyle(target).left; - target.style.transitionDuration = '2e9s'; - target.style.transitionDelay = '-1e9s'; + getComputedStyle(target).getPropertyValue(property); + target.style.transitionDuration = '100s'; + target.style.transitionDelay = '-50s'; target.style.transitionTimingFunction = createEasing(at); target.style.transitionProperty = 'all'; target.style.setProperty(property, isNeutralKeyframe(to) ? '' : to); @@ -104,8 +103,11 @@ property = property.substring(0, i) + property[i + 1].toUpperCase() + property.substring(i + 2); } } - if (property === 'offset') + if (property === 'offset') { property = 'cssOffset'; + } else if (property === 'float') { + property = 'cssFloat'; + } } var keyframes = []; if (!isNeutralKeyframe(from)) { @@ -124,11 +126,11 @@ } var animation = target.animate(keyframes, { fill: 'forwards', - duration: 1, + duration: 100 * 1000, easing: createEasing(at), }); animation.pause(); - animation.currentTime = 0.5; + animation.currentTime = 50 * 1000; }, }; @@ -150,7 +152,7 @@ return 'steps(1, start)'; } if (y == 0.5) { - return 'steps(2, end)'; + return 'linear'; } // Approximate using a bezier. var b = (8 * y - 1) / 6; diff --git a/tests/wpt/web-platform-tests/css/support/shorthand-testcommon.js b/tests/wpt/web-platform-tests/css/support/shorthand-testcommon.js index 1fd603c290c..3298113513f 100644 --- a/tests/wpt/web-platform-tests/css/support/shorthand-testcommon.js +++ b/tests/wpt/web-platform-tests/css/support/shorthand-testcommon.js @@ -3,18 +3,37 @@ function test_shorthand_value(property, value, longhands) { const stringifiedValue = JSON.stringify(value); + for (let longhand of Object.keys(longhands).sort()) { + test(function(){ + var div = document.getElementById('target') || document.createElement('div'); + div.style[property] = ""; + try { + div.style[property] = value; + + const readValue = div.style[longhand]; + assert_equals(readValue, longhands[longhand], longhand + " should be canonical"); + + div.style[longhand] = ""; + div.style[longhand] = readValue; + assert_equals(div.style[longhand], readValue, "serialization should round-trip"); + } finally { + div.style[property] = ""; + } + }, "e.style['" + property + "'] = " + stringifiedValue + " should set " + longhand); + } + test(function(){ var div = document.getElementById('target') || document.createElement('div'); div.style[property] = ""; - div.style[property] = value; - - for (let longhand of Object.keys(longhands).sort()) { - const readValue = div.style[longhand]; - assert_equals(readValue, longhands[longhand], longhand + " should be canonical"); - - div.style[longhand] = ""; - div.style[longhand] = readValue; - assert_equals(div.style[longhand], readValue, "serialization should round-trip"); + try { + const expectedLength = div.style.length; + div.style[property] = value; + for (let longhand of Object.keys(longhands).sort()) { + div.style[longhand] = ""; + } + assert_equals(div.style.length, expectedLength); + } finally { + div.style[property] = ""; } - }, "e.style['" + property + "'] = " + stringifiedValue + " should set the longhand values"); + }, "e.style['" + property + "'] = " + stringifiedValue + " should not set unrelated longhands"); } diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-margin-box-border-radius-008-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-margin-box-border-radius-008-ref.html index f5edbedfb74..7cf8fafc933 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-margin-box-border-radius-008-ref.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-margin-box-border-radius-008-ref.html @@ -40,7 +40,7 @@ } </style> - <body class="bfc"> + <main class="bfc"> <span class="container"> <div class="shape"></div> </span> @@ -50,5 +50,5 @@ <div class="box" style="height: 36px; top: 60px; right: 120px;"></div> <div class="box" style="height: 12px; top: 96px; right: 120px;"></div> <!-- Box at corner --> <div class="box" style="height: 12px; top: 108px; right: 120px;"></div> <!-- Box at corner --> - </body> + </main> </html> diff --git a/tests/wpt/web-platform-tests/dom/nodes/MutationObserver-sanity.html b/tests/wpt/web-platform-tests/dom/nodes/MutationObserver-sanity.html new file mode 100644 index 00000000000..a4f6382b944 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/nodes/MutationObserver-sanity.html @@ -0,0 +1,95 @@ +<!doctype html> +<meta charset=utf-8> +<title></title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> + test(() => { + var m = new MutationObserver(() => {}); + assert_throws_js(TypeError, () => { + m.observe(document, {}); + }); + }, "Should throw if none of childList, attributes, characterData are true"); + + test(() => { + var m = new MutationObserver(() => {}); + m.observe(document, { childList: true }); + m.disconnect(); + }, "Should not throw if childList is true"); + + test(() => { + var m = new MutationObserver(() => {}); + m.observe(document, { attributes: true }); + m.disconnect(); + }, "Should not throw if attributes is true"); + + test(() => { + var m = new MutationObserver(() => {}); + m.observe(document, { characterData: true }); + m.disconnect(); + }, "Should not throw if characterData is true"); + + test(() => { + var m = new MutationObserver(() => {}); + m.observe(document, { attributeOldValue: true }); + m.disconnect(); + }, "Should not throw if attributeOldValue is true and attributes is omitted"); + + test(() => { + var m = new MutationObserver(() => {}); + m.observe(document, { characterDataOldValue: true }); + m.disconnect(); + }, "Should not throw if characterDataOldValue is true and characterData is omitted"); + + test(() => { + var m = new MutationObserver(() => {}); + m.observe(document, { attributes: ["abc"] }); + m.disconnect(); + }, "Should not throw if attributeFilter is present and attributes is omitted"); + + test(() => { + var m = new MutationObserver(() => {}); + assert_throws_js(TypeError, () => { + m.observe(document, { childList: true, attributeOldValue: true, + attributes: false }); + }); + }, "Should throw if attributeOldValue is true and attributes is false"); + + test(() => { + var m = new MutationObserver(() => {}); + m.observe(document, { childList: true, attributeOldValue: true, + attributes: true }); + m.disconnect(); + }, "Should not throw if attributeOldValue and attributes are both true"); + + test(() => { + var m = new MutationObserver(() => {}); + assert_throws_js(TypeError, () => { + m.observe(document, { childList: true, attributeFilter: ["abc"], + attributes: false }); + }); + }, "Should throw if attributeFilter is present and attributes is false"); + + test(() => { + var m = new MutationObserver(() => {}); + m.observe(document, { childList: true, attributeFilter: ["abc"], + attributes: true }); + m.disconnect(); + }, "Should not throw if attributeFilter is present and attributes is true"); + + test(() => { + var m = new MutationObserver(() => {}); + assert_throws_js(TypeError, () => { + m.observe(document, { childList: true, characterDataOldValue: true, + characterData: false }); + }); + }, "Should throw if characterDataOldValue is true and characterData is false"); + + test(() => { + var m = new MutationObserver(() => {}); + m.observe(document, { childList: true, characterDataOldValue: true, + characterData: true }); + m.disconnect(); + }, "Should not throw if characterDataOldValue is true and characterData is true"); + +</script> diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/clearkey-update-non-ascii-input.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/clearkey-update-non-ascii-input.js index b34c493fd11..7a5c073bfab 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/clearkey-update-non-ascii-input.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/clearkey-update-non-ascii-input.js @@ -15,7 +15,7 @@ function runTest(config, qualifier) var mediaKeySession; var messageEventFired = false; - return navigator.requestMediaKeySystemAccess(config.keysystem, [configuration]).then(function (access) { + var p = navigator.requestMediaKeySystemAccess(config.keysystem, [configuration]).then(function (access) { initDataType = access.getConfiguration().initDataTypes[0]; initData = getInitData(config.content, initDataType); return access.createMediaKeys(); @@ -34,15 +34,19 @@ function runTest(config, qualifier) + '}]}'; messageEventFired = true; return messageEvent.target.update(stringToUint8Array(jwkSet)); - }).then(function () { - assert_unreached('Error: update() should fail because the processed message has non-ASCII character.'); }).catch(function (error) { - if(messageEventFired){ - assert_equals(error.name, 'TypeError'); - } - else { - assert_unreached('Error: ' + error.name); + // Ensure we reached the update() call we are trying to test. + if (!messageEventFired) { + assert_unreached( + `Failed to reach the update() call. Error: '${error.name}' '${error.message}'`); } + + // Propagate the error on through. + throw error; }); + + return promise_rejects_js( + test, TypeError, p, + 'update() should fail because the processed message has non-ASCII character.'); }, testname); -}
\ No newline at end of file +} diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/generate-request-disallowed-input.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/generate-request-disallowed-input.js index 8b883ccacff..9fd42ee85fa 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/generate-request-disallowed-input.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/generate-request-disallowed-input.js @@ -57,17 +57,16 @@ function runTest(config,qualifier) { // with the provided initData. generateRequest() should fail with an // TypeError. Returns a promise that is resolved // if the error occurred and rejected otherwise. - return navigator.requestMediaKeySystemAccess(testspec.keysystem, getSimpleConfigurationForInitDataType(testspec.initDataType)).then(function(access) { + var p = navigator.requestMediaKeySystemAccess(testspec.keysystem, getSimpleConfigurationForInitDataType(testspec.initDataType)).then(function(access) { return access.createMediaKeys(); }).then(function(mediaKeys) { var mediaKeySession = mediaKeys.createSession("temporary"); return mediaKeySession.generateRequest(testspec.initDataType, testspec.initData); - }).then(test.step_func(function() { - assert_unreached('generateRequest() succeeded unexpectedly'); - }), test.step_func(function(error) { - assert_equals(error.name, 'TypeError'); - })); - },testspec.testname); + }); + + return promise_rejects_js(test, TypeError, p, + "generateRequest() should fail"); + }, testspec.testname); }); }); } diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/invalid-license.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/invalid-license.js index 992eef5dcf7..89d43769e53 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/invalid-license.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/invalid-license.js @@ -7,7 +7,7 @@ function runTest(config) var invalidLicense = new Uint8Array([0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77]); var messageEventFired = false; - return navigator.requestMediaKeySystemAccess(keySystem, getSimpleConfiguration()).then(function (access) { + var p = navigator.requestMediaKeySystemAccess(keySystem, getSimpleConfiguration()).then(function (access) { initDataType = access.getConfiguration().initDataTypes[0]; initData = getInitData(initDataType); return access.createMediaKeys(); @@ -20,14 +20,19 @@ function runTest(config) }).then(function (messageEvent) { messageEventFired = true; return messageEvent.target.update(invalidLicense); - }).then(function () { - assert_unreached('Error: update() should fail because of an invalid license.'); }).catch(function (error) { - if(messageEventFired) { - assert_equals(error.name, 'TypeError'); - } else { - assert_unreached('Error: ' + error.name); + // Ensure we reached the update() call we are trying to test. + if (!messageEventFired) { + assert_unreached( + `Failed to reach the update() call. Error: '${error.name}' '${error.message}'`); } + + // Propagate the error on through. + throw error; }); + + return promise_rejects_js( + test, TypeError, p, + 'update() should fail because of an invalid license.'); }, 'Update with invalid Clear Key license'); -}
\ No newline at end of file +} diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/requestmediakeysystemaccess.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/requestmediakeysystemaccess.js index edfcbfc6133..a60d4a1e768 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/requestmediakeysystemaccess.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/requestmediakeysystemaccess.js @@ -11,11 +11,17 @@ function runTest(config, qualifier) { modifiedtestname = testname.replace( '%audiocontenttype', audiocontenttypes ).replace( '%videocontenttype', videocontenttypes ); promise_test(function(test) { - return navigator.requestMediaKeySystemAccess(keySystem, configurations).then(function(a) { - assert_unreached('Unexpected requestMediaKeySystemAccess() success.'); - }, function(e) { - assert_equals(e.name, expectedError); - }); + var p = navigator.requestMediaKeySystemAccess(keySystem, configurations); + // expectedError is a string name for the error. We can differentiate + // JS Errors from DOMExceptions by checking whether + // window[expectedError] exists. If it does, expectedError is the name + // of a JS Error subclass and window[expectedError] is the constructor + // for that subclass. Otherwise it's a name for a DOMException. + if (window[expectedError]) { + return promise_rejects_js(test, window[expectedError], p); + } else { + return promise_rejects_dom(test, expectedError, p); + } }, prefix + modifiedtestname + ' should result in ' + expectedError ); } diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/setmediakeys.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/setmediakeys.js index f161e6712fd..a85adeaeafc 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/setmediakeys.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/setmediakeys.js @@ -30,7 +30,8 @@ function runTest(config, qualifier) { assert_unreached('setMediaKeys should fail when setting to wrong kind of object (Date)'); }, function(error) { // The error should be TypeError. - assert_equals(error.name, 'TypeError', 'setMediaKeys should return a TypeError when setting to wrong kind of object (Date)'); + assert_throws_js(TypeError, () => { throw error; }, + 'setMediaKeys should return a TypeError when setting to wrong kind of object (Date)'); return navigator.requestMediaKeySystemAccess(config.keysystem, [configuration]); }).then(function(access) { assert_equals(access.keySystem, config.keysystem) diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/syntax-mediakeysession.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/syntax-mediakeysession.js index 3663a7b930d..fac31cbb3e5 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/syntax-mediakeysession.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/syntax-mediakeysession.js @@ -57,7 +57,14 @@ function runTest(config) { func: function (mk6, type) { return mk6.createSession().generateRequest(type, new Uint8Array(0)); } - } + }, + // Using an empty type should return a 'TypeError'. + { + exception: 'TypeError', + func: function (mk7, type) { + return mk7.createSession().generateRequest('', initData); + } + }, ]; function generateRequestTestExceptions(){ return new Promise(function(resolve, reject){ diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/temporary-license-type.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/temporary-license-type.js index cb0b0e67fef..44c9f158085 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/temporary-license-type.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/temporary-license-type.js @@ -37,7 +37,7 @@ function runTest(config,qualifier) { return; } - assert_equals(error.name, 'TypeError' ); + assert_throws_js(TypeError, () => { throw error; }); test.done(); } ) ); }).catch(onFailure); diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/update-disallowed-input.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/update-disallowed-input.js index b5adaf7f125..2a30ad38d43 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/update-disallowed-input.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/update-disallowed-input.js @@ -21,7 +21,7 @@ function runTest(config) return jwkSet + ',"test":"unknown"'.repeat(4000) + '}'; } - return navigator.requestMediaKeySystemAccess(keySystem, getSimpleConfiguration()).then(function(access) { + var p = navigator.requestMediaKeySystemAccess(keySystem, getSimpleConfiguration()).then(function(access) { initDataType = access.getConfiguration().initDataTypes[0]; initData = getInitData(initDataType); return access.createMediaKeys(); @@ -36,10 +36,8 @@ function runTest(config) assert_greater_than(jwkSet.length, 65536); var jwkSetArray = stringToUint8Array(jwkSet); return mediaKeySession.update(jwkSetArray); - }).then(function () { - assert_unreached('update() with a response longer than 64Kb succeed'); - }).catch(function (error) { - assert_equals(error.name, 'TypeError'); }); + + return promise_rejects_js(test, TypeError, p); }, 'update() with invalid response (longer than 64Kb characters) should fail.'); } diff --git a/tests/wpt/web-platform-tests/encrypted-media/util/utils.js b/tests/wpt/web-platform-tests/encrypted-media/util/utils.js index 41bd71f9b88..79f8c7ea6d1 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/util/utils.js +++ b/tests/wpt/web-platform-tests/encrypted-media/util/utils.js @@ -240,25 +240,31 @@ function test_exception(testCase /*...*/) { var exception = testCase.exception; var args = Array.prototype.slice.call(arguments, 1); - // Currently blink throws for TypeErrors rather than returning - // a rejected promise (http://crbug.com/359386). - // FIXME: Remove try/catch once they become failed promises. - try { - return func.apply(null, args).then( - function (result) { - assert_unreached(format_value(func)); - }, - function (error) { - assert_equals(error.name, exception, format_value(func)); - assert_not_equals(error.message, "", format_value(func)); + // This should really be rewritten in terms of the promise_rejects_* + // testharness utility functions, but that needs the async test involved + // passed in, and we don't have that here. + return func.apply(null, args).then( + function (result) { + assert_unreached(format_value(func)); + }, + function (error) { + assert_not_equals(error.message, "", format_value(func)); + // `exception` is a string name for the error. We can differentiate + // JS Errors from DOMExceptions by checking whether + // window[exception] exists. If it does, expectedError is the name + // of a JS Error subclass and window[exception] is the constructor + // for that subclass. Otherwise it's a name for a DOMException. + if (window[exception]) { + assert_throws_js(window[exception], + () => { throw error; }, + format_value(func)); + } else { + assert_throws_dom(exception, + () => { throw error; }, + format_value(func)); } - ); - } catch (e) { - // Only allow 'TypeError' exceptions to be thrown. - // Everything else should be a failed promise. - assert_equals('TypeError', exception, format_value(func)); - assert_equals(e.name, exception, format_value(func)); - } + } + ); } // Check that the events sequence (array of strings) matches the pattern (array of either strings, or diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/portal.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/portal.tentative.https.sub.html new file mode 100644 index 00000000000..2a9df1f0117 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/portal.tentative.https.sub.html @@ -0,0 +1,48 @@ +<!DOCTYPE html> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src=/fetch/sec-metadata/resources/helper.js></script> +<script src=/common/utils.js></script> +<body> +<script> + const USER = true; + const FORCED = false; + + function create_test(host, expectations) { + async_test(t => { + let p = document.createElement('portal'); + p.addEventListener('message', t.step_func(e => { + assert_header_equals(e.data, expectations); + t.done(); + })); + + let url = `https://${host}/fetch/sec-metadata/resources/post-to-owner.py`; + p.src = url; + document.body.appendChild(p); + }, `{{host}} -> ${host} portal`); + } + + create_test("{{host}}:{{ports[https][0]}}", { + // TODO(mkwst): 'document' seems right, I guess? Perhaps a portal-specific destination would be better? + "dest": "document", + "site": "same-origin", + "user": "", + "mode": "nested-navigate" + }); + + create_test("{{hosts[][www]}}:{{ports[https][0]}}", { + "dest": "document", + "site": "same-site", + "user": "", + "mode": "nested-navigate" + }); + + create_test("{{hosts[alt][www]}}:{{ports[https][0]}}", { + "dest": "document", + "site": "cross-site", + "user": "", + "mode": "nested-navigate" + }); +</script> diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/post-to-owner.py b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/post-to-owner.py index c5ded49d71b..096f33b04a2 100644 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/post-to-owner.py +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/post-to-owner.py @@ -14,6 +14,8 @@ def main(request, response): window.opener.postMessage(data, "*"); if (window.top != window) window.top.postMessage(data, "*"); + if (window.portalHost) + window.portalHost.postMessage(data, "*"); </script> """ % json.dumps({ "dest": request.headers.get("sec-fetch-dest", ""), diff --git a/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html b/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html index f664819d340..50fe71a2c6f 100644 --- a/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html +++ b/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html @@ -561,6 +561,32 @@ addPromiseTest(function() { }); }, "Resolving a promise with a cross-origin location should work (cross-site)."); +addTest(function(win) { + var desc = Object.getOwnPropertyDescriptor(window, "onmouseenter"); + var f = () => {}; + + // Check that it has [LenientThis] behavior + assert_equals(desc.get.call({}), undefined, "getter should return undefined"); + desc.set.call({}, f); // Should not throw. + + // Check that we can apply it to a same-origin window. + assert_equals(desc.get.call(B), null, "Should be able to read the value"); + desc.set.call(B, f); + assert_equals(desc.get.call(B), f, "Value should have updated"); + // And reset it for our next test + desc.set.call(B, null); + assert_equals(desc.get.call(B), null, "Should have been reset"); + + // Check that applying it to a cross-origin window throws instead of doing + // the [LenientThis] behavior. + assert_throws("SecurityError", () => { + desc.get.call(win); + }, "Should throw when getting cross-origin"); + assert_throws("SecurityError", () => { + desc.set.call(win, f); + }, "Should throw when setting cross-origin"); +}, "LenientThis behavior"); + // We do a fresh load of the subframes for each test to minimize side-effects. // It would be nice to reload ourselves as well, but we can't do that without // disrupting the test harness. diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/table-column-width-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/table-column-width-ref.html new file mode 100644 index 00000000000..1eb7c00d214 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/table-column-width-ref.html @@ -0,0 +1,2 @@ +<!doctype html> +<div style="border: 1px solid green; width: 0">Text</div> diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/table-column-width.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/table-column-width.html new file mode 100644 index 00000000000..6358e14a392 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/table-column-width.html @@ -0,0 +1,10 @@ +<!doctype html> +<link rel="match" href="table-column-width-ref.html"> +<table style="display: block"> + <colgroup style="display: block"> + <col style="border: 1px solid green; display: block" width="0"></col> + </colgroup> +</table> +<script> + document.querySelector("col").append("Text"); +</script> diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-aspect-ratio.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-aspect-ratio.html new file mode 100644 index 00000000000..1d231d52cde --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-aspect-ratio.html @@ -0,0 +1,30 @@ +<!doctype html> +<title>Canvas width and height attributes are used to infer aspect-ratio</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + canvas { + width: 100%; + max-width: 100px; + height: auto; + } +</style> +<body> +<script> +let t = async_test("Canvas width and height attributes are used to infer aspect-ratio"); +function assert_ratio(img, expected) { + let epsilon = 0.001; + assert_approx_equals(parseInt(getComputedStyle(img).width, 10) / parseInt(getComputedStyle(img).height, 10), expected, epsilon); +} +// Create and append a new canvas and immediately check the ratio. +t.step(function() { + var canvas = document.createElement("canvas"); + canvas.setAttribute("width", "250"); + canvas.setAttribute("height", "100"); + document.body.appendChild(canvas); + // Canvases always use the aspect ratio from their surface size. + assert_ratio(canvas, 2.5); + + t.done(); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-aspect-ratio.tentative.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-aspect-ratio.tentative.html index ae266882b19..c9ce86869e1 100644 --- a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-aspect-ratio.tentative.html +++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-aspect-ratio.tentative.html @@ -9,7 +9,6 @@ height: auto; } </style> -<img src=broken width=100 height=125> <img src="/images/green.png"> <img src="/images/green.png" width=100 height=125> <script> @@ -18,10 +17,37 @@ function assert_ratio(img, expected) { let epsilon = 0.001; assert_approx_equals(parseInt(getComputedStyle(img).width, 10) / parseInt(getComputedStyle(img).height, 10), expected, epsilon); } +// Create and append a new image and immediately check the ratio. +// This is not racy because the spec requires the user agent to queue a task: +// https://html.spec.whatwg.org/multipage/images.html#updating-the-image-data +t.step(function() { + var img = new Image(); + img.width = 250; + img.height = 100; + img.src = "/images/blue.png"; + document.body.appendChild(img); + assert_ratio(img, 2.5); + + img = new Image(); + img.setAttribute("width", "0.8"); + img.setAttribute("height", "0.2"); + img.src = "/images/blue.png"; + document.body.appendChild(img); + assert_ratio(img, 4); + + img = new Image(); + img.setAttribute("width", "50%"); + img.setAttribute("height", "25%"); + img.src = "/images/blue.png"; + document.body.appendChild(img); + // Percentages should be ignored. + assert_equals(getComputedStyle(img).height, "0px"); +}); + onload = t.step_func_done(function() { let images = document.querySelectorAll("img"); - assert_ratio(images[0], 0.8); - assert_ratio(images[2], 2.0); // 2.0 is the original aspect ratio of green.png - assert_ratio(images[1], 2.0); // Loaded image's aspect ratio, at least by default, overrides width / height ratio. + assert_ratio(images[2], 1.266); // 1.266 is the original aspect ratio of blue.png + assert_ratio(images[1], 2.0); // 2.0 is the original aspect ratio of green.png + assert_ratio(images[0], 2.0); // Loaded image's aspect ratio, at least by default, overrides width / height ratio. }); </script> diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-aspect-ratio.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-aspect-ratio.html new file mode 100644 index 00000000000..2b4937046d2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-aspect-ratio.html @@ -0,0 +1,39 @@ +<!doctype html> +<title>Video width and height attributes are not used to infer aspect-ratio</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/media.js"></script> +<style> + video { + width: 100%; + max-width: 100px; + height: auto; + } +</style> +<body> +<script> +let t = async_test("Video width and height attributes are not used to infer aspect-ratio"); +function assert_ratio(img, expected) { + let epsilon = 0.001; + assert_approx_equals(parseInt(getComputedStyle(img).width, 10) / parseInt(getComputedStyle(img).height, 10), expected, epsilon); +} +// Create and append a new video and immediately check the ratio. +// This is not racy because the spec requires the user agent to queue a task: +// https://html.spec.whatwg.org/multipage/media.html#concept-media-load-algorithm +t.step(function() { + var video = document.createElement("video"); + video.setAttribute("width", "250"); + video.setAttribute("height", "100"); + video.src = getVideoURI('/media/2x2-green'); + document.body.appendChild(video); + // Videos default to a size of 300x150px and calculate their aspect ratio + // based on that before the video is loaded. So this should be 2, ignoring + // the 2.5 that it would be based on the attributes. + assert_ratio(video, 2); + + video.onloadeddata = t.step_func_done(function() { + // When loaded this video is square. + assert_ratio(video, 1); + }); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-different-load.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-different-load.html new file mode 100644 index 00000000000..4802665cdda --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-different-load.html @@ -0,0 +1,44 @@ +<!doctype html> +<title>paused state when removing from a document</title> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1583052"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/media.js"></script> +<div id="log"></div> +<div> + <video hidden></video> +</div> +<script> +function afterStableState(func) { + var a = new Audio(); + a.volume = 0; + a.addEventListener('volumechange', func); +} + +async_test(function(t) { + var v = document.querySelector('video'); + + // Much like pause-remove-from-document.html, modulo this call. + document.body.appendChild(v); + + v.src = getVideoURI('/media/movie_300'); + v.play(); + v.onplaying = t.step_func(function() { + assert_false(v.paused, 'paused after playing'); + v.parentNode.removeChild(v); + assert_false(v.paused, 'paused after removing'); + afterStableState(t.step_func(function() { + assert_true(v.paused, 'paused after stable state'); + v.onpause = t.step_func(function() { + assert_true(v.paused, 'paused in pause event'); + // re-insert and verify that it stays paused + document.body.appendChild(v); + t.step_timeout(function() { + assert_true(v.paused, 'paused after re-inserting'); + t.done(); + }, 0); + }); + })); + }); +}); +</script> diff --git a/tests/wpt/web-platform-tests/infrastructure/expected-fail/unhandled-rejection.html b/tests/wpt/web-platform-tests/infrastructure/expected-fail/unhandled-rejection.html new file mode 100644 index 00000000000..f25f6e088fa --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/expected-fail/unhandled-rejection.html @@ -0,0 +1,8 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Unhandled rejection</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +Promise.reject(new Error("error outside any setup or test")); +</script> diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/unhandled-rejection.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/unhandled-rejection.html.ini new file mode 100644 index 00000000000..39773dfe714 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/unhandled-rejection.html.ini @@ -0,0 +1,4 @@ +[unhandled-rejection.html] + [Unhandled rejection] + expected: FAIL + diff --git a/tests/wpt/web-platform-tests/interfaces/IndexedDB.idl b/tests/wpt/web-platform-tests/interfaces/IndexedDB.idl index 9373f4e43bf..2af9eb2a324 100644 --- a/tests/wpt/web-platform-tests/interfaces/IndexedDB.idl +++ b/tests/wpt/web-platform-tests/interfaces/IndexedDB.idl @@ -163,7 +163,7 @@ interface IDBKeyRange { optional boolean lowerOpen = false, optional boolean upperOpen = false); - boolean _includes(any key); + boolean includes(any key); }; [Exposed=(Window,Worker)] diff --git a/tests/wpt/web-platform-tests/interfaces/WebIDL.idl b/tests/wpt/web-platform-tests/interfaces/WebIDL.idl index 78d85c13fb9..a118dfd1a20 100644 --- a/tests/wpt/web-platform-tests/interfaces/WebIDL.idl +++ b/tests/wpt/web-platform-tests/interfaces/WebIDL.idl @@ -9,9 +9,9 @@ typedef (Int8Array or Int16Array or Int32Array or typedef (ArrayBufferView or ArrayBuffer) BufferSource; [Exposed=(Window,Worker), - Constructor(optional DOMString message = "", optional DOMString name = "Error"), Serializable] interface DOMException { // but see below note about ECMAScript binding + constructor(optional DOMString message = "", optional DOMString name = "Error"); readonly attribute DOMString name; readonly attribute DOMString message; readonly attribute unsigned short code; diff --git a/tests/wpt/web-platform-tests/interfaces/cookie-store.idl b/tests/wpt/web-platform-tests/interfaces/cookie-store.idl index 533884fdb58..c3204b2515a 100644 --- a/tests/wpt/web-platform-tests/interfaces/cookie-store.idl +++ b/tests/wpt/web-platform-tests/interfaces/cookie-store.idl @@ -78,9 +78,9 @@ dictionary CookieListItem { typedef sequence<CookieListItem> CookieList; [Exposed=Window, - SecureContext, - Constructor(DOMString type, optional CookieChangeEventInit eventInitDict)] + SecureContext] interface CookieChangeEvent : Event { + constructor(DOMString type, optional CookieChangeEventInit eventInitDict = {}); readonly attribute CookieList changed; readonly attribute CookieList deleted; }; @@ -90,9 +90,9 @@ dictionary CookieChangeEventInit : EventInit { CookieList deleted; }; -[Exposed=ServiceWorker, - Constructor(DOMString type, optional ExtendableCookieChangeEventInit eventInitDict) +[Exposed=ServiceWorker ] interface ExtendableCookieChangeEvent : ExtendableEvent { + constructor(DOMString type, optional ExtendableCookieChangeEventInit eventInitDict = {}); readonly attribute CookieList changed; readonly attribute CookieList deleted; }; diff --git a/tests/wpt/web-platform-tests/interfaces/css-masking.idl b/tests/wpt/web-platform-tests/interfaces/css-masking.idl index 80f908d42f3..6db59eddbe0 100644 --- a/tests/wpt/web-platform-tests/interfaces/css-masking.idl +++ b/tests/wpt/web-platform-tests/interfaces/css-masking.idl @@ -3,11 +3,13 @@ // (https://github.com/tidoust/reffy-reports) // Source: CSS Masking Module Level 1 (https://drafts.fxtf.org/css-masking-1/) +[Exposed=Window] interface SVGClipPathElement : SVGElement { readonly attribute SVGAnimatedEnumeration clipPathUnits; readonly attribute SVGAnimatedTransformList transform; }; +[Exposed=Window] interface SVGMaskElement : SVGElement { readonly attribute SVGAnimatedEnumeration maskUnits; readonly attribute SVGAnimatedEnumeration maskContentUnits; diff --git a/tests/wpt/web-platform-tests/interfaces/feature-policy.idl b/tests/wpt/web-platform-tests/interfaces/feature-policy.idl index 3ded1e9b0c6..85601321a17 100644 --- a/tests/wpt/web-platform-tests/interfaces/feature-policy.idl +++ b/tests/wpt/web-platform-tests/interfaces/feature-policy.idl @@ -18,6 +18,7 @@ partial interface Document { partial interface HTMLIFrameElement { [SameObject] readonly attribute FeaturePolicy featurePolicy; }; +[Exposed=Window] interface FeaturePolicyViolationReportBody : ReportBody { readonly attribute DOMString featureId; readonly attribute DOMString? sourceFile; diff --git a/tests/wpt/web-platform-tests/interfaces/fetch.idl b/tests/wpt/web-platform-tests/interfaces/fetch.idl index f529c4501bf..eacc69d8b9d 100644 --- a/tests/wpt/web-platform-tests/interfaces/fetch.idl +++ b/tests/wpt/web-platform-tests/interfaces/fetch.idl @@ -5,9 +5,10 @@ typedef (sequence<sequence<ByteString>> or record<ByteString, ByteString>) HeadersInit; -[Constructor(optional HeadersInit init), - Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface Headers { + constructor(optional HeadersInit init); + void append(ByteString name, ByteString value); void delete(ByteString name); ByteString? get(ByteString name); @@ -15,6 +16,7 @@ interface Headers { void set(ByteString name, ByteString value); iterable<ByteString, ByteString>; }; + typedef (Blob or BufferSource or FormData or URLSearchParams or ReadableStream or USVString) BodyInit; interface mixin Body { readonly attribute ReadableStream? body; @@ -27,9 +29,10 @@ interface mixin Body { }; typedef (Request or USVString) RequestInfo; -[Constructor(RequestInfo input, optional RequestInit init = {}), - Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface Request { + constructor(RequestInfo input, optional RequestInit init = {}); + readonly attribute ByteString method; readonly attribute USVString url; [SameObject] readonly attribute Headers headers; @@ -72,8 +75,10 @@ enum RequestMode { "navigate", "same-origin", "no-cors", "cors" }; enum RequestCredentials { "omit", "same-origin", "include" }; enum RequestCache { "default", "no-store", "reload", "no-cache", "force-cache", "only-if-cached" }; enum RequestRedirect { "follow", "error", "manual" }; -[Constructor(optional BodyInit? body = null, optional ResponseInit init = {}), Exposed=(Window,Worker)] -interface Response { + +[Exposed=(Window,Worker)]interface Response { + constructor(optional BodyInit? body = null, optional ResponseInit init = {}); + [NewObject] static Response error(); [NewObject] static Response redirect(USVString url, optional unsigned short status = 302); @@ -98,6 +103,7 @@ dictionary ResponseInit { }; enum ResponseType { "basic", "cors", "default", "error", "opaque", "opaqueredirect" }; + partial interface mixin WindowOrWorkerGlobalScope { - [NewObject] Promise<Response> fetch(RequestInfo input, optional RequestInit init); + [NewObject] Promise<Response> fetch(RequestInfo input, optional RequestInit init = {}); }; diff --git a/tests/wpt/web-platform-tests/interfaces/gamepad.idl b/tests/wpt/web-platform-tests/interfaces/gamepad.idl index b7497c276f1..27541bf2553 100644 --- a/tests/wpt/web-platform-tests/interfaces/gamepad.idl +++ b/tests/wpt/web-platform-tests/interfaces/gamepad.idl @@ -38,6 +38,6 @@ interface GamepadEvent: Event { [SameObject] readonly attribute Gamepad gamepad; }; -dictionary GamepadEventInit: EventInit { +dictionary GamepadEventInit : EventInit { required Gamepad gamepad; }; diff --git a/tests/wpt/web-platform-tests/interfaces/generic-sensor.idl b/tests/wpt/web-platform-tests/interfaces/generic-sensor.idl index 2921c50a65e..f3eeb9bf968 100644 --- a/tests/wpt/web-platform-tests/interfaces/generic-sensor.idl +++ b/tests/wpt/web-platform-tests/interfaces/generic-sensor.idl @@ -19,9 +19,9 @@ dictionary SensorOptions { double frequency; }; -[Constructor(DOMString type, SensorErrorEventInit errorEventInitDict), - SecureContext, Exposed=(DedicatedWorker, Window)] +[SecureContext, Exposed=(DedicatedWorker, Window)] interface SensorErrorEvent : Event { + constructor(DOMString type, SensorErrorEventInit errorEventInitDict); readonly attribute DOMException error; }; diff --git a/tests/wpt/web-platform-tests/interfaces/magnetometer.idl b/tests/wpt/web-platform-tests/interfaces/magnetometer.idl index be6cbc9d47a..da1f22bb668 100644 --- a/tests/wpt/web-platform-tests/interfaces/magnetometer.idl +++ b/tests/wpt/web-platform-tests/interfaces/magnetometer.idl @@ -3,9 +3,10 @@ // (https://github.com/tidoust/reffy-reports) // Source: Magnetometer (https://w3c.github.io/magnetometer/) -[Constructor(optional MagnetometerSensorOptions sensorOptions = {}), SecureContext, +[SecureContext, Exposed=Window] interface Magnetometer : Sensor { + constructor(optional MagnetometerSensorOptions sensorOptions = {}); readonly attribute double? x; readonly attribute double? y; readonly attribute double? z; @@ -17,9 +18,10 @@ dictionary MagnetometerSensorOptions : SensorOptions { MagnetometerLocalCoordinateSystem referenceFrame = "device"; }; -[Constructor(optional MagnetometerSensorOptions sensorOptions = {}), SecureContext, +[SecureContext, Exposed=Window] interface UncalibratedMagnetometer : Sensor { + constructor(optional MagnetometerSensorOptions sensorOptions = {}); readonly attribute double? x; readonly attribute double? y; readonly attribute double? z; diff --git a/tests/wpt/web-platform-tests/interfaces/notifications.idl b/tests/wpt/web-platform-tests/interfaces/notifications.idl index 1a55c31bb04..d79e9076c81 100644 --- a/tests/wpt/web-platform-tests/interfaces/notifications.idl +++ b/tests/wpt/web-platform-tests/interfaces/notifications.idl @@ -3,9 +3,10 @@ // (https://github.com/tidoust/reffy-reports) // Source: Notifications API Standard (https://notifications.spec.whatwg.org/) -[Constructor(DOMString title, optional NotificationOptions options = {}), - Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface Notification : EventTarget { + constructor(DOMString title, optional NotificationOptions options = {}); + static readonly attribute NotificationPermission permission; [Exposed=Window] static Promise<NotificationPermission> requestPermission(optional NotificationPermissionCallback deprecatedCallback); @@ -81,9 +82,10 @@ partial interface ServiceWorkerRegistration { Promise<sequence<Notification>> getNotifications(optional GetNotificationOptions filter = {}); }; -[Constructor(DOMString type, NotificationEventInit eventInitDict), - Exposed=ServiceWorker] +[Exposed=ServiceWorker] interface NotificationEvent : ExtendableEvent { + constructor(DOMString type, NotificationEventInit eventInitDict); + readonly attribute Notification notification; readonly attribute DOMString action; }; diff --git a/tests/wpt/web-platform-tests/interfaces/orientation-event.idl b/tests/wpt/web-platform-tests/interfaces/orientation-event.idl index a8eef516f29..af5bc546ac1 100644 --- a/tests/wpt/web-platform-tests/interfaces/orientation-event.idl +++ b/tests/wpt/web-platform-tests/interfaces/orientation-event.idl @@ -7,8 +7,9 @@ partial interface Window { [SecureContext] attribute EventHandler ondeviceorientation; }; -[Constructor(DOMString type, optional DeviceOrientationEventInit eventInitDict = {}), Exposed=Window, SecureContext] +[Exposed=Window, SecureContext] interface DeviceOrientationEvent : Event { + constructor(DOMString type, optional DeviceOrientationEventInit eventInitDict = {}); readonly attribute double? alpha; readonly attribute double? beta; readonly attribute double? gamma; @@ -41,22 +42,23 @@ partial interface Window { [SecureContext] attribute EventHandler ondevicemotion; }; -[SecureContext] +[Exposed=Window, SecureContext] interface DeviceMotionEventAcceleration { readonly attribute double? x; readonly attribute double? y; readonly attribute double? z; }; -[SecureContext] +[Exposed=Window, SecureContext] interface DeviceMotionEventRotationRate { readonly attribute double? alpha; readonly attribute double? beta; readonly attribute double? gamma; }; -[Constructor(DOMString type, optional DeviceMotionEventInit eventInitDict = {}), Exposed=Window, SecureContext] +[Exposed=Window, SecureContext] interface DeviceMotionEvent : Event { + constructor(DOMString type, optional DeviceMotionEventInit eventInitDict = {}); readonly attribute DeviceMotionEventAcceleration? acceleration; readonly attribute DeviceMotionEventAcceleration? accelerationIncludingGravity; readonly attribute DeviceMotionEventRotationRate? rotationRate; diff --git a/tests/wpt/web-platform-tests/interfaces/orientation-sensor.idl b/tests/wpt/web-platform-tests/interfaces/orientation-sensor.idl index 9ee099881b0..2ea3d38240e 100644 --- a/tests/wpt/web-platform-tests/interfaces/orientation-sensor.idl +++ b/tests/wpt/web-platform-tests/interfaces/orientation-sensor.idl @@ -17,12 +17,14 @@ dictionary OrientationSensorOptions : SensorOptions { OrientationSensorLocalCoordinateSystem referenceFrame = "device"; }; -[Constructor(optional OrientationSensorOptions sensorOptions = {}), SecureContext, Exposed=Window] +[SecureContext, Exposed=Window] interface AbsoluteOrientationSensor : OrientationSensor { + constructor(optional OrientationSensorOptions sensorOptions = {}); }; -[Constructor(optional OrientationSensorOptions sensorOptions = {}), SecureContext, Exposed=Window] +[SecureContext, Exposed=Window] interface RelativeOrientationSensor : OrientationSensor { + constructor(optional OrientationSensorOptions sensorOptions = {}); }; dictionary AbsoluteOrientationReadingValues { diff --git a/tests/wpt/web-platform-tests/interfaces/payment-handler.idl b/tests/wpt/web-platform-tests/interfaces/payment-handler.idl index b5d79decb06..c87c855d439 100644 --- a/tests/wpt/web-platform-tests/interfaces/payment-handler.idl +++ b/tests/wpt/web-platform-tests/interfaces/payment-handler.idl @@ -40,8 +40,9 @@ partial interface ServiceWorkerGlobalScope { attribute EventHandler oncanmakepayment; }; -[Constructor(DOMString type, CanMakePaymentEventInit eventInitDict), Exposed=ServiceWorker] +[Exposed=ServiceWorker] interface CanMakePaymentEvent : ExtendableEvent { + constructor(DOMString type, CanMakePaymentEventInit eventInitDict); readonly attribute USVString topOrigin; readonly attribute USVString paymentRequestOrigin; readonly attribute FrozenArray<PaymentMethodData> methodData; @@ -65,8 +66,9 @@ dictionary PaymentMethodChangeResponse { object paymentMethodErrors; }; -[Constructor(DOMString type, PaymentRequestEventInit eventInitDict), Exposed=ServiceWorker] +[Exposed=ServiceWorker] interface PaymentRequestEvent : ExtendableEvent { + constructor(DOMString type, PaymentRequestEventInit eventInitDict); readonly attribute USVString topOrigin; readonly attribute USVString paymentRequestOrigin; readonly attribute DOMString paymentRequestId; diff --git a/tests/wpt/web-platform-tests/interfaces/proximity.idl b/tests/wpt/web-platform-tests/interfaces/proximity.idl index 570a29fd37b..d4c8fae3a54 100644 --- a/tests/wpt/web-platform-tests/interfaces/proximity.idl +++ b/tests/wpt/web-platform-tests/interfaces/proximity.idl @@ -3,7 +3,7 @@ // (https://github.com/tidoust/reffy-reports) // Source: Proximity Sensor (https://w3c.github.io/proximity/) -[Constructor(optional SensorOptions sensorOptions), SecureContext, Exposed=Window] +[Constructor(optional SensorOptions sensorOptions = {}), SecureContext, Exposed=Window] interface ProximitySensor : Sensor { readonly attribute double? distance; readonly attribute double? max; diff --git a/tests/wpt/web-platform-tests/interfaces/touch-events.idl b/tests/wpt/web-platform-tests/interfaces/touch-events.idl index 1a8c9d7d24e..84c48284a1b 100644 --- a/tests/wpt/web-platform-tests/interfaces/touch-events.idl +++ b/tests/wpt/web-platform-tests/interfaces/touch-events.idl @@ -9,46 +9,47 @@ enum TouchType { }; dictionary TouchInit { - required long identifier; + required long identifier; required EventTarget target; - double clientX = 0; - double clientY = 0; - double screenX = 0; - double screenY = 0; - double pageX = 0; - double pageY = 0; - float radiusX = 0; - float radiusY = 0; - float rotationAngle = 0; - float force = 0; - double altitudeAngle = 0; - double azimuthAngle = 0; - TouchType touchType = "direct"; + double clientX = 0; + double clientY = 0; + double screenX = 0; + double screenY = 0; + double pageX = 0; + double pageY = 0; + float radiusX = 0; + float radiusY = 0; + float rotationAngle = 0; + float force = 0; + double altitudeAngle = 0; + double azimuthAngle = 0; + TouchType touchType = "direct"; }; -[Constructor(TouchInit touchInitDict), Exposed=Window] +[Exposed=Window] interface Touch { - readonly attribute long identifier; + constructor(TouchInit touchInitDict); + readonly attribute long identifier; readonly attribute EventTarget target; - readonly attribute double screenX; - readonly attribute double screenY; - readonly attribute double clientX; - readonly attribute double clientY; - readonly attribute double pageX; - readonly attribute double pageY; - readonly attribute float radiusX; - readonly attribute float radiusY; - readonly attribute float rotationAngle; - readonly attribute float force; - readonly attribute float altitudeAngle; - readonly attribute float azimuthAngle; - readonly attribute TouchType touchType; + readonly attribute double screenX; + readonly attribute double screenY; + readonly attribute double clientX; + readonly attribute double clientY; + readonly attribute double pageX; + readonly attribute double pageY; + readonly attribute float radiusX; + readonly attribute float radiusY; + readonly attribute float rotationAngle; + readonly attribute float force; + readonly attribute float altitudeAngle; + readonly attribute float azimuthAngle; + readonly attribute TouchType touchType; }; [Exposed=Window] interface TouchList { readonly attribute unsigned long length; - getter Touch? item(unsigned long index); + getter Touch? item (unsigned long index); }; dictionary TouchEventInit : EventModifierInit { @@ -57,8 +58,9 @@ dictionary TouchEventInit : EventModifierInit { sequence<Touch> changedTouches = []; }; -[Constructor(DOMString type, optional TouchEventInit eventInitDict = {}), Exposed=Window] +[Exposed=Window] interface TouchEvent : UIEvent { + constructor(DOMString type, optional TouchEventInit eventInitDict = {}); readonly attribute TouchList touches; readonly attribute TouchList targetTouches; readonly attribute TouchList changedTouches; diff --git a/tests/wpt/web-platform-tests/interfaces/url.idl b/tests/wpt/web-platform-tests/interfaces/url.idl index 998052da6ef..b0b237e8524 100644 --- a/tests/wpt/web-platform-tests/interfaces/url.idl +++ b/tests/wpt/web-platform-tests/interfaces/url.idl @@ -3,10 +3,11 @@ // (https://github.com/tidoust/reffy-reports) // Source: URL Standard (https://url.spec.whatwg.org/) -[Constructor(USVString url, optional USVString base), - Exposed=(Window,Worker), +[Exposed=(Window,Worker), LegacyWindowAlias=webkitURL] interface URL { + constructor(USVString url, optional USVString base); + stringifier attribute USVString href; readonly attribute USVString origin; attribute USVString protocol; @@ -23,9 +24,10 @@ interface URL { USVString toJSON(); }; -[Constructor(optional (sequence<sequence<USVString>> or record<USVString, USVString> or USVString) init = ""), - Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface URLSearchParams { + constructor(optional (sequence<sequence<USVString>> or record<USVString, USVString> or USVString) init = ""); + void append(USVString name, USVString value); void delete(USVString name); USVString? get(USVString name); diff --git a/tests/wpt/web-platform-tests/interfaces/webxr-ar-module.idl b/tests/wpt/web-platform-tests/interfaces/webxr-ar-module.idl new file mode 100644 index 00000000000..61fcd6a730f --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/webxr-ar-module.idl @@ -0,0 +1,21 @@ +// GENERATED CONTENT - DO NOT EDIT +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: WebXR Augmented Reality Module - Level 1 (https://immersive-web.github.io/webxr-ar-module/) + +enum XRSessionMode { + "inline", + "immersive-vr", + "immersive-ar" +}; + +enum XREnvironmentBlendMode { + "opaque", + "alpha-blend", + "additive" +}; + +partial interface XRSession { + // Attributes + readonly attribute XREnvironmentBlendMode environmentBlendMode; +}; diff --git a/tests/wpt/web-platform-tests/interfaces/webxr-gamepads-module.idl b/tests/wpt/web-platform-tests/interfaces/webxr-gamepads-module.idl new file mode 100644 index 00000000000..3aa17a7fe0c --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/webxr-gamepads-module.idl @@ -0,0 +1,14 @@ +// GENERATED CONTENT - DO NOT EDIT +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: WebXR Gamepads Module - Level 1 (https://immersive-web.github.io/webxr-gamepads-module/) + +partial interface XRInputSource { + [SameObject] readonly attribute Gamepad? gamepad; +}; + +enum GamepadMappingType { + "", // Defined in the Gamepad API + "standard", // Defined in the Gamepad API + "xr-standard", +}; diff --git a/tests/wpt/web-platform-tests/intersection-observer/resources/cross-origin-child-iframe.sub.html b/tests/wpt/web-platform-tests/intersection-observer/resources/cross-origin-child-iframe.sub.html new file mode 100644 index 00000000000..8e2c36ed560 --- /dev/null +++ b/tests/wpt/web-platform-tests/intersection-observer/resources/cross-origin-child-iframe.sub.html @@ -0,0 +1,7 @@ +<!DOCTYPE html> +<script src="/common/get-host-info.sub.js"></script> +<iframe id="iframe"></iframe> +<script> +iframe.src = + get_host_info().ORIGIN + "/intersection-observer/resources/same-origin-grand-child-iframe.html"; +</script> diff --git a/tests/wpt/web-platform-tests/intersection-observer/resources/same-origin-grand-child-iframe.html b/tests/wpt/web-platform-tests/intersection-observer/resources/same-origin-grand-child-iframe.html new file mode 100644 index 00000000000..25db5a29d8a --- /dev/null +++ b/tests/wpt/web-platform-tests/intersection-observer/resources/same-origin-grand-child-iframe.html @@ -0,0 +1,8 @@ +<!DOCTYPE html> +<div id="target"></div> +<script> +const observer = new IntersectionObserver(records => { + window.top.postMessage(records[0].rootBounds, "*"); +}, {}); +observer.observe(target); +</script> diff --git a/tests/wpt/web-platform-tests/intersection-observer/same-origin-grand-child-iframe.sub.html b/tests/wpt/web-platform-tests/intersection-observer/same-origin-grand-child-iframe.sub.html new file mode 100644 index 00000000000..57c0347ddc8 --- /dev/null +++ b/tests/wpt/web-platform-tests/intersection-observer/same-origin-grand-child-iframe.sub.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<meta name="viewport" content="width=device-width,initial-scale=1"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="./resources/intersection-observer-test-utils.js"></script> +<iframe id="iframe"></iframe> +<script> +promise_test(async t => { + iframe.src = + get_host_info().HTTP_NOTSAMESITE_ORIGIN + "/intersection-observer/resources/cross-origin-child-iframe.sub.html"; + + const rootBounds = await new Promise(resolve => { + window.addEventListener("message", event => resolve(event.data)); + }, { once: true } ); + + assert_equals(rootBounds.left, 0); + assert_equals(rootBounds.top, 0); + assert_equals(rootBounds.right, document.documentElement.clientWidth); + assert_equals(rootBounds.bottom, document.documentElement.clientHeight); +}, "rootBounds in a same-origin iframe in the case where there is a cross-origin " ++ "iframe in between the top document and the same origin iframe"); +</script> diff --git a/tests/wpt/web-platform-tests/intersection-observer/v2/delay-test.html b/tests/wpt/web-platform-tests/intersection-observer/v2/delay-test.html index 231df32c31d..e3906ea2c29 100644 --- a/tests/wpt/web-platform-tests/intersection-observer/v2/delay-test.html +++ b/tests/wpt/web-platform-tests/intersection-observer/v2/delay-test.html @@ -46,7 +46,7 @@ async_test(t => { // The first notification should be sent without delay. waitForNotification(t, t.step_func(step0)); - function waitForDelay(timerExpiredBeforeLastFrame) { + function waitForDelay(timerExpiredBeforeLastFrame, nextStep) { requestAnimationFrame(t.step_func(() => { if (timerExpiredBeforeLastFrame) { // New notifications should have been generated during the previous @@ -54,11 +54,11 @@ async_test(t => { assert_equals(entries.length, 2); assert_greater_than(entries[1].time - entries[0].time, delay); assert_false(entries[1].isVisible); - t.done(); + nextStep(); } else { // Observer may not have updated yet. Wait for next frame. let timerExpired = performance.now() - entries[0].time >= delay; - waitForDelay(timerExpired); + waitForDelay(timerExpired, nextStep); } })); } @@ -69,7 +69,20 @@ async_test(t => { // This should trigger a notification on the next run. occluder.style.marginTop = "-10px"; // Enter a rAF loop until the delay timer expires. - waitForDelay(false); + waitForDelay(false, step1); + } + + function step1() { + occluder.style.marginTop = "10px"; + // This style invalidation should cause a frame to run before the observer + // can generate a notification (due to delay parameter). Make sure the + // notification will still be generated even if we don't force more frames + // with a rAF loop. + t.step_timeout(() => { + assert_equals(entries.length, 3); + assert_true(entries[0].isVisible); + t.done(); + }, 2 * delay); } }, "'delay' parameter throttles frequency of notifications."); diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist index be87d278640..d9ea5c17c7c 100644 --- a/tests/wpt/web-platform-tests/lint.whitelist +++ b/tests/wpt/web-platform-tests/lint.whitelist @@ -836,11 +836,6 @@ AHEM SYSTEM FONT: acid/acid3/test.html AHEM SYSTEM FONT: resource-timing/resources/all_resource_types.htm AHEM SYSTEM FONT: resource-timing/resources/iframe-reload-TAO.sub.html -# These tests are imported from mozilla-central and can't be modified in WPT. -# They do load Ahem as a web font, but they use their own copy which trips the -# lint rule. Basically false positives. -AHEM SYSTEM FONT: css/vendor-imports/mozilla/mozilla-central-reftests/* - # TODO: The following should be deleted along with the Ahem web font cleanup # PR (https://github.com/web-platform-tests/wpt/pull/18702) AHEM SYSTEM FONT: infrastructure/assumptions/ahem-ref.html diff --git a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html index 82fda880887..9816f5126a0 100644 --- a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html +++ b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html @@ -30,6 +30,9 @@ "math" ); async_test(test => { + test.step(function() { + assert_true(MathMLElement.prototype.hasOwnProperty(`on${name}`)); + }); mathEl[`on${name}`] = test.step_func_done(e => { assert_equals(e.currentTarget, mathEl, "The event must be fired at the <math> element"); diff --git a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/math-global-event-handlers.tentative.html b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/math-global-event-handlers.tentative.html index e96feeaf096..be9bee9c6c6 100644 --- a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/math-global-event-handlers.tentative.html +++ b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/math-global-event-handlers.tentative.html @@ -125,6 +125,9 @@ }, `${name}: dynamic changes on the attribute`); async_test(t => { + t.step(function() { + assert_true(MathMLElement.prototype.hasOwnProperty(name)); + }); const element = document.createElementNS( "http://www.w3.org/1998/Math/MathML", "math" diff --git a/tests/wpt/web-platform-tests/media-capabilities/decodingInfo.any.js b/tests/wpt/web-platform-tests/media-capabilities/decodingInfo.any.js index 737ded18c9f..edd58ac3409 100644 --- a/tests/wpt/web-platform-tests/media-capabilities/decodingInfo.any.js +++ b/tests/wpt/web-platform-tests/media-capabilities/decodingInfo.any.js @@ -17,28 +17,28 @@ var minimalAudioConfiguration = { }; promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo()); + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo()); }, "Test that decodingInfo rejects if it doesn't get a configuration"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({})); + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({})); }, "Test that decodingInfo rejects if the MediaConfiguration isn't valid"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ video: minimalVideoConfiguration, audio: minimalAudioConfiguration, })); }, "Test that decodingInfo rejects if the MediaConfiguration does not have a type"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', })); }, "Test that decodingInfo rejects if the configuration doesn't have an audio or video field"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -51,7 +51,7 @@ promise_test(t => { }, "Test that decodingInfo rejects if the video configuration has a negative framerate"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -64,7 +64,7 @@ promise_test(t => { }, "Test that decodingInfo rejects if the video configuration has a framerate set to 0"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -77,7 +77,7 @@ promise_test(t => { }, "Test that decodingInfo rejects if the video configuration has a framerate set to Infinity"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'fgeoa', @@ -90,7 +90,7 @@ promise_test(t => { }, "Test that decodingInfo rejects if the video configuration contentType doesn't parse"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'audio/fgeoa', @@ -103,7 +103,7 @@ promise_test(t => { }, "Test that decodingInfo rejects if the video configuration contentType isn't of type video"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"; foo="bar"', @@ -116,7 +116,7 @@ promise_test(t => { }, "Test that decodingInfo rejects if the video configuration contentType has more than one parameter"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; foo="bar"', @@ -142,7 +142,7 @@ promise_test(t => { }, "Test that decodingInfo() accepts framerate in the form of x/y"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -155,7 +155,7 @@ promise_test(t => { }, "Test that decodingInfo() rejects framerate in the form of x/0"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -168,7 +168,7 @@ promise_test(t => { }, "Test that decodingInfo() rejects framerate in the form of 0/y"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -181,7 +181,7 @@ promise_test(t => { }, "Test that decodingInfo() rejects framerate in the form of -x/y"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -194,7 +194,7 @@ promise_test(t => { }, "Test that decodingInfo() rejects framerate in the form of x/-y"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -233,7 +233,7 @@ promise_test(t => { }, "Test that decodingInfo() accepts framerate as fraction with decimals"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/webm; codecs="vp09.00.10.08"', @@ -246,28 +246,28 @@ promise_test(t => { }, "Test that decodingInfo() rejects framerate with trailing unallowed characters"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', audio: { contentType: 'fgeoa' }, })); }, "Test that decodingInfo rejects if the audio configuration contenType doesn't parse"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', audio: { contentType: 'video/fgeoa' }, })); }, "Test that decodingInfo rejects if the audio configuration contentType isn't of type audio"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', audio: { contentType: 'audio/webm; codecs="opus"; foo="bar"' }, })); }, "Test that decodingInfo rejects if the audio configuration contentType has more than one parameters"); promise_test(t => { - return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.decodingInfo({ + return promise_rejects_js(t, TypeError, navigator.mediaCapabilities.decodingInfo({ type: 'file', audio: { contentType: 'audio/webm; foo="bar"' }, })); diff --git a/tests/wpt/web-platform-tests/native-file-system/FileSystemBaseHandle-remove.tentative.https.window.js b/tests/wpt/web-platform-tests/native-file-system/FileSystemBaseHandle-remove.tentative.https.window.js deleted file mode 100644 index fd2ff888e37..00000000000 --- a/tests/wpt/web-platform-tests/native-file-system/FileSystemBaseHandle-remove.tentative.https.window.js +++ /dev/null @@ -1,76 +0,0 @@ -// META: script=resources/test-helpers.js -promise_test(async t => cleanupSandboxedFileSystem(), - 'Cleanup to setup test environment'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const handle = await createFileWithContents(t, 'file-to-remove', '12345', root); - await createFileWithContents(t, 'file-to-keep', 'abc', root); - await root.removeEntry('file-to-remove'); - - assert_array_equals(await getSortedDirectoryEntries(root), ['file-to-keep']); - await promise_rejects(t, 'NotFoundError', getFileContents(handle)); -}, 'removeEntry() to remove a file'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const handle = await createFileWithContents(t, 'file-to-remove', '12345', root); - await root.removeEntry('file-to-remove'); - - await promise_rejects(t, 'NotFoundError', root.removeEntry('file-to-remove')); -}, 'removeEntry() on an already removed file should fail'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const dir = await root.getDirectory('dir-to-remove', { create: true }); - await createFileWithContents(t, 'file-to-keep', 'abc', root); - await root.removeEntry('dir-to-remove'); - - assert_array_equals(await getSortedDirectoryEntries(root), ['file-to-keep']); - await promise_rejects(t, 'NotFoundError', getSortedDirectoryEntries(dir)); -}, 'removeEntry() to remove an empty directory'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const dir = await root.getDirectory('dir-to-remove', { create: true }); - t.add_cleanup(() => root.removeEntry('dir-to-remove', { recursive: true })); - await createEmptyFile(t, 'file-in-dir', dir); - - await promise_rejects(t, 'InvalidModificationError', root.removeEntry('dir-to-remove')); - assert_array_equals(await getSortedDirectoryEntries(root), ['dir-to-remove/']); - assert_array_equals(await getSortedDirectoryEntries(dir), ['file-in-dir']); -}, 'removeEntry() on a non-empty directory should fail'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const dir = await createDirectory(t, 'dir', root); - await promise_rejects(t, new TypeError(), dir.removeEntry("")); -}, 'removeEntry() with empty name should fail'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const dir = await createDirectory(t, 'dir', root); - await promise_rejects(t, new TypeError(), dir.removeEntry(kCurrentDirectory)); -}, `removeEntry() with "${kCurrentDirectory}" name should fail`); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const dir = await createDirectory(t, 'dir', root); - await promise_rejects(t, new TypeError(), dir.removeEntry(kParentDirectory)); -}, `removeEntry() with "${kParentDirectory}" name should fail`); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - - const dir_name = 'dir-name'; - const dir = await createDirectory(t, dir_name, root); - - const file_name = 'file-name'; - await createEmptyFile(t, file_name, dir); - - for (let i = 0; i < kPathSeparators.length; ++i) { - const path_with_separator = `${dir_name}${kPathSeparators[i]}${file_name}`; - await promise_rejects(t, new TypeError(), root.removeEntry(path_with_separator), - `removeEntry() must reject names containing "${kPathSeparators[i]}"`); - } -}, 'removeEntry() with a path separator should fail.'); diff --git a/tests/wpt/web-platform-tests/native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.https.window.js b/tests/wpt/web-platform-tests/native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.https.window.js deleted file mode 100644 index 79154b058ff..00000000000 --- a/tests/wpt/web-platform-tests/native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.https.window.js +++ /dev/null @@ -1,106 +0,0 @@ -// META: script=resources/test-helpers.js -promise_test(async t => cleanupSandboxedFileSystem(), - 'Cleanup to setup test environment'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - await promise_rejects(t, 'NotFoundError', root.getDirectory('non-existing-dir')); -}, 'getDirectory(create=false) rejects for non-existing directories'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const handle = await root.getDirectory('non-existing-dir', { create: true }); - t.add_cleanup(() => root.removeEntry('non-existing-dir', { recursive: true })); - - assert_false(handle.isFile); - assert_true(handle.isDirectory); - assert_equals(handle.name, 'non-existing-dir'); - assert_equals(await getDirectoryEntryCount(handle), 0); - assert_array_equals(await getSortedDirectoryEntries(root), ['non-existing-dir/']); -}, 'getDirectory(create=true) creates an empty directory'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const existing_handle = await root.getDirectory('dir-with-contents', { create: true }); - t.add_cleanup(() => root.removeEntry('dir-with-contents', { recursive: true })); - const file_handle = await createEmptyFile(t, 'test-file', existing_handle); - - const handle = await root.getDirectory('dir-with-contents', { create: false }); - - assert_false(handle.isFile); - assert_true(handle.isDirectory); - assert_equals(handle.name, 'dir-with-contents'); - assert_array_equals(await getSortedDirectoryEntries(handle), ['test-file']); -}, 'getDirectory(create=false) returns existing directories'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const existing_handle = await root.getDirectory('dir-with-contents', { create: true }); - t.add_cleanup(() => root.removeEntry('dir-with-contents', { recursive: true })); - const file_handle = await existing_handle.getFile('test-file', { create: true }); - - const handle = await root.getDirectory('dir-with-contents', { create: true }); - - assert_false(handle.isFile); - assert_true(handle.isDirectory); - assert_equals(handle.name, 'dir-with-contents'); - assert_array_equals(await getSortedDirectoryEntries(handle), ['test-file']); -}, 'getDirectory(create=true) returns existing directories without erasing'); - -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - await createEmptyFile(t, 'file-name'); - - await promise_rejects(t, 'TypeMismatchError', root.getDirectory('file-name')); - await promise_rejects(t, 'TypeMismatchError', root.getDirectory('file-name', { create: false })); - await promise_rejects(t, 'TypeMismatchError', root.getDirectory('file-name', { create: true })); -}, 'getDirectory() when a file already exists with the same name'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - await promise_rejects(t, new TypeError(), dir.getDirectory("", { create: true })); - await promise_rejects(t, new TypeError(), dir.getDirectory("", { create: false })); -}, 'getDirectory() with empty name'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - await promise_rejects(t, new TypeError(), dir.getDirectory(kCurrentDirectory)); - await promise_rejects(t, new TypeError(), dir.getDirectory(kCurrentDirectory, { create: true })); -}, `getDirectory() with "${kCurrentDirectory}" name`); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const subdir = await createDirectory(t, 'subdir-name', /*parent=*/dir); - - await promise_rejects(t, new TypeError(), subdir.getDirectory(kParentDirectory)); - await promise_rejects(t, new TypeError(), subdir.getDirectory(kParentDirectory, { create: true })); -}, `getDirectory() with "${kParentDirectory}" name`); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - - const first_subdir_name = 'first-subdir-name'; - const first_subdir = await createDirectory(t, first_subdir_name, /*parent=*/dir); - - const second_subdir_name = 'second-subdir-name'; - const second_subdir = await createDirectory(t, second_subdir_name, /*parent=*/first_subdir); - - for (let i = 0; i < kPathSeparators.length; ++i) { - const path_with_separator = `${first_subdir_name}${kPathSeparators[i]}${second_subdir_name}`; - await promise_rejects(t, new TypeError(), dir.getDirectory(path_with_separator), - `getDirectory() must reject names containing "${kPathSeparators[i]}"`); - } -}, 'getDirectory(create=false) with a path separator when the directory exists'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - - const subdir_name = 'subdir-name'; - const subdir = await createDirectory(t, subdir_name, /*parent=*/dir); - - for (let i = 0; i < kPathSeparators.length; ++i) { - const path_with_separator = `${subdir_name}${kPathSeparators[i]}file_name`; - await promise_rejects(t, new TypeError(), dir.getDirectory(path_with_separator, { create: true }), - `getDirectory(true) must reject names containing "${kPathSeparators[i]}"`); - } -}, 'getDirectory(create=true) with a path separator'); diff --git a/tests/wpt/web-platform-tests/native-file-system/FileSystemDirectoryHandle-getFile.tentative.https.window.js b/tests/wpt/web-platform-tests/native-file-system/FileSystemDirectoryHandle-getFile.tentative.https.window.js deleted file mode 100644 index fa38abbc544..00000000000 --- a/tests/wpt/web-platform-tests/native-file-system/FileSystemDirectoryHandle-getFile.tentative.https.window.js +++ /dev/null @@ -1,111 +0,0 @@ -// META: script=resources/test-helpers.js -promise_test(async t => cleanupSandboxedFileSystem(), - 'Cleanup to setup test environment'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - await promise_rejects(t, 'NotFoundError', dir.getFile('non-existing-file')); -}, 'getFile(create=false) rejects for non-existing files'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const handle = await dir.getFile('non-existing-file', { create: true }); - t.add_cleanup(() => dir.removeEntry('non-existing-file')); - - assert_true(handle.isFile); - assert_false(handle.isDirectory); - assert_equals(handle.name, 'non-existing-file'); - assert_equals(await getFileSize(handle), 0); - assert_equals(await getFileContents(handle), ''); -}, 'getFile(create=true) creates an empty file for non-existing files'); - -promise_test(async t => { - const existing_handle = await createFileWithContents(t, 'existing-file', '1234567890'); - - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const handle = await dir.getFile('existing-file'); - - assert_true(handle.isFile); - assert_false(handle.isDirectory); - assert_equals(handle.name, 'existing-file'); - assert_equals(await getFileSize(handle), 10); - assert_equals(await getFileContents(handle), '1234567890'); -}, 'getFile(create=false) returns existing files'); - -promise_test(async t => { - const existing_handle = await createFileWithContents(t, 'file-with-contents', '1234567890'); - - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const handle = await dir.getFile('file-with-contents', { create: true }); - - assert_true(handle.isFile); - assert_false(handle.isDirectory); - assert_equals(handle.name, 'file-with-contents'); - assert_equals(await getFileSize(handle), 10); - assert_equals(await getFileContents(handle), '1234567890'); -}, 'getFile(create=true) returns existing files without erasing'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const dir_handle = await dir.getDirectory('dir-name', { create: true }); - t.add_cleanup(() => dir.removeEntry('dir-name', { recursive: true })); - - await promise_rejects(t, 'TypeMismatchError', dir.getFile('dir-name')); -}, 'getFile(create=false) when a directory already exists with the same name'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const dir_handle = await dir.getDirectory('dir-name', { create: true }); - t.add_cleanup(() => dir.removeEntry('dir-name', { recursive: true })); - - await promise_rejects(t, 'TypeMismatchError', dir.getFile('dir-name', { create: true })); -}, 'getFile(create=true) when a directory already exists with the same name'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - await promise_rejects(t, new TypeError(), dir.getFile("", { create: true })); - await promise_rejects(t, new TypeError(), dir.getFile("", { create: false })); -}, 'getFile() with empty name'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - await promise_rejects(t, new TypeError(), dir.getFile(kCurrentDirectory)); - await promise_rejects(t, new TypeError(), dir.getFile(kCurrentDirectory, { create: true })); -}, `getFile() with "${kCurrentDirectory}" name`); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const subdir = await createDirectory(t, 'subdir-name', /*parent=*/dir); - - await promise_rejects(t, new TypeError(), subdir.getFile(kParentDirectory)); - await promise_rejects(t, new TypeError(), subdir.getFile(kParentDirectory, { create: true })); -}, `getFile() with "${kParentDirectory}" name`); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - - const subdir_name = 'subdir-name'; - const subdir = await createDirectory(t, subdir_name, /*parent=*/dir); - - const file_name = 'file-name'; - await createEmptyFile(t, file_name, /*parent=*/subdir); - - for (let i = 0; i < kPathSeparators.length; ++i) { - const path_with_separator = `${subdir_name}${kPathSeparators[i]}${file_name}`; - await promise_rejects(t, new TypeError(), dir.getFile(path_with_separator), - `getFile() must reject names containing "${kPathSeparators[i]}"`); - } -}, 'getFile(create=false) with a path separator when the file exists.'); - -promise_test(async t => { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - - const subdir_name = 'subdir-name'; - const subdir = await createDirectory(t, subdir_name, /*parent=*/dir); - - for (let i = 0; i < kPathSeparators.length; ++i) { - const path_with_separator = `${subdir_name}${kPathSeparators[i]}file_name`; - await promise_rejects(t, new TypeError(), dir.getFile(path_with_separator, { create: true }), - `getFile(true) must reject names containing "${kPathSeparators[i]}"`); - } -}, 'getFile(create=true) with a path separator'); diff --git a/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-getDirectory.tentative.https.manual.window.js b/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-getDirectory.tentative.https.manual.window.js new file mode 100644 index 00000000000..cfe729cd1f1 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-getDirectory.tentative.https.manual.window.js @@ -0,0 +1,4 @@ +// META: script=/resources/testdriver.js +// META: script=resources/test-helpers.js +// META: script=resources/native-fs-test-helpers.js +// META: script=script-tests/FileSystemDirectoryHandle-getDirectory.js diff --git a/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-getFile.tentative.https.manual.window.js b/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-getFile.tentative.https.manual.window.js new file mode 100644 index 00000000000..0455cb80091 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-getFile.tentative.https.manual.window.js @@ -0,0 +1,4 @@ +// META: script=/resources/testdriver.js +// META: script=resources/test-helpers.js +// META: script=resources/native-fs-test-helpers.js +// META: script=script-tests/FileSystemDirectoryHandle-getFile.js diff --git a/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-removeEntry.tentative.https.manual.window.js b/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-removeEntry.tentative.https.manual.window.js new file mode 100644 index 00000000000..8905a7afdea --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/native_FileSystemDirectoryHandle-removeEntry.tentative.https.manual.window.js @@ -0,0 +1,4 @@ +// META: script=/resources/testdriver.js +// META: script=resources/test-helpers.js +// META: script=resources/native-fs-test-helpers.js +// META: script=script-tests/FileSystemDirectoryHandle-removeEntry.js diff --git a/tests/wpt/web-platform-tests/native-file-system/native_FileSystemWriter.tentative.https.manual.window.js b/tests/wpt/web-platform-tests/native-file-system/native_FileSystemWriter.tentative.https.manual.window.js new file mode 100644 index 00000000000..25d8ee99585 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/native_FileSystemWriter.tentative.https.manual.window.js @@ -0,0 +1,4 @@ +// META: script=/resources/testdriver.js +// META: script=resources/test-helpers.js +// META: script=resources/native-fs-test-helpers.js +// META: script=script-tests/FileSystemWriter.js diff --git a/tests/wpt/web-platform-tests/native-file-system/resources/native-fs-test-helpers.js b/tests/wpt/web-platform-tests/native-file-system/resources/native-fs-test-helpers.js new file mode 100644 index 00000000000..5ad8c04724b --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/resources/native-fs-test-helpers.js @@ -0,0 +1,49 @@ +// This file defines a directory_test() function that can be used to define +// tests that require a FileSystemDirectoryHandle. The implementation of that +// function in this file will ask the user to select an empty directory and +// uses that directory. +// +// Another implementation of this function exists in +// sandboxed-fs-test-helpers.js, where that version uses the sandboxed file +// system instead. + +const directory_promise = (async () => { + await new Promise(resolve => { + window.addEventListener('DOMContentLoaded', resolve); + }); + + await window.test_driver.bless( + 'show a file picker.<br />Please select an empty directory'); + const entries = await self.chooseFileSystemEntries({type: 'openDirectory'}); + assert_true(entries instanceof FileSystemHandle); + assert_true(entries instanceof FileSystemDirectoryHandle); + for await (const entry of entries.getEntries()) { + assert_unreached('Selected directory is not empty'); + } + return entries; +})(); + +function directory_test(func, description) { + promise_test(async t => { + const directory = await directory_promise; + // To be resilient against tests not cleaning up properly, cleanup before + // every test. + for await (let entry of directory.getEntries()) { + await directory.removeEntry(entry.name, {recursive: entry.isDirectory}); + } + await func(t, directory); + }, description); +} + +directory_test(async (t, dir) => { + assert_equals(await dir.queryPermission({writable: false}), 'granted'); +}, 'User succesfully selected an empty directory.'); + +directory_test(async (t, dir) => { + const status = await dir.queryPermission({writable: true}); + if (status == 'granted') + return; + + await window.test_driver.bless('ask for write permission'); + assert_equals(await dir.requestPermission({writable: true}), 'granted'); +}, 'User granted write access.'); diff --git a/tests/wpt/web-platform-tests/native-file-system/resources/sandboxed-fs-test-helpers.js b/tests/wpt/web-platform-tests/native-file-system/resources/sandboxed-fs-test-helpers.js new file mode 100644 index 00000000000..5f4f269d224 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/resources/sandboxed-fs-test-helpers.js @@ -0,0 +1,25 @@ +// This file defines a directory_test() function that can be used to define +// tests that require a FileSystemDirectoryHandle. The implementation of that +// function in this file will return an empty directory in the sandboxed file +// system. +// +// Another implementation of this function exists in native-fs-test-helpers.js, +// where that version uses the native file system instead. + +async function cleanupSandboxedFileSystem() { + const dir = + await FileSystemDirectoryHandle.getSystemDirectory({type: 'sandbox'}); + for await (let entry of dir.getEntries()) + await dir.removeEntry(entry.name, {recursive: entry.isDirectory}); +} + +function directory_test(func, description) { + promise_test(async t => { + // To be extra resilient against bad tests, cleanup before every test. + await cleanupSandboxedFileSystem(); + + const dir = + await FileSystemDirectoryHandle.getSystemDirectory({type: 'sandbox'}); + await func(t, dir); + }, description); +} diff --git a/tests/wpt/web-platform-tests/native-file-system/resources/test-helpers.js b/tests/wpt/web-platform-tests/native-file-system/resources/test-helpers.js index b794cee0c5f..d0360921f1d 100644 --- a/tests/wpt/web-platform-tests/native-file-system/resources/test-helpers.js +++ b/tests/wpt/web-platform-tests/native-file-system/resources/test-helpers.js @@ -1,95 +1,87 @@ // A special path component meaning "this directory." -const kCurrentDirectory = "."; +const kCurrentDirectory = '.'; // A special path component meaning "the parent directory." -const kParentDirectory = ".."; +const kParentDirectory = '..'; // Array of separators used to separate components in hierarchical paths. let kPathSeparators; -if (navigator.userAgent.includes("Windows NT")) { - // Windows uses both '/' and '\' as path separators. - kPathSeparators = ['/', '\\' ]; +if (navigator.userAgent.includes('Windows NT')) { + // Windows uses both '/' and '\' as path separators. + kPathSeparators = ['/', '\\']; } else { - kPathSeparators = [ '/' ]; -} - -async function cleanupSandboxedFileSystem() { - const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - for await (let entry of dir.getEntries()) - dir.removeEntry(entry.name, { recursive: entry.isDirectory }); + kPathSeparators = ['/']; } async function getFileSize(handle) { - const file = await handle.getFile(); - return file.size; + const file = await handle.getFile(); + return file.size; } async function getFileContents(handle) { - const file = await handle.getFile(); - return new Response(file).text(); + const file = await handle.getFile(); + return new Response(file).text(); } async function getDirectoryEntryCount(handle) { - let result = 0; - for await (let entry of handle.getEntries()) { - result++; - } - return result; + let result = 0; + for await (let entry of handle.getEntries()) { + result++; + } + return result; } async function getSortedDirectoryEntries(handle) { - let result = []; - for await (let entry of handle.getEntries()) { - if (entry.isDirectory) - result.push(entry.name + '/'); - else - result.push(entry.name); - } - result.sort(); - return result; + let result = []; + for await (let entry of handle.getEntries()) { + if (entry.isDirectory) + result.push(entry.name + '/'); + else + result.push(entry.name); + } + result.sort(); + return result; } async function createDirectory(test, name, parent) { - const parent_dir_handle = parent ? parent : - await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - - const new_dir_handle = await parent_dir_handle.getDirectory(name, { create: true }); + const new_dir_handle = await parent.getDirectory(name, {create: true}); test.add_cleanup(async () => { - try { - await parent_dir_handle.removeEntry(name, { recursive: true }); - } catch (e) { - // Ignore any errors when removing directories, as tests might - // have already removed the directory. - } + try { + await parent.removeEntry(name, {recursive: true}); + } catch (e) { + // Ignore any errors when removing directories, as tests might + // have already removed the directory. + } }); return new_dir_handle; } async function createEmptyFile(test, name, parent) { - const dir = parent ? parent : await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); - const handle = await dir.getFile(name, { create: true }); - test.add_cleanup(async () => { - try { - await dir.removeEntry(name); - } catch (e) { - // Ignore any errors when removing files, as tests might already remove the file. - } - }); - // Make sure the file is empty. - assert_equals(await getFileSize(handle), 0); - return handle; + const handle = await parent.getFile(name, {create: true}); + test.add_cleanup(async () => { + try { + await parent.removeEntry(name); + } catch (e) { + // Ignore any errors when removing files, as tests might already remove + // the file. + } + }); + // Make sure the file is empty. + assert_equals(await getFileSize(handle), 0); + return handle; } async function createFileWithContents(test, name, contents, parent) { - const handle = await createEmptyFile(test, name, parent); - const writer = await handle.createWriter(); - await writer.write(0, new Blob([contents])); - await writer.close(); - return handle; + const handle = await createEmptyFile(test, name, parent); + const writer = await handle.createWriter(); + await writer.write(0, new Blob([contents])); + await writer.close(); + return handle; } function garbageCollect() { - // TODO(https://github.com/web-platform-tests/wpt/issues/7899): Change to - // some sort of cross-browser GC trigger. - if (self.gc) self.gc(); + // TODO(https://github.com/web-platform-tests/wpt/issues/7899): Change to + // some sort of cross-browser GC trigger. + if (self.gc) + self.gc(); }; diff --git a/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectory.tentative.https.any.js b/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectory.tentative.https.any.js new file mode 100644 index 00000000000..6fcf566e31f --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectory.tentative.https.any.js @@ -0,0 +1,3 @@ +// META: script=resources/test-helpers.js +// META: script=resources/sandboxed-fs-test-helpers.js +// META: script=script-tests/FileSystemDirectoryHandle-getDirectory.js diff --git a/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-getFile.tentative.https.any.js b/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-getFile.tentative.https.any.js new file mode 100644 index 00000000000..65ae891cd44 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-getFile.tentative.https.any.js @@ -0,0 +1,3 @@ +// META: script=resources/test-helpers.js +// META: script=resources/sandboxed-fs-test-helpers.js +// META: script=script-tests/FileSystemDirectoryHandle-getFile.js diff --git a/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.tentative.https.any.js b/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.tentative.https.any.js new file mode 100644 index 00000000000..a4be8bd267e --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.tentative.https.any.js @@ -0,0 +1,3 @@ +// META: script=resources/test-helpers.js +// META: script=resources/sandboxed-fs-test-helpers.js +// META: script=script-tests/FileSystemDirectoryHandle-removeEntry.js diff --git a/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemWriter.tentative.https.any.js b/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemWriter.tentative.https.any.js new file mode 100644 index 00000000000..8352e2487fe --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/sandboxed_FileSystemWriter.tentative.https.any.js @@ -0,0 +1,3 @@ +// META: script=resources/test-helpers.js +// META: script=resources/sandboxed-fs-test-helpers.js +// META: script=script-tests/FileSystemWriter.js diff --git a/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-getDirectory.js b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-getDirectory.js new file mode 100644 index 00000000000..c2c128f5ede --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-getDirectory.js @@ -0,0 +1,111 @@ +directory_test(async (t, root) => { + await promise_rejects( + t, 'NotFoundError', root.getDirectory('non-existing-dir')); +}, 'getDirectory(create=false) rejects for non-existing directories'); + +directory_test(async (t, root) => { + const handle = await root.getDirectory('non-existing-dir', {create: true}); + t.add_cleanup(() => root.removeEntry('non-existing-dir', {recursive: true})); + + assert_false(handle.isFile); + assert_true(handle.isDirectory); + assert_equals(handle.name, 'non-existing-dir'); + assert_equals(await getDirectoryEntryCount(handle), 0); + assert_array_equals( + await getSortedDirectoryEntries(root), ['non-existing-dir/']); +}, 'getDirectory(create=true) creates an empty directory'); + +directory_test(async (t, root) => { + const existing_handle = + await root.getDirectory('dir-with-contents', {create: true}); + t.add_cleanup(() => root.removeEntry('dir-with-contents', {recursive: true})); + const file_handle = await createEmptyFile(t, 'test-file', existing_handle); + + const handle = await root.getDirectory('dir-with-contents', {create: false}); + + assert_false(handle.isFile); + assert_true(handle.isDirectory); + assert_equals(handle.name, 'dir-with-contents'); + assert_array_equals(await getSortedDirectoryEntries(handle), ['test-file']); +}, 'getDirectory(create=false) returns existing directories'); + +directory_test(async (t, root) => { + const existing_handle = + await root.getDirectory('dir-with-contents', {create: true}); + t.add_cleanup(() => root.removeEntry('dir-with-contents', {recursive: true})); + const file_handle = + await existing_handle.getFile('test-file', {create: true}); + + const handle = await root.getDirectory('dir-with-contents', {create: true}); + + assert_false(handle.isFile); + assert_true(handle.isDirectory); + assert_equals(handle.name, 'dir-with-contents'); + assert_array_equals(await getSortedDirectoryEntries(handle), ['test-file']); +}, 'getDirectory(create=true) returns existing directories without erasing'); + +directory_test(async (t, root) => { + await createEmptyFile(t, 'file-name', root); + + await promise_rejects(t, 'TypeMismatchError', root.getDirectory('file-name')); + await promise_rejects( + t, 'TypeMismatchError', root.getDirectory('file-name', {create: false})); + await promise_rejects( + t, 'TypeMismatchError', root.getDirectory('file-name', {create: true})); +}, 'getDirectory() when a file already exists with the same name'); + +directory_test(async (t, dir) => { + await promise_rejects( + t, new TypeError(), dir.getDirectory('', {create: true})); + await promise_rejects( + t, new TypeError(), dir.getDirectory('', {create: false})); +}, 'getDirectory() with empty name'); + +directory_test(async (t, dir) => { + await promise_rejects( + t, new TypeError(), dir.getDirectory(kCurrentDirectory)); + await promise_rejects( + t, new TypeError(), dir.getDirectory(kCurrentDirectory, {create: true})); +}, `getDirectory() with "${kCurrentDirectory}" name`); + +directory_test(async (t, dir) => { + const subdir = await createDirectory(t, 'subdir-name', /*parent=*/ dir); + + await promise_rejects( + t, new TypeError(), subdir.getDirectory(kParentDirectory)); + await promise_rejects( + t, new TypeError(), + subdir.getDirectory(kParentDirectory, {create: true})); +}, `getDirectory() with "${kParentDirectory}" name`); + +directory_test(async (t, dir) => { + const first_subdir_name = 'first-subdir-name'; + const first_subdir = + await createDirectory(t, first_subdir_name, /*parent=*/ dir); + + const second_subdir_name = 'second-subdir-name'; + const second_subdir = + await createDirectory(t, second_subdir_name, /*parent=*/ first_subdir); + + for (let i = 0; i < kPathSeparators.length; ++i) { + const path_with_separator = + `${first_subdir_name}${kPathSeparators[i]}${second_subdir_name}`; + await promise_rejects( + t, new TypeError(), dir.getDirectory(path_with_separator), + `getDirectory() must reject names containing "${kPathSeparators[i]}"`); + } +}, 'getDirectory(create=false) with a path separator when the directory exists'); + +directory_test(async (t, dir) => { + const subdir_name = 'subdir-name'; + const subdir = await createDirectory(t, subdir_name, /*parent=*/ dir); + + for (let i = 0; i < kPathSeparators.length; ++i) { + const path_with_separator = `${subdir_name}${kPathSeparators[i]}file_name`; + await promise_rejects( + t, new TypeError(), + dir.getDirectory(path_with_separator, {create: true}), + `getDirectory(true) must reject names containing "${ + kPathSeparators[i]}"`); + } +}, 'getDirectory(create=true) with a path separator'); diff --git a/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-getFile.js b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-getFile.js new file mode 100644 index 00000000000..4d8ee96c3d0 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-getFile.js @@ -0,0 +1,100 @@ +directory_test(async (t, dir) => { + await promise_rejects(t, 'NotFoundError', dir.getFile('non-existing-file')); +}, 'getFile(create=false) rejects for non-existing files'); + +directory_test(async (t, dir) => { + const handle = await dir.getFile('non-existing-file', {create: true}); + t.add_cleanup(() => dir.removeEntry('non-existing-file')); + + assert_true(handle.isFile); + assert_false(handle.isDirectory); + assert_equals(handle.name, 'non-existing-file'); + assert_equals(await getFileSize(handle), 0); + assert_equals(await getFileContents(handle), ''); +}, 'getFile(create=true) creates an empty file for non-existing files'); + +directory_test(async (t, dir) => { + const existing_handle = await createFileWithContents( + t, 'existing-file', '1234567890', /*parent=*/ dir); + const handle = await dir.getFile('existing-file'); + + assert_true(handle.isFile); + assert_false(handle.isDirectory); + assert_equals(handle.name, 'existing-file'); + assert_equals(await getFileSize(handle), 10); + assert_equals(await getFileContents(handle), '1234567890'); +}, 'getFile(create=false) returns existing files'); + +directory_test(async (t, dir) => { + const existing_handle = await createFileWithContents( + t, 'file-with-contents', '1234567890', /*parent=*/ dir); + const handle = await dir.getFile('file-with-contents', {create: true}); + + assert_true(handle.isFile); + assert_false(handle.isDirectory); + assert_equals(handle.name, 'file-with-contents'); + assert_equals(await getFileSize(handle), 10); + assert_equals(await getFileContents(handle), '1234567890'); +}, 'getFile(create=true) returns existing files without erasing'); + +directory_test(async (t, dir) => { + const dir_handle = await dir.getDirectory('dir-name', {create: true}); + t.add_cleanup(() => dir.removeEntry('dir-name', {recursive: true})); + + await promise_rejects(t, 'TypeMismatchError', dir.getFile('dir-name')); +}, 'getFile(create=false) when a directory already exists with the same name'); + +directory_test(async (t, dir) => { + const dir_handle = await dir.getDirectory('dir-name', {create: true}); + t.add_cleanup(() => dir.removeEntry('dir-name', {recursive: true})); + + await promise_rejects( + t, 'TypeMismatchError', dir.getFile('dir-name', {create: true})); +}, 'getFile(create=true) when a directory already exists with the same name'); + +directory_test(async (t, dir) => { + await promise_rejects(t, new TypeError(), dir.getFile('', {create: true})); + await promise_rejects(t, new TypeError(), dir.getFile('', {create: false})); +}, 'getFile() with empty name'); + +directory_test(async (t, dir) => { + await promise_rejects(t, new TypeError(), dir.getFile(kCurrentDirectory)); + await promise_rejects( + t, new TypeError(), dir.getFile(kCurrentDirectory, {create: true})); +}, `getFile() with "${kCurrentDirectory}" name`); + +directory_test(async (t, dir) => { + const subdir = await createDirectory(t, 'subdir-name', /*parent=*/ dir); + + await promise_rejects(t, new TypeError(), subdir.getFile(kParentDirectory)); + await promise_rejects( + t, new TypeError(), subdir.getFile(kParentDirectory, {create: true})); +}, `getFile() with "${kParentDirectory}" name`); + +directory_test(async (t, dir) => { + const subdir_name = 'subdir-name'; + const subdir = await createDirectory(t, subdir_name, /*parent=*/ dir); + + const file_name = 'file-name'; + await createEmptyFile(t, file_name, /*parent=*/ subdir); + + for (let i = 0; i < kPathSeparators.length; ++i) { + const path_with_separator = + `${subdir_name}${kPathSeparators[i]}${file_name}`; + await promise_rejects( + t, new TypeError(), dir.getFile(path_with_separator), + `getFile() must reject names containing "${kPathSeparators[i]}"`); + } +}, 'getFile(create=false) with a path separator when the file exists.'); + +directory_test(async (t, dir) => { + const subdir_name = 'subdir-name'; + const subdir = await createDirectory(t, subdir_name, /*parent=*/ dir); + + for (let i = 0; i < kPathSeparators.length; ++i) { + const path_with_separator = `${subdir_name}${kPathSeparators[i]}file_name`; + await promise_rejects( + t, new TypeError(), dir.getFile(path_with_separator, {create: true}), + `getFile(true) must reject names containing "${kPathSeparators[i]}"`); + } +}, 'getFile(create=true) with a path separator'); diff --git a/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-removeEntry.js b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-removeEntry.js new file mode 100644 index 00000000000..8e89e0958db --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemDirectoryHandle-removeEntry.js @@ -0,0 +1,69 @@ + +directory_test(async (t, root) => { + const handle = + await createFileWithContents(t, 'file-to-remove', '12345', root); + await createFileWithContents(t, 'file-to-keep', 'abc', root); + await root.removeEntry('file-to-remove'); + + assert_array_equals(await getSortedDirectoryEntries(root), ['file-to-keep']); + await promise_rejects(t, 'NotFoundError', getFileContents(handle)); +}, 'removeEntry() to remove a file'); + +directory_test(async (t, root) => { + const handle = + await createFileWithContents(t, 'file-to-remove', '12345', root); + await root.removeEntry('file-to-remove'); + + await promise_rejects(t, 'NotFoundError', root.removeEntry('file-to-remove')); +}, 'removeEntry() on an already removed file should fail'); + +directory_test(async (t, root) => { + const dir = await root.getDirectory('dir-to-remove', {create: true}); + await createFileWithContents(t, 'file-to-keep', 'abc', root); + await root.removeEntry('dir-to-remove'); + + assert_array_equals(await getSortedDirectoryEntries(root), ['file-to-keep']); + await promise_rejects(t, 'NotFoundError', getSortedDirectoryEntries(dir)); +}, 'removeEntry() to remove an empty directory'); + +directory_test(async (t, root) => { + const dir = await root.getDirectory('dir-to-remove', {create: true}); + t.add_cleanup(() => root.removeEntry('dir-to-remove', {recursive: true})); + await createEmptyFile(t, 'file-in-dir', dir); + + await promise_rejects( + t, 'InvalidModificationError', root.removeEntry('dir-to-remove')); + assert_array_equals( + await getSortedDirectoryEntries(root), ['dir-to-remove/']); + assert_array_equals(await getSortedDirectoryEntries(dir), ['file-in-dir']); +}, 'removeEntry() on a non-empty directory should fail'); + +directory_test(async (t, root) => { + const dir = await createDirectory(t, 'dir', root); + await promise_rejects(t, new TypeError(), dir.removeEntry('')); +}, 'removeEntry() with empty name should fail'); + +directory_test(async (t, root) => { + const dir = await createDirectory(t, 'dir', root); + await promise_rejects(t, new TypeError(), dir.removeEntry(kCurrentDirectory)); +}, `removeEntry() with "${kCurrentDirectory}" name should fail`); + +directory_test(async (t, root) => { + const dir = await createDirectory(t, 'dir', root); + await promise_rejects(t, new TypeError(), dir.removeEntry(kParentDirectory)); +}, `removeEntry() with "${kParentDirectory}" name should fail`); + +directory_test(async (t, root) => { + const dir_name = 'dir-name'; + const dir = await createDirectory(t, dir_name, root); + + const file_name = 'file-name'; + await createEmptyFile(t, file_name, dir); + + for (let i = 0; i < kPathSeparators.length; ++i) { + const path_with_separator = `${dir_name}${kPathSeparators[i]}${file_name}`; + await promise_rejects( + t, new TypeError(), root.removeEntry(path_with_separator), + `removeEntry() must reject names containing "${kPathSeparators[i]}"`); + } +}, 'removeEntry() with a path separator should fail.'); diff --git a/tests/wpt/web-platform-tests/native-file-system/FileSystemWriter.tentative.https.window.js b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemWriter.js index acc0be1c521..1c51d0b4eb7 100644 --- a/tests/wpt/web-platform-tests/native-file-system/FileSystemWriter.tentative.https.window.js +++ b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemWriter.js @@ -1,54 +1,51 @@ -// META: script=resources/test-helpers.js -promise_test(async t => cleanupSandboxedFileSystem(), - 'Cleanup to setup test environment'); - -promise_test(async t => { - const handle = await createEmptyFile(t, 'empty_blob'); - const writer = await handle.createWriter(); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'empty_blob', root); + const writer = await handle.createWriter(); - await writer.write(0, new Blob([])); - await writer.close(); + await writer.write(0, new Blob([])); + await writer.close(); - assert_equals(await getFileContents(handle), ''); - assert_equals(await getFileSize(handle), 0); + assert_equals(await getFileContents(handle), ''); + assert_equals(await getFileSize(handle), 0); }, 'write() with an empty blob to an empty file'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'valid_blob'); - const writer = await handle.createWriter(); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'valid_blob', root); + const writer = await handle.createWriter(); - await writer.write(0, new Blob(['1234567890'])); - await writer.close(); + await writer.write(0, new Blob(['1234567890'])); + await writer.close(); - assert_equals(await getFileContents(handle), '1234567890'); - assert_equals(await getFileSize(handle), 10); + assert_equals(await getFileContents(handle), '1234567890'); + assert_equals(await getFileSize(handle), 10); }, 'write() a blob to an empty file'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'blob_with_offset'); - const writer = await handle.createWriter(); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'blob_with_offset', root); + const writer = await handle.createWriter(); - await writer.write(0, new Blob(['1234567890'])); - await writer.write(4, new Blob(['abc'])); - await writer.close(); + await writer.write(0, new Blob(['1234567890'])); + await writer.write(4, new Blob(['abc'])); + await writer.close(); - assert_equals(await getFileContents(handle), '1234abc890'); - assert_equals(await getFileSize(handle), 10); + assert_equals(await getFileContents(handle), '1234abc890'); + assert_equals(await getFileSize(handle), 10); }, 'write() called with a blob and a valid offset'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'bad_offset'); - const writer = await handle.createWriter(); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'bad_offset', root); + const writer = await handle.createWriter(); - await promise_rejects(t, 'InvalidStateError', writer.write(4, new Blob(['abc']))); - await writer.close(); + await promise_rejects( + t, 'InvalidStateError', writer.write(4, new Blob(['abc']))); + await writer.close(); - assert_equals(await getFileContents(handle), ''); - assert_equals(await getFileSize(handle), 0); + assert_equals(await getFileContents(handle), ''); + assert_equals(await getFileSize(handle), 0); }, 'write() called with an invalid offset'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'empty_string'); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'empty_string', root); const writer = await handle.createWriter(); await writer.write(0, ''); @@ -57,8 +54,8 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 0); }, 'write() with an empty string to an empty file'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'valid_utf8_string'); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'valid_utf8_string', root); const writer = await handle.createWriter(); await writer.write(0, 'foo🤘'); @@ -67,8 +64,8 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 7); }, 'write() with a valid utf-8 string'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'string_with_unix_line_ending'); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'string_with_unix_line_ending', root); const writer = await handle.createWriter(); await writer.write(0, 'foo\n'); @@ -77,8 +74,9 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 4); }, 'write() with a string with unix line ending preserved'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'string_with_windows_line_ending'); +directory_test(async (t, root) => { + const handle = + await createEmptyFile(t, 'string_with_windows_line_ending', root); const writer = await handle.createWriter(); await writer.write(0, 'foo\r\n'); @@ -87,8 +85,8 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 5); }, 'write() with a string with windows line ending preserved'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'empty_array_buffer'); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'empty_array_buffer', root); const writer = await handle.createWriter(); let buf = new ArrayBuffer(0); @@ -98,8 +96,9 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 0); }, 'write() with an empty array buffer to an empty file'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'valid_string_typed_byte_array'); +directory_test(async (t, root) => { + const handle = + await createEmptyFile(t, 'valid_string_typed_byte_array', root); const writer = await handle.createWriter(); let buf = new ArrayBuffer(3); @@ -113,32 +112,31 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 3); }, 'write() with a valid typed array buffer'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'trunc_shrink'); - const writer = await handle.createWriter(); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'trunc_shrink', root); + const writer = await handle.createWriter(); - await writer.write(0, new Blob(['1234567890'])); - await writer.truncate(5); - await writer.close(); + await writer.write(0, new Blob(['1234567890'])); + await writer.truncate(5); + await writer.close(); - assert_equals(await getFileContents(handle), '12345'); - assert_equals(await getFileSize(handle), 5); + assert_equals(await getFileContents(handle), '12345'); + assert_equals(await getFileSize(handle), 5); }, 'truncate() to shrink a file'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'trunc_grow'); - const writer = await handle.createWriter(); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'trunc_grow', root); + const writer = await handle.createWriter(); - await writer.write(0, new Blob(['abc'])); - await writer.truncate(5); - await writer.close(); + await writer.write(0, new Blob(['abc'])); + await writer.truncate(5); + await writer.close(); - assert_equals(await getFileContents(handle), 'abc\0\0'); - assert_equals(await getFileSize(handle), 5); + assert_equals(await getFileContents(handle), 'abc\0\0'); + assert_equals(await getFileSize(handle), 5); }, 'truncate() to grow a file'); -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); +directory_test(async (t, root) => { const dir = await createDirectory(t, 'parent_dir', root); const file_name = 'create_writer_fails_when_dir_removed.txt'; const handle = await createEmptyFile(t, file_name, dir); @@ -147,8 +145,7 @@ promise_test(async t => { await promise_rejects(t, 'NotFoundError', handle.createWriter()); }, 'createWriter() fails when parent directory is removed'); -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); +directory_test(async (t, root) => { const dir = await createDirectory(t, 'parent_dir', root); const file_name = 'write_fails_when_dir_removed.txt'; const handle = await createEmptyFile(t, file_name, dir); @@ -158,8 +155,7 @@ promise_test(async t => { await promise_rejects(t, 'NotFoundError', writer.write(0, new Blob(['foo']))); }, 'write() fails when parent directory is removed'); -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); +directory_test(async (t, root) => { const dir = await createDirectory(t, 'parent_dir', root); const file_name = 'truncate_fails_when_dir_removed.txt'; const handle = await createEmptyFile(t, file_name, dir); @@ -169,8 +165,7 @@ promise_test(async t => { await promise_rejects(t, 'NotFoundError', writer.truncate(0)); }, 'truncate() fails when parent directory is removed'); -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); +directory_test(async (t, root) => { const dir = await createDirectory(t, 'parent_dir', root); const file_name = 'close_fails_when_dir_removed.txt'; const handle = await createEmptyFile(t, file_name, dir); @@ -181,8 +176,8 @@ promise_test(async t => { await promise_rejects(t, 'NotFoundError', writer.close()); }, 'atomic writes: close() fails when parent directory is removed'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'atomic_writes.txt'); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'atomic_writes.txt', root); const writer = await handle.createWriter(); await writer.write(0, new Blob(['foox'])); @@ -200,8 +195,8 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 4); }, 'atomic writes: writers make atomic changes on close'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'atomic_write_after_close.txt'); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'atomic_write_after_close.txt', root); const writer = await handle.createWriter(); await writer.write(0, new Blob(['foo'])); @@ -209,11 +204,13 @@ promise_test(async t => { assert_equals(await getFileContents(handle), 'foo'); assert_equals(await getFileSize(handle), 3); - await promise_rejects(t, 'InvalidStateError', writer.write(0, new Blob(['abc']))); + await promise_rejects( + t, 'InvalidStateError', writer.write(0, new Blob(['abc']))); }, 'atomic writes: write() after close() fails'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'atomic_truncate_after_close.txt'); +directory_test(async (t, root) => { + const handle = + await createEmptyFile(t, 'atomic_truncate_after_close.txt', root); const writer = await handle.createWriter(); await writer.write(0, new Blob(['foo'])); @@ -224,8 +221,8 @@ promise_test(async t => { await promise_rejects(t, 'InvalidStateError', writer.truncate(0)); }, 'atomic writes: truncate() after close() fails'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'atomic_close_after_close.txt'); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'atomic_close_after_close.txt', root); const writer = await handle.createWriter(); await writer.write(0, new Blob(['foo'])); @@ -236,24 +233,23 @@ promise_test(async t => { await promise_rejects(t, 'InvalidStateError', writer.close()); }, 'atomic writes: close() after close() fails'); -promise_test(async t => { - const handle = await createEmptyFile(t, 'there_can_be_only_one.txt'); +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'there_can_be_only_one.txt', root); const writer = await handle.createWriter(); await writer.write(0, new Blob(['foo'])); // This test might be flaky if there is a race condition allowing // close() to be called multiple times. - let success_promises = [...Array(100)].map(() => writer - .close() - .then(() => 1) - .catch(() => 0)); + let success_promises = + [...Array(100)].map(() => writer.close().then(() => 1).catch(() => 0)); let close_attempts = await Promise.all(success_promises); - let success_count = close_attempts.reduce((x,y) => x + y); + let success_count = close_attempts.reduce((x, y) => x + y); assert_equals(success_count, 1); }, 'atomic writes: only one close() operation may succeed'); -promise_test(async t => { - const handle = await createFileWithContents(t, 'atomic_file_is_copied.txt', 'fooks'); +directory_test(async (t, root) => { + const handle = await createFileWithContents( + t, 'atomic_file_is_copied.txt', 'fooks', root); const writer = await handle.createWriter({keepExistingData: true}); await writer.write(0, new Blob(['bar'])); @@ -262,8 +258,9 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 5); }, 'createWriter({keepExistingData: true}): atomic writer initialized with source contents'); -promise_test(async t => { - const handle = await createFileWithContents(t, 'atomic_file_is_not_copied.txt', 'very long string'); +directory_test(async (t, root) => { + const handle = await createFileWithContents( + t, 'atomic_file_is_not_copied.txt', 'very long string', root); const writer = await handle.createWriter({keepExistingData: false}); await writer.write(0, new Blob(['bar'])); @@ -273,8 +270,7 @@ promise_test(async t => { assert_equals(await getFileSize(handle), 3); }, 'createWriter({keepExistingData: false}): atomic writer initialized with empty file'); -promise_test(async t => { - const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); +directory_test(async (t, root) => { const dir = await createDirectory(t, 'parent_dir', root); const file_name = 'atomic_writer_persists_removed.txt'; const handle = await createFileWithContents(t, file_name, 'foo', dir); diff --git a/tests/wpt/web-platform-tests/permissions/feature-policy-permissions-query.html b/tests/wpt/web-platform-tests/permissions/feature-policy-permissions-query.html new file mode 100644 index 00000000000..bd152e973e8 --- /dev/null +++ b/tests/wpt/web-platform-tests/permissions/feature-policy-permissions-query.html @@ -0,0 +1,11 @@ +<script> +'use strict'; + +Promise.resolve().then(() => navigator.permissions.query({name:'geolocation'})) + .then(permissionStatus => { + window.parent.postMessage({ state: permissionStatus.state }, '*'); +}, error => { + window.parent.postMessage({ state: null }, '*'); +}); +</script> + diff --git a/tests/wpt/web-platform-tests/permissions/permissions-query-feature-policy-attribute.https.sub.html b/tests/wpt/web-platform-tests/permissions/permissions-query-feature-policy-attribute.https.sub.html new file mode 100644 index 00000000000..1d7333d9b5f --- /dev/null +++ b/tests/wpt/web-platform-tests/permissions/permissions-query-feature-policy-attribute.https.sub.html @@ -0,0 +1,75 @@ +<!doctype html> +<meta charset=utf-8> +<title>Test permissions query againts feature policy allow attribute</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<div id="log"></div> + +<script> + "use strict"; + + function test_permissions_query( + feature_description, test, src, expect_state, allow_attribute) { + let frame = document.createElement('iframe'); + frame.src = src; + + if (typeof allow_attribute !== 'undefined') { + frame.allow = allow_attribute; + } + + window.addEventListener('message', test.step_func(function handler(evt) { + if (evt.source === frame.contentWindow) { + assert_equals(evt.data.state, expect_state, feature_description); + document.body.removeChild(frame); + window.removeEventListener('message', handler); + test.done(); + } + })); + + document.body.appendChild(frame); + } + + const same_origin_src = + "/permissions/feature-policy-permissions-query.html"; + const cross_origin_src = + "https://{{domains[www]}}:{{ports[https][0]}}" + same_origin_src; + + async_test(t => { + test_permissions_query( + 'navigator.permissions.query("geolocation")', + t, + same_origin_src, + "prompt", + "geolocation" + ); + }, 'Permissions.state is "prompt" with allow="geolocation" in same-origin iframes.'); + + async_test(t => { + test_permissions_query( + 'navigator.permissions.query("geolocation")', + t, + cross_origin_src, + "prompt", + "geolocation" + ); + }, 'Permissions.state is "prompt" with allow="geolocation" in cross-origin iframes.'); + + async_test(t => { + test_permissions_query( + 'navigator.permissions.query("geolocation")', + t, + same_origin_src, + "prompt" + ); + }, 'Permission.state is "prompt" in same-origin iframes.'); + + async_test(t => { + test_permissions_query( + 'navigator.permissions.query("geolocation")', + t, + cross_origin_src, + "denied" + ); + }, 'Permission.state is "denied" in cross-origin iframes.'); + +</script> diff --git a/tests/wpt/web-platform-tests/portals/portals-repeated-activate.html b/tests/wpt/web-platform-tests/portals/portals-repeated-activate.html new file mode 100644 index 00000000000..a3843dddb47 --- /dev/null +++ b/tests/wpt/web-platform-tests/portals/portals-repeated-activate.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + async_test(async t => { + let win = window.open("resources/portal-repeated-activate-window.html"); + win.onload = () => win.activate(); + window.onmessage = t.step_func_done(() => {}); + }, "test activation in page that has been reactivated") +</script> diff --git a/tests/wpt/web-platform-tests/portals/resources/portal-repeated-activate-window.html b/tests/wpt/web-platform-tests/portals/resources/portal-repeated-activate-window.html new file mode 100644 index 00000000000..e716034eff8 --- /dev/null +++ b/tests/wpt/web-platform-tests/portals/resources/portal-repeated-activate-window.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<body> + <portal src="simple-portal-adopts-and-activates-predecessor.html"> + <script> + function activate() { + var portal = document.querySelector("portal"); + portal.activate().then(() => document.body.removeChild(portal)); + } + + var count = 0; + window.onportalactivate = e => { + ++count; + if (count == 1) { + e.adoptPredecessor().activate(); + } else { + window.opener.postMessage("done", "*"); + } + }; + </script> +</body> diff --git a/tests/wpt/web-platform-tests/portals/resources/simple-portal-adopts-and-activates-predecessor.html b/tests/wpt/web-platform-tests/portals/resources/simple-portal-adopts-and-activates-predecessor.html new file mode 100644 index 00000000000..56bfd10f647 --- /dev/null +++ b/tests/wpt/web-platform-tests/portals/resources/simple-portal-adopts-and-activates-predecessor.html @@ -0,0 +1,6 @@ +<!DOCTYPE html> +<body> + <script> + window.onportalactivate = e => e.adoptPredecessor().activate(); + </script> +</body> diff --git a/tests/wpt/web-platform-tests/resource-timing/status-codes-create-entry.html b/tests/wpt/web-platform-tests/resource-timing/status-codes-create-entry.html index fb4236e6bbe..22e22c445b0 100644 --- a/tests/wpt/web-platform-tests/resource-timing/status-codes-create-entry.html +++ b/tests/wpt/web-platform-tests/resource-timing/status-codes-create-entry.html @@ -14,7 +14,7 @@ async_test(t => { window.addEventListener("load", t.step_func(() => { const images = document.getElementsByTagName("img"); for (let img of images) { - assert_equals(performance.getEntriesByName(img.src).length, 1, img.src); + assert_greater_than(performance.getEntriesByName(img.src).length, 0, img.src); } t.done(); })); diff --git a/tests/wpt/web-platform-tests/resources/chromium/contacts_manager_mock.js b/tests/wpt/web-platform-tests/resources/chromium/contacts_manager_mock.js index 618968ec18d..ae4c33b073d 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/contacts_manager_mock.js +++ b/tests/wpt/web-platform-tests/resources/chromium/contacts_manager_mock.js @@ -10,7 +10,7 @@ const WebContactsTest = (() => { this.bindingSet_ = new mojo.BindingSet(blink.mojom.ContactsManager); this.interceptor_ = new MojoInterfaceInterceptor( - blink.mojom.ContactsManager.name); + blink.mojom.ContactsManager.name, "context", true); this.interceptor_.oninterfacerequest = e => this.bindingSet_.addBinding(this, e.handle); this.interceptor_.start(); diff --git a/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js b/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js index eec414bd032..9d46b57020f 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js +++ b/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js @@ -6,7 +6,7 @@ var ImageCaptureTest = (() => { class MockImageCapture { constructor() { this.interceptor_ = new MojoInterfaceInterceptor( - media.mojom.ImageCapture.name); + media.mojom.ImageCapture.name, "context", true); this.interceptor_.oninterfacerequest = e => this.bindingSet_.addBinding(this, e.handle); this.interceptor_.start(); @@ -262,4 +262,4 @@ var ImageCaptureTest = (() => { } return ImageCaptureTestChromium; -})();
\ No newline at end of file +})(); diff --git a/tests/wpt/web-platform-tests/resources/test/tests/unit/throwing-assertions.html b/tests/wpt/web-platform-tests/resources/test/tests/unit/throwing-assertions.html new file mode 100644 index 00000000000..a36a56043cc --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/unit/throwing-assertions.html @@ -0,0 +1,268 @@ +<!DOCTYPE HTML> +<html> +<head> + <meta charset="utf-8"> + <meta name="timeout" content="long"> + <script src="/resources/testharness.js"></script> + <title>Test the methods that make assertions about exceptions</title> +</head> +<body> +<script> +function makeTest(...bodies) { + const closeScript = '<' + '/script>'; + let src = ` +<!DOCTYPE HTML> +<html> +<head> +<title>Document title</title> +<script src="/resources/testharness.js?${Math.random()}">${closeScript} +</head> + +<body> +<div id="log"></div>`; + bodies.forEach((body) => { + src += '<script>(' + body + ')();' + closeScript; + }); + + const iframe = document.createElement('iframe'); + + document.body.appendChild(iframe); + iframe.contentDocument.write(src); + + return new Promise((resolve) => { + window.addEventListener('message', function onMessage(e) { + if (e.source !== iframe.contentWindow) { + return; + } + if (!e.data || e.data.type !=='complete') { + return; + } + window.removeEventListener('message', onMessage); + resolve(e.data); + }); + + iframe.contentDocument.close(); + }).then(({ tests, status }) => { + const summary = { + harness: getEnumProp(status, status.status), + tests: {} + }; + + tests.forEach((test) => { + summary.tests[test.name] = getEnumProp(test, test.status); + }); + + return summary; + }); +} + +function getEnumProp(object, value) { + for (let property in object) { + if (!/^[A-Z]+$/.test(property)) { + continue; + } + + if (object[property] === value) { + return property; + } + } +} + +promise_test(() => { + return makeTest(() => { + test(() => { + assert_throws_js(TypeError, () => { throw new TypeError(); }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'PASS'); + }); +}, 'assert_throws_js on a TypeError'); + +promise_test(() => { + return makeTest(() => { + test(() => { + assert_throws_js(RangeError, () => { throw new RangeError(); }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'PASS'); + }); +}, 'assert_throws_js on a RangeError'); + +promise_test(() => { + return makeTest(() => { + test(() => { + assert_throws_js(TypeError, () => { throw new RangeError(); }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'FAIL'); + }); +}, 'assert_throws_js on a TypeError when RangeError is thrown'); + +promise_test(() => { + return makeTest(() => { + test(() => { + assert_throws_js(Error, () => { throw new TypeError(); }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'FAIL'); + }); +}, 'assert_throws_js on an Error when TypeError is thrown'); + +promise_test(() => { + return makeTest(() => { + test(() => { + assert_throws_js(Error, + () => { throw new DOMException("hello", "Error"); }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'FAIL'); + }); +}, 'assert_throws_js on an Error when a DOMException is thrown'); + +promise_test(() => { + return makeTest(() => { + test(() => { + assert_throws_js(SyntaxError, + () => { throw new DOMException("hey", "SyntaxError"); }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'FAIL'); + }); +}, 'assert_throws_js on a SyntaxError when a DOMException is thrown'); + +promise_test(() => { + return makeTest(() => { + test(() => { + assert_throws_dom("SyntaxError", + () => { throw new DOMException("x", "SyntaxError"); }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'PASS'); + }); +}, 'assert_throws_dom basic sanity'); + +promise_test(() => { + return makeTest(() => { + test(() => { + assert_throws_dom(12, + () => { throw new DOMException("x", "SyntaxError"); }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'PASS'); + }); +}, 'assert_throws_dom with numeric code'); + +promise_test(() => { + return makeTest(() => { + test(() => { + assert_throws_dom("SYNTAX_ERR", + () => { throw new DOMException("x", "SyntaxError"); }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'PASS'); + }); +}, 'assert_throws_dom with string name for code'); + +promise_test(() => { + return makeTest(() => { + test(() => { + assert_throws_dom("DataError", + () => { throw new DOMException("x", "DataError"); }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'PASS'); + }); +}, 'assert_throws_dom for a code-less DOMException type'); + +promise_test(() => { + return makeTest(() => { + test(() => { + assert_throws_dom("NoSuchError", + () => { throw new DOMException("x", "NoSuchError"); }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'FAIL'); + }); +}, 'assert_throws_dom for a nonexistent DOMException type'); + +promise_test(() => { + return makeTest(() => { + test(() => { + assert_throws_dom("SyntaxError", () => { throw new SyntaxError(); }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'FAIL'); + }); +}, 'assert_throws_dom when a non-DOM exception is thrown'); + +promise_test(() => { + return makeTest(() => { + test(() => { + assert_throws_exactly(5, () => { throw 5; }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'PASS'); + }); +}, 'assert_throws_exactly with number'); + +promise_test(() => { + return makeTest(() => { + test(() => { + assert_throws_exactly("foo", () => { throw "foo"; }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'PASS'); + }); +}, 'assert_throws_exactly with string'); + +promise_test(() => { + return makeTest(() => { + test(() => { + assert_throws_exactly({}, () => { throw {}; }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'FAIL'); + }); +}, 'assert_throws_exactly with different objects'); + +promise_test(() => { + return makeTest(() => { + test(() => { + var obj = {}; + assert_throws_exactly(obj, () => { throw obj; }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'PASS'); + }); +}, 'assert_throws_exactly with same object'); + +promise_test(() => { + return makeTest(() => { + test(() => { + assert_throws_exactly(TypeError, () => { throw new TypeError; }); + }); + }).then(({harness, tests}) => { + assert_equals(harness, 'OK'); + assert_equals(tests['Document title'], 'FAIL'); + }); +}, 'assert_throws_exactly with bogus TypeError bits '); + +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js index 15591042aa4..55de1ce252b 100644 --- a/tests/wpt/web-platform-tests/resources/testharness.js +++ b/tests/wpt/web-platform-tests/resources/testharness.js @@ -630,6 +630,27 @@ policies and contribution forms [3]. }); } + function promise_rejects_js(test, expected, promise, description) { + return promise.then(test.unreached_func("Should have rejected: " + description)).catch(function(e) { + assert_throws_js_impl(expected, function() { throw e }, + description, "promise_reject_js"); + }); + } + + function promise_rejects_dom(test, expected, promise, description) { + return promise.then(test.unreached_func("Should have rejected: " + description)).catch(function(e) { + assert_throws_dom_impl(expected, function() { throw e }, + description, "promise_rejects_dom"); + }); + } + + function promise_rejects_exactly(test, expected, promise, description) { + return promise.then(test.unreached_func("Should have rejected: " + description)).catch(function(e) { + assert_throws_exactly_impl(expected, function() { throw e }, + description, "promise_rejects_exactly"); + }); + } + /** * This constructor helper allows DOM events to be handled using Promises, * which can make it a lot easier to test a very specific series of events, @@ -811,6 +832,9 @@ policies and contribution forms [3]. expose(async_test, 'async_test'); expose(promise_test, 'promise_test'); expose(promise_rejects, 'promise_rejects'); + expose(promise_rejects_js, 'promise_rejects_js'); + expose(promise_rejects_dom, 'promise_rejects_dom'); + expose(promise_rejects_exactly, 'promise_rejects_exactly'); expose(generate_tests, 'generate_tests'); expose(setup, 'setup'); expose(done, 'done'); @@ -1270,8 +1294,11 @@ policies and contribution forms [3]. expose(assert_regexp_match, "assert_regexp_match"); function assert_class_string(object, class_string, description) { - assert_equals({}.toString.call(object), "[object " + class_string + "]", - description); + var actual = {}.toString.call(object); + var expected = "[object " + class_string + "]"; + assert(same_value(actual, expected), "assert_class_string", description, + "expected ${expected} but got ${actual}", + {expected:expected, actual:actual}); } expose(assert_class_string, "assert_class_string"); @@ -1482,6 +1509,276 @@ policies and contribution forms [3]. } expose(assert_throws, "assert_throws"); + /** + * Assert a JS Error with the expected constructor is thrown. + * + * @param {object} constructor The expected exception constructor. + * @param {Function} func Function which should throw. + * @param {string} description Error description for the case that the error is not thrown. + */ + function assert_throws_js(constructor, func, description) + { + assert_throws_js_impl(constructor, func, description, + "assert_throws_js"); + } + expose(assert_throws_js, "assert_throws_js"); + + /** + * Like assert_throws_js but allows specifying the assertion type + * (assert_throws_js or promise_rejects_js, in practice). + */ + function assert_throws_js_impl(constructor, func, description, + assertion_type) + { + try { + func.call(this); + assert(false, assertion_type, description, + "${func} did not throw", {func:func}); + } catch (e) { + if (e instanceof AssertionError) { + throw e; + } + + // Basic sanity-checks on the thrown exception. + assert(typeof e === "object", + assertion_type, description, + "${func} threw ${e} with type ${type}, not an object", + {func:func, e:e, type:typeof e}); + + assert(e !== null, + assertion_type, description, + "${func} threw null, not an object", + {func:func}); + + // Basic sanity-check on the passed-in constructor + assert(typeof constructor == "function", + assertion_type, description, + "${constructor} is not a constructor", + {constructor:constructor}); + var obj = constructor; + while (obj) { + if (typeof obj === "function" && + obj.name === "Error") { + break; + } + obj = Object.getPrototypeOf(obj); + } + assert(obj != null, + assertion_type, description, + "${constructor} is not an Error subtype", + {constructor:constructor}); + + // And checking that our exception is reasonable + assert(e.constructor === constructor && + e.name === constructor.name, + assertion_type, description, + "${func} threw ${actual} (${actual_name}) expected instance of ${expected} (${expected_name})", + {func:func, actual:e, actual_name:e.name, + expected:constructor, + expected_name:constructor.name}); + } + } + + /** + * Assert a DOMException with the expected type is thrown. + * + * @param {number|string} type The expected exception name or code. See the + * table of names and codes at + * https://heycam.github.io/webidl/#dfn-error-names-table + * If a number is passed it should be one of the numeric code values + * in that table (e.g. 3, 4, etc). If a string is passed it can + * either be an exception name (e.g. "HierarchyRequestError", + * "WrongDocumentError") or the name of the corresponding error code + * (e.g. "HIERARCHY_REQUEST_ERR", "WRONG_DOCUMENT_ERR"). + * @param {Function} func Function which should throw. + * @param {string} description Error description for the case that the error is not thrown. + */ + function assert_throws_dom(type, func, description) + { + assert_throws_dom_impl(type, func, description, "assert_throws_dom") + } + expose(assert_throws_dom, "assert_throws_dom"); + + /** + * Like assert_throws_dom but allows specifying the assertion type + * (assert_throws_dom or promise_rejects_dom, in practice). + */ + function assert_throws_dom_impl(type, func, description, assertion_type) + { + try { + func.call(this); + assert(false, assertion_type, description, + "${func} did not throw", {func:func}); + } catch (e) { + if (e instanceof AssertionError) { + throw e; + } + + assert(typeof e === "object", + assertion_type, description, + "${func} threw ${e} with type ${type}, not an object", + {func:func, e:e, type:typeof e}); + + assert(e !== null, + assertion_type, description, + "${func} threw null, not an object", + {func:func}); + + // Sanity-check our type + assert(typeof type == "number" || + typeof type == "string", + assertion_type, description, + "${type} is not a number or string", + {type:type}); + + var codename_name_map = { + INDEX_SIZE_ERR: 'IndexSizeError', + HIERARCHY_REQUEST_ERR: 'HierarchyRequestError', + WRONG_DOCUMENT_ERR: 'WrongDocumentError', + INVALID_CHARACTER_ERR: 'InvalidCharacterError', + NO_MODIFICATION_ALLOWED_ERR: 'NoModificationAllowedError', + NOT_FOUND_ERR: 'NotFoundError', + NOT_SUPPORTED_ERR: 'NotSupportedError', + INUSE_ATTRIBUTE_ERR: 'InUseAttributeError', + INVALID_STATE_ERR: 'InvalidStateError', + SYNTAX_ERR: 'SyntaxError', + INVALID_MODIFICATION_ERR: 'InvalidModificationError', + NAMESPACE_ERR: 'NamespaceError', + INVALID_ACCESS_ERR: 'InvalidAccessError', + TYPE_MISMATCH_ERR: 'TypeMismatchError', + SECURITY_ERR: 'SecurityError', + NETWORK_ERR: 'NetworkError', + ABORT_ERR: 'AbortError', + URL_MISMATCH_ERR: 'URLMismatchError', + QUOTA_EXCEEDED_ERR: 'QuotaExceededError', + TIMEOUT_ERR: 'TimeoutError', + INVALID_NODE_TYPE_ERR: 'InvalidNodeTypeError', + DATA_CLONE_ERR: 'DataCloneError' + }; + + var name_code_map = { + IndexSizeError: 1, + HierarchyRequestError: 3, + WrongDocumentError: 4, + InvalidCharacterError: 5, + NoModificationAllowedError: 7, + NotFoundError: 8, + NotSupportedError: 9, + InUseAttributeError: 10, + InvalidStateError: 11, + SyntaxError: 12, + InvalidModificationError: 13, + NamespaceError: 14, + InvalidAccessError: 15, + TypeMismatchError: 17, + SecurityError: 18, + NetworkError: 19, + AbortError: 20, + URLMismatchError: 21, + QuotaExceededError: 22, + TimeoutError: 23, + InvalidNodeTypeError: 24, + DataCloneError: 25, + + EncodingError: 0, + NotReadableError: 0, + UnknownError: 0, + ConstraintError: 0, + DataError: 0, + TransactionInactiveError: 0, + ReadOnlyError: 0, + VersionError: 0, + OperationError: 0, + NotAllowedError: 0 + }; + + var code_name_map = {}; + for (var key in name_code_map) { + if (name_code_map[key] > 0) { + code_name_map[name_code_map[key]] = key; + } + } + + var required_props = {}; + var name; + + if (typeof type === "number") { + if (type === 0) { + throw new AssertionError('Test bug: ambiguous DOMException code 0 passed to assert_throws_dom()'); + } else if (!(type in code_name_map)) { + throw new AssertionError('Test bug: unrecognized DOMException code "' + type + '" passed to assert_throws_dom()'); + } + name = code_name_map[type]; + required_props.code = type; + } else if (typeof type === "string") { + name = type in codename_name_map ? codename_name_map[type] : type; + if (!(name in name_code_map)) { + throw new AssertionError('Test bug: unrecognized DOMException code name or name "' + type + '" passed to assert_throws_dom()'); + } + + required_props.code = name_code_map[name]; + } + + if (required_props.code === 0 || + ("name" in e && + e.name !== e.name.toUpperCase() && + e.name !== "DOMException")) { + // New style exception: also test the name property. + required_props.name = name; + } + + //We'd like to test that e instanceof the appropriate interface, + //but we can't, because we don't know what window it was created + //in. It might be an instanceof the appropriate interface on some + //unknown other window. TODO: Work around this somehow? Maybe have + //the first arg just be a DOMException with the right name instead + //of the string-or-code thing we have now? + + for (var prop in required_props) { + assert(prop in e && e[prop] == required_props[prop], + assertion_type, description, + "${func} threw ${e} that is not a DOMException " + type + ": property ${prop} is equal to ${actual}, expected ${expected}", + {func:func, e:e, prop:prop, actual:e[prop], expected:required_props[prop]}); + } + } + } + + /** + * Assert the provided value is thrown. + * + * @param {value} exception The expected exception. + * @param {Function} func Function which should throw. + * @param {string} description Error description for the case that the error is not thrown. + */ + function assert_throws_exactly(exception, func, description) + { + assert_throws_exactly_impl(exception, func, description, + "assert_throws_exactly"); + } + expose(assert_throws_exactly, "assert_throws_exactly"); + + /** + * Like assert_throws_exactly but allows specifying the assertion type + * (assert_throws_exactly or promise_rejects_exactly, in practice). + */ + function assert_throws_exactly_impl(exception, func, description, + assertion_type) + { + try { + func.call(this); + assert(false, assertion_type, description, + "${func} did not throw", {func:func}); + } catch (e) { + if (e instanceof AssertionError) { + throw e; + } + + assert(same_value(e, exception), assertion_type, description, + "${func} threw ${e} but we expected it to throw ${exception}", + {func:func, e:e, exception:exception}); + } + } + function assert_unreached(description) { assert(false, "assert_unreached", description, "Reached unreachable code"); @@ -3365,38 +3662,42 @@ policies and contribution forms [3]. var tests = new Tests(); if (global_scope.addEventListener) { - var error_handler = function(e) { + var error_handler = function(message, stack) { if (tests.tests.length === 0 && !tests.allow_uncaught_exception) { tests.set_file_is_test(); } - var stack; - if (e.error && e.error.stack) { - stack = e.error.stack; - } else { - stack = e.filename + ":" + e.lineno + ":" + e.colno; - } - if (tests.file_is_test) { var test = tests.tests[0]; if (test.phase >= test.phases.HAS_RESULT) { return; } - test.set_status(test.FAIL, e.message, stack); + test.set_status(test.FAIL, message, stack); test.phase = test.phases.HAS_RESULT; - // The following function invocation is superfluous. - // TODO: Remove. - test.done(); } else if (!tests.allow_uncaught_exception) { tests.status.status = tests.status.ERROR; - tests.status.message = e.message; + tests.status.message = message; tests.status.stack = stack; } done(); }; - addEventListener("error", error_handler, false); - addEventListener("unhandledrejection", function(e){ error_handler(e.reason); }, false); + addEventListener("error", function(e) { + var message = e.message; + var stack; + if (e.error && e.error.stack) { + stack = e.error.stack; + } else { + stack = e.filename + ":" + e.lineno + ":" + e.colno; + } + error_handler(message, stack); + }, false); + + addEventListener("unhandledrejection", function(e) { + var message = "Unhandled rejection: " + e.reason.message; + // There's no stack for unhandled rejections. + error_handler(message); + }, false); } test_environment.on_tests_ready(); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-within-sw.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-within-sw.https.html index 8a567fd7a93..f5a60c30609 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-within-sw.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-within-sw.https.html @@ -18,13 +18,13 @@ async function registerSwAndOpenFrame(t) { return frame; } -async function deleteCashes() { +async function deleteCaches() { const cacheKeys = await caches.keys(); await Promise.all(cacheKeys.map(c => caches.delete(c))); } promise_test(async t => { - t.add_cleanup(deleteCashes); + t.add_cleanup(deleteCaches); const iframe = await registerSwAndOpenFrame(t); const fetchText = diff --git a/tests/wpt/web-platform-tests/shadow-dom/focus/focus-selector-delegatesFocus.html b/tests/wpt/web-platform-tests/shadow-dom/focus/focus-selector-delegatesFocus.html new file mode 100644 index 00000000000..386045258e0 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/focus/focus-selector-delegatesFocus.html @@ -0,0 +1,72 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8" /> + <title>CSS Test (Selectors): :focus behavior with shadow hosts & delegatesFocus </title> + <link rel="author" title="Rakina Zata Amni" href="rakina@chromium.org" /> + <link rel="help" href="https://html.spec.whatwg.org/multipage/semantics-other.html#selector-focus" /> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/testdriver.js"></script> + <script src="/resources/testdriver-vendor.js"></script> + <script src="resources/shadow-utils.js"></script> +</head> + +<body> +<script> +function createFocusableDiv() { + const div = document.createElement("div"); + div.innerText = "foo"; + div.tabIndex = 0; + return div; +} + +function createShadowHost(delegatesFocus, container) { + const host = document.createElement("div"); + host.attachShadow({ mode: "open", delegatesFocus: delegatesFocus }); + container.appendChild(host); + return host; +} + +const delegatesFocusValues = [true, false]; + +for (const delegatesFocus of delegatesFocusValues) { + test(() => { + resetFocus(); + const host = createShadowHost(delegatesFocus, document.body); + const shadowChild = createFocusableDiv(); + host.shadowRoot.appendChild(shadowChild); + + shadowChild.focus(); + assert_true(shadowChild.matches(":focus"), "element in shadow tree matches :focus"); + assert_true(host.matches(":focus"), "host matches :focus"); + }, `:focus applies to host with delegatesFocus=${delegatesFocus} when the shadow root's descendant has focus`); + + test(() => { + resetFocus(); + const host = createShadowHost(delegatesFocus, document.body); + const slotted = createFocusableDiv(); + host.shadowRoot.appendChild(document.createElement("slot")); + host.appendChild(slotted); + + slotted.focus(); + assert_true(slotted.matches(":focus"), "slotted element matches :focus"); + assert_true(host.matches(":focus"), "host matches :focus"); + }, `:focus applies to host with delegatesFocus=${delegatesFocus} when slotted element has focus`); + + for (const nestedDelegatesFocus of delegatesFocusValues) { + test(() => { + resetFocus(); + const host = createShadowHost(delegatesFocus, document.body); + const nestedHost = createShadowHost(nestedDelegatesFocus, host.shadowRoot); + const nestedShadowChild = createFocusableDiv(); + nestedHost.shadowRoot.appendChild(nestedShadowChild); + nestedShadowChild.focus(); + assert_true(nestedShadowChild.matches(":focus"), "element in nested shadow tree matches :focus"); + assert_true(nestedHost.matches(":focus"), "host of nested shadow tree matches focus"); + assert_true(host.matches(":focus"), "topmost host matches focus"); +}, `:focus applies to host with delegatesFocus=${delegatesFocus} when an element in a nested shadow tree with delegatesFocus=${nestedDelegatesFocus} is focused`); + } +} +</script> +</body> diff --git a/tests/wpt/web-platform-tests/shadow-dom/focus/resources/shadow-utils.js b/tests/wpt/web-platform-tests/shadow-dom/focus/resources/shadow-utils.js index 6ea372afdf1..8033ce0169f 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/focus/resources/shadow-utils.js +++ b/tests/wpt/web-platform-tests/shadow-dom/focus/resources/shadow-utils.js @@ -60,8 +60,9 @@ function removeTabIndex(elements) { } } -function resetFocus() { - document.body.focus(); +function resetFocus(root = document) { + if (root.activeElement) + root.activeElement.blur(); } function navigateFocusForward() { diff --git a/tests/wpt/web-platform-tests/signed-exchange/README.md b/tests/wpt/web-platform-tests/signed-exchange/README.md index f1dbfe6d1ad..4032edf22f3 100644 --- a/tests/wpt/web-platform-tests/signed-exchange/README.md +++ b/tests/wpt/web-platform-tests/signed-exchange/README.md @@ -1,5 +1,5 @@ This directory contains tests for the -[b2 implementation snapshot](https://tools.ietf.org/html/draft-yasskin-httpbis-origin-signed-exchanges-impl-02) of the +[b3 implementation snapshot](https://tools.ietf.org/html/draft-yasskin-httpbis-origin-signed-exchanges-impl-03) of the [Signed HTTP Exchanges](https://wicg.github.io/webpackage/draft-yasskin-http-origin-signed-responses.html). `resources` directory contains pregenerated signed exchanges and diff --git a/tests/wpt/web-platform-tests/storage-access-api/hasStorageAccess.sub.window.js b/tests/wpt/web-platform-tests/storage-access-api/hasStorageAccess.sub.window.js index 1352d7589f0..c4d6e3a8b9a 100644 --- a/tests/wpt/web-platform-tests/storage-access-api/hasStorageAccess.sub.window.js +++ b/tests/wpt/web-platform-tests/storage-access-api/hasStorageAccess.sub.window.js @@ -56,4 +56,13 @@ if (topLevelDocument) { // Validate the nested-iframe scenario where the cross-origin frame containing // the tests is not the first child. RunTestsInNestedIFrame("http://{{domains[www]}}:{{ports[http][0]}}/storage-access-api/hasStorageAccess.sub.window.html?testCase=nested-cross-origin-frame&allowed=false&rootdocument=false"); + + // Run tests specific to the top-level window only here. They won't get re-run inside of various iframes. + promise_test(() => { + let createdDocument = document.implementation.createDocument("", null); + + return createdDocument.hasStorageAccess().then(hasAccess => { + assert_false(hasAccess, "Access should be denied to a generated document not part of the DOM."); + }); + }, "[" + testPrefix + "] document.hasStorageAccess() should work on a document object."); } diff --git a/tests/wpt/web-platform-tests/storage/opaque-origin.https.window.js b/tests/wpt/web-platform-tests/storage/opaque-origin.https.window.js index 3e101dde675..cc1d31fdf2c 100644 --- a/tests/wpt/web-platform-tests/storage/opaque-origin.https.window.js +++ b/tests/wpt/web-platform-tests/storage/opaque-origin.https.window.js @@ -15,7 +15,7 @@ function load_iframe(src, sandbox) { function wait_for_message(iframe) { return new Promise(resolve => { self.addEventListener('message', function listener(e) { - if (e.source === iframe.contentWindow) { + if (e.source === iframe.contentWindow && "result" in e.data) { resolve(e.data); self.removeEventListener('message', listener); } @@ -24,7 +24,8 @@ function wait_for_message(iframe) { } function make_script(snippet) { - return '<script>' + + return '<script src="/resources/testharness.js"></script>' + + '<script>' + ' window.onmessage = () => {' + ' try {' + ' (' + snippet + ')' + @@ -33,19 +34,25 @@ function make_script(snippet) { ' window.parent.postMessage({result: "no rejection"}, "*");' + ' }, ' + ' error => {' + - ' window.parent.postMessage({result: error.name}, "*");' + + ' try {' + + ' assert_throws_js(TypeError, () => { throw error; });' + + ' window.parent.postMessage({result: "correct rejection"}, "*");' + + ' } catch (e) {' + + ' window.parent.postMessage({result: "incorrect rejection"}, "*");' + + ' }' + ' });' + ' } catch (ex) {' + // Report if not implemented/exposed, rather than time out. - ' window.parent.postMessage({result: ex.message}, "*");' + + ' window.parent.postMessage({result: "API access threw"}, "*");' + ' }' + ' };' + '<\/script>'; } -['navigator.storage.persist()', - 'navigator.storage.persisted()', - 'navigator.storage.estimate()' +['navigator.storage.persisted()', + 'navigator.storage.estimate()', + // persist() can prompt, so make sure we test that last + 'navigator.storage.persist()', ].forEach(snippet => { promise_test(t => { return load_iframe(make_script(snippet)) @@ -66,7 +73,7 @@ function make_script(snippet) { return wait_for_message(iframe); }) .then(message => { - assert_equals(message.result, 'TypeError', + assert_equals(message.result, 'correct rejection', `${snippet} should reject with TypeError`); }); }, `${snippet} in sandboxed iframe should reject with TypeError`); diff --git a/tests/wpt/web-platform-tests/svg/animations/keysplines-x-limits.html b/tests/wpt/web-platform-tests/svg/animations/keysplines-x-limits.html new file mode 100644 index 00000000000..3c9ba65059f --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/animations/keysplines-x-limits.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<title>'keySplines' with x-values outside of the 0 to 1 range</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<svg> + <rect x="10" width="10" height="10" fill="blue"> + <animate attributeName="x" values="0; 250" dur="5s"/> + </rect> + <rect x="10" width="10" height="10" y="20" fill="blue"> + <animate attributeName="x" values="0; 250" dur="5s" + keyTimes="0; 1" keySplines="-1 0 1 1" calcMode="spline"/> + </rect> + <rect x="10" width="10" height="10" y="30" fill="blue"> + <animate attributeName="x" values="0; 250" dur="5s" + keyTimes="0; 1" keySplines="2 0 1 1" calcMode="spline"/> + </rect> + <rect x="10" width="10" height="10" y="10" fill="blue"> + <animate attributeName="x" values="0; 250" dur="5s" + keyTimes="0; 1" keySplines="0 0 -1 1" calcMode="spline"/> + </rect> + <rect x="10" width="10" height="10" y="40" fill="blue"> + <animate attributeName="x" values="0; 250" dur="5s" + keyTimes="0; 1" keySplines="0 0 2 1" calcMode="spline"/> + </rect> +</svg> +<script> + async_test(t => { + let svg = document.querySelector('svg'); + svg.pauseAnimations(); + svg.setCurrentTime(2.5); + window.onload = t.step_func(() => { + requestAnimationFrame(t.step_func_done(() => { + let rects = document.getElementsByTagName('rect'); + assert_equals(rects[0].getBBox().x, 125, 'animations applied'); + assert_equals(rects[1].getBBox().x, 10, 'first control point x less than zero'); + assert_equals(rects[2].getBBox().x, 10, 'first control point x greater than one'); + assert_equals(rects[3].getBBox().x, 10, 'second control point x less than zero'); + assert_equals(rects[4].getBBox().x, 10, 'second control point x greater than one'); + })); + }); + }); +</script> diff --git a/tests/wpt/web-platform-tests/svg/animations/scripted/onhover-syncbases.html b/tests/wpt/web-platform-tests/svg/animations/scripted/onhover-syncbases.html index 86a0a40fa2d..de757f369af 100644 --- a/tests/wpt/web-platform-tests/svg/animations/scripted/onhover-syncbases.html +++ b/tests/wpt/web-platform-tests/svg/animations/scripted/onhover-syncbases.html @@ -2,7 +2,7 @@ <html> <head> <meta charset="utf-8"> - <title>Check if onhover events reset correctly when triggred multiple times</title> + <title>Check if onhover events reset correctly when triggered multiple times</title> <link rel="help" href="https://svgwg.org/svg2-draft/single-page.html#interact-EventAttributes"> <link rel="author" title="Edvard Thörnros" href="mailto:edvardt@opera.com"> <script src="/resources/testharness.js"></script> @@ -20,7 +20,7 @@ async_test(t => { let rounds = 5; // How many times the cursor is moved in and out let circle = document.querySelector("#circle"); let delay = 20; - let f = t.step_func(function() { + function f() { assert_equals(window.getComputedStyle(circle, null).fill, "rgb(255, 0, 0)") if (rounds-- == 0) { @@ -29,15 +29,15 @@ async_test(t => { } circle.dispatchEvent(new Event("mouseover")); - step_timeout(function() { + t.step_timeout(function() { assert_equals(window.getComputedStyle(circle, null).fill, "rgb(0, 255, 0)") circle.dispatchEvent(new Event("mouseout")) t.step_timeout(f, delay); - }, delay); - }); - step_timeout(function() { f(); }, 0); - }); + }, delay); + } + t.step_timeout(f, 0); +}); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/tools/ci/tcdownload.py b/tests/wpt/web-platform-tests/tools/ci/tcdownload.py index 91c763a7acd..46e9005740d 100644 --- a/tests/wpt/web-platform-tests/tools/ci/tcdownload.py +++ b/tests/wpt/web-platform-tests/tools/ci/tcdownload.py @@ -71,7 +71,7 @@ def run(*args, **kwargs): if not taskgroups: logger.error("No complete TaskCluster runs found for ref %s" % kwargs["ref"]) - return + return 1 for taskgroup in taskgroups: taskgroup_url = "https://queue.taskcluster.net/v1/task-group/%s/list" diff --git a/tests/wpt/web-platform-tests/tools/lint/lint.py b/tests/wpt/web-platform-tests/tools/lint/lint.py index 48a275bcf29..7689c359928 100644 --- a/tests/wpt/web-platform-tests/tools/lint/lint.py +++ b/tests/wpt/web-platform-tests/tools/lint/lint.py @@ -681,7 +681,10 @@ def check_script_metadata(repo_root, path, f): ahem_font_re = re.compile(b"font.*:.*ahem", flags=re.IGNORECASE) -ahem_stylesheet_re = re.compile(b"\/fonts\/ahem\.css", flags=re.IGNORECASE) +# Ahem can appear either in the global location or in the support +# directory for legacy Mozilla imports +ahem_stylesheet_re = re.compile(b"\/fonts\/ahem\.css|support\/ahem.css", + flags=re.IGNORECASE) def check_ahem_system_font(repo_root, path, f): diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt index d6c7a4ff398..3584c93a199 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt @@ -3,6 +3,6 @@ mozinfo==1.1.0 mozlog==4.2.0 mozdebug==0.1.1 pillow==6.1.0 -urllib3[secure]==1.25.3 +urllib3[secure]==1.25.5 requests==2.22.0 six==1.12.0 diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html index 309873cb1f8..4ec5db1adce 100644 --- a/tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html +++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html @@ -1,8 +1,7 @@ <!DOCTYPE html> <head> <script nonce="123" src="/resources/testharness.js"></script> - <script nonce="123"src="/resources/testharnessreport.js"></script> - <script nonce="123"src="/content-security-policy/support/testharness-helper.js"></script> + <script nonce="123" src="/resources/testharnessreport.js"></script> </head> <body> <script nonce="123"> @@ -23,15 +22,10 @@ // Return function that returns a promise that resolves on the given // violation report. - // - // filter_arg - iff function, call it with the event object. - // Else, string-ify and compare against event.originalPolicy. function promise_violation(filter_arg) { return _ => new Promise((resolve, reject) => { function handler(e) { - let matches = (filter_arg instanceof Function) - ? filter_arg(e) - : (e.originalPolicy.includes(filter_arg)); + let matches = e.originalPolicy.includes(filter_arg); if (matches) { document.removeEventListener("securitypolicyviolation", handler); e.stopPropagation(); @@ -56,7 +50,6 @@ createURL: id, createScript: id, }; - const scriptyPolicy = TrustedTypes.createPolicy('allowEval', a_policy); // Provoke/wait for a CSP violation, in order to be sure that all previous @@ -72,33 +65,35 @@ }); } - window.script_run_beacon = 'never_overwritten'; - promise_test(t => { + let beacon = 'never_overwritten'; let p = Promise.resolve() .then(promise_violation("trusted-types *")) .then(promise_flush()); - expect_throws(_ => eval('script_run_beacon="should not run"')); - assert_equals(script_run_beacon, 'never_overwritten'); + assert_throws(new EvalError(), + _ => eval('beacon="should not run"')); + assert_equals(beacon, 'never_overwritten'); flush(); return p; }, "Trusted Type violation report: evaluating a string."); promise_test(t => { + let beacon = 'never_overwritten2'; let p = promise_flush()(); - eval(scriptyPolicy.createScript('script_run_beacon="i ran"')); + eval(scriptyPolicy.createScript('beacon="i ran"')); + assert_equals(beacon, 'i ran'); flush(); - assert_equals(script_run_beacon, 'i ran'); return p; }, "Trusted Type violation report: evaluating a Trusted Script."); promise_test(t => { + let beacon = 'never_overwritten'; TrustedTypes.createPolicy('default', { createScript: s => s.replace('payload', 'default policy'), }, true); let p = promise_flush()(); - eval('script_run_beacon="payload"'); - assert_equals(script_run_beacon, 'default policy'); + eval('beacon="payload"'); + assert_equals(beacon, 'default policy'); flush(); return p; }, "Trusted Type violation report: default policy transforms the script before CSP checks runs."); diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-001.html b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-001.html index 5c9ec84e8db..5bd0ae2b1ed 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-001.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-001.html @@ -45,6 +45,8 @@ const gNonAnimatableProps = [ 'unsupportedProperty', + 'float', // We use the string "cssFloat" to represent "float" property, and + // so reject "float" in the keyframe-like object. 'font-size', // Supported property that uses dashes ]; diff --git a/tests/wpt/web-platform-tests/webaudio/resources/audit.js b/tests/wpt/web-platform-tests/webaudio/resources/audit.js index 1876c0fc771..2aac1fffb49 100644 --- a/tests/wpt/web-platform-tests/webaudio/resources/audit.js +++ b/tests/wpt/web-platform-tests/webaudio/resources/audit.js @@ -1187,7 +1187,21 @@ window.Audit = (function() { '> [' + this._label + '] ' + (this._description ? this._description : '')); - this._taskFunction(this, this.should.bind(this)); + // Ideally we would just use testharness async_test instead of reinventing + // that wheel, but since it's been reinvented... At least make sure that + // an exception while running a task doesn't preclude us running all the + // _other_ tasks for the test. + try { + this._taskFunction(this, this.should.bind(this)); + } catch (e) { + // Log the failure. + test(() => { throw e; }, `Executing "${this.label}"`); + if (this.state != TaskState.FINISHED) { + // We threw before calling done(), so do that manually to run our + // other tasks. + this.done(); + } + } } // Update the task success based on the individual assertion/test inside. diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-addmodule-resolution.https.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-addmodule-resolution.https.html index e94621296a3..dc324b22d65 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-addmodule-resolution.https.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-addmodule-resolution.https.html @@ -12,48 +12,50 @@ <script id="layout-test-code"> let audit = Audit.createTaskRunner(); - let sampleRate = 48000; - let realtimeContext = new AudioContext(); - let offlineContext = new OfflineAudioContext(1, sampleRate, sampleRate); + setup(() => { + let sampleRate = 48000; + let realtimeContext = new AudioContext(); + let offlineContext = new OfflineAudioContext(1, sampleRate, sampleRate); - let filePath = 'processors/dummy-processor.js'; + let filePath = 'processors/dummy-processor.js'; - // Test if the browser does not crash upon addModule() call after the - // realtime context construction. - audit.define( - {label: 'module-loading-after-realtime-context-creation'}, - (task, should) => { - let dummyWorkletNode = - new AudioWorkletNode(realtimeContext, 'dummy'); - dummyWorkletNode.connect(realtimeContext.destination); - should(dummyWorkletNode instanceof AudioWorkletNode, - '"dummyWorkletNode" is an instance of AudioWorkletNode ' + - 'from realtime context') - .beTrue(); - task.done(); - }); + // Test if the browser does not crash upon addModule() call after the + // realtime context construction. + audit.define( + {label: 'module-loading-after-realtime-context-creation'}, + (task, should) => { + let dummyWorkletNode = + new AudioWorkletNode(realtimeContext, 'dummy'); + dummyWorkletNode.connect(realtimeContext.destination); + should(dummyWorkletNode instanceof AudioWorkletNode, + '"dummyWorkletNode" is an instance of AudioWorkletNode ' + + 'from realtime context') + .beTrue(); + task.done(); + }); - // Test if the browser does not crash upon addModule() call after the - // offline context construction. - audit.define( - {label: 'module-loading-after-offline-context-creation'}, - (task, should) => { - let dummyWorkletNode = - new AudioWorkletNode(offlineContext, 'dummy'); - dummyWorkletNode.connect(offlineContext.destination); - should(dummyWorkletNode instanceof AudioWorkletNode, - '"dummyWorkletNode" is an instance of AudioWorkletNode ' + - 'from offline context') - .beTrue(); - task.done(); - }); + // Test if the browser does not crash upon addModule() call after the + // offline context construction. + audit.define( + {label: 'module-loading-after-offline-context-creation'}, + (task, should) => { + let dummyWorkletNode = + new AudioWorkletNode(offlineContext, 'dummy'); + dummyWorkletNode.connect(offlineContext.destination); + should(dummyWorkletNode instanceof AudioWorkletNode, + '"dummyWorkletNode" is an instance of AudioWorkletNode ' + + 'from offline context') + .beTrue(); + task.done(); + }); - Promise.all([ - realtimeContext.audioWorklet.addModule(filePath), - offlineContext.audioWorklet.addModule(filePath) - ]).then(() => { - audit.run(); - }); + Promise.all([ + realtimeContext.audioWorklet.addModule(filePath), + offlineContext.audioWorklet.addModule(filePath) + ]).then(() => { + audit.run(); + }); + }); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html index 3e364eb7b35..b1f18d397d4 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html @@ -22,104 +22,106 @@ Somewhat similiar to a test from Mozilla: <body class="a"> <div id="log"></div> <script> - var elementSourceTest = async_test("Element Source tests completed"); - - var src = '/webaudio/resources/sin_440Hz_-6dBFS_1s.wav'; - var BUFFER_SIZE = 2048; - var context = null; - var actualBufferArrayC0 = new Float32Array(0); - var actualBufferArrayC1 = new Float32Array(0); - var audio = null, source = null, processor = null - - function loadExpectedBuffer(event) { - bufferLoader = new BufferLoader( - context, - [src], - bufferLoadCompleted - ); - bufferLoader.load(); - }; - - function bufferLoadCompleted(buffer) { - runTests(buffer); - }; - - function concatTypedArray(arr1, arr2) { - var result = new Float32Array(arr1.length + arr2.length); - result.set(arr1); - result.set(arr2, arr1.length); - return result; - } - - // Create Audio context. The reference wav file is sampled at 44.1 kHz so - // use the same rate for the context to remove extra resampling that might - // be required. - context = new AudioContext({sampleRate: 44100}); - - // Create an audio element, and a media element source - audio = document.createElement('audio'); - audio.src = src; - source = context.createMediaElementSource(audio); - -function processListener (e) { - actualBufferArrayC0 = concatTypedArray(actualBufferArrayC0, e.inputBuffer.getChannelData(0)); - actualBufferArrayC1 = concatTypedArray(actualBufferArrayC1, e.inputBuffer.getChannelData(1)); -} - - // Create a processor node to copy the input to the actual buffer - processor = context.createScriptProcessor(BUFFER_SIZE); - source.connect(processor); - processor.connect(context.destination); - processor.addEventListener('audioprocess', processListener); - - // When media playback ended, save the begin to compare with expected buffer - audio.addEventListener("ended", function(e) { - // Setting a timeout since we need audioProcess event to run for all samples - window.setTimeout(loadExpectedBuffer, 50); - }); - - audio.play(); - - function runTests(expected) { - source.disconnect(); - processor.disconnect(); - - // firefox seems to process events after disconnect - processor.removeEventListener('audioprocess', processListener) - - // Note: the expected result is from a mono source file. - var expectedBuffer = expected[0]; - - // Trim the actual elements because we don't have a fine-grained - // control over the start and end time of recording the data. - var actualTrimmedC0 = trimEmptyElements(actualBufferArrayC0); - var actualTrimmedC1 = trimEmptyElements(actualBufferArrayC1); - var expectedLength = trimEmptyElements(expectedBuffer.getChannelData(0)).length; - - // Test that there is some data. - test(function() { - assert_greater_than(actualTrimmedC0.length, 0, - "processed data array (C0) length greater than 0"); - assert_greater_than(actualTrimmedC1.length, 0, - "processed data array (C1) length greater than 0"); - }, "Channel 0 processed some data"); - - // Test the actual contents of the 1st and second channel. - test(function() { - assert_array_approx_equals( - actualTrimmedC0, - trimEmptyElements(expectedBuffer.getChannelData(0)), - 1e-4, - "comparing expected and rendered buffers (channel 0)"); - assert_array_approx_equals( - actualTrimmedC1, - trimEmptyElements(expectedBuffer.getChannelData(0)), - 1e-4, - "comparing expected and rendered buffers (channel 1)"); - }, "All data processed correctly"); - - elementSourceTest.done(); - }; + var elementSourceTest = async_test(function(elementSourceTest) { + + var src = '/webaudio/resources/sin_440Hz_-6dBFS_1s.wav'; + var BUFFER_SIZE = 2048; + var context = null; + var actualBufferArrayC0 = new Float32Array(0); + var actualBufferArrayC1 = new Float32Array(0); + var audio = null, source = null, processor = null + + function loadExpectedBuffer(event) { + bufferLoader = new BufferLoader( + context, + [src], + elementSourceTest.step_func(bufferLoadCompleted) + ); + bufferLoader.load(); + }; + + function bufferLoadCompleted(buffer) { + runTests(buffer); + }; + + function concatTypedArray(arr1, arr2) { + var result = new Float32Array(arr1.length + arr2.length); + result.set(arr1); + result.set(arr2, arr1.length); + return result; + } + + // Create Audio context. The reference wav file is sampled at 44.1 kHz so + // use the same rate for the context to remove extra resampling that might + // be required. + context = new AudioContext({sampleRate: 44100}); + + // Create an audio element, and a media element source + audio = document.createElement('audio'); + audio.src = src; + source = context.createMediaElementSource(audio); + + function processListener (e) { + actualBufferArrayC0 = concatTypedArray(actualBufferArrayC0, e.inputBuffer.getChannelData(0)); + actualBufferArrayC1 = concatTypedArray(actualBufferArrayC1, e.inputBuffer.getChannelData(1)); + } + + // Create a processor node to copy the input to the actual buffer + processor = context.createScriptProcessor(BUFFER_SIZE); + source.connect(processor); + processor.connect(context.destination); + let audioprocessListener = elementSourceTest.step_func(processListener); + processor.addEventListener('audioprocess', audioprocessListener); + + // When media playback ended, save the begin to compare with expected buffer + audio.addEventListener("ended", elementSourceTest.step_func(function(e) { + // Setting a timeout since we need audioProcess event to run for all samples + window.setTimeout(elementSourceTest.step_func(loadExpectedBuffer), 50); + })); + + audio.play(); + + function runTests(expected) { + source.disconnect(); + processor.disconnect(); + + // firefox seems to process events after disconnect + processor.removeEventListener('audioprocess', audioprocessListener) + + // Note: the expected result is from a mono source file. + var expectedBuffer = expected[0]; + + // Trim the actual elements because we don't have a fine-grained + // control over the start and end time of recording the data. + var actualTrimmedC0 = trimEmptyElements(actualBufferArrayC0); + var actualTrimmedC1 = trimEmptyElements(actualBufferArrayC1); + var expectedLength = trimEmptyElements(expectedBuffer.getChannelData(0)).length; + + // Test that there is some data. + test(function() { + assert_greater_than(actualTrimmedC0.length, 0, + "processed data array (C0) length greater than 0"); + assert_greater_than(actualTrimmedC1.length, 0, + "processed data array (C1) length greater than 0"); + }, "Channel 0 processed some data"); + + // Test the actual contents of the 1st and second channel. + test(function() { + assert_array_approx_equals( + actualTrimmedC0, + trimEmptyElements(expectedBuffer.getChannelData(0)), + 1e-4, + "comparing expected and rendered buffers (channel 0)"); + assert_array_approx_equals( + actualTrimmedC1, + trimEmptyElements(expectedBuffer.getChannelData(0)), + 1e-4, + "comparing expected and rendered buffers (channel 1)"); + }, "All data processed correctly"); + + elementSourceTest.done(); + }; + }, "Element Source tests completed"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-routing.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-routing.html index 2e04ab6a3f2..816eba0b29a 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-routing.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-routing.html @@ -21,105 +21,107 @@ const t = async_test( "MediaStreamAudioSourceNode captures the right track." ); - const ac = new AudioContext(); - // Test that the right track is captured. Set up a MediaStream that has two - // tracks, one with a tone at 100Hz and one with a tone at 1000Hz. - const dest0 = ac.createMediaStreamDestination(); - const dest1 = ac.createMediaStreamDestination(); - const osc0 = ac.createOscillator(); - const osc1 = ac.createOscillator(); - osc0.frequency.value = 100; - osc1.frequency.value = 1000; - osc0.connect(dest0); - osc1.connect(dest1); - osc0.start(0); - osc1.start(0); - const track0 = dest0.stream.getAudioTracks()[0]; - const track0id = track0.id; - const track1 = dest1.stream.getAudioTracks()[0]; - const track1id = track1.id; + t.step(function() { + const ac = new AudioContext(); + // Test that the right track is captured. Set up a MediaStream that has two + // tracks, one with a tone at 100Hz and one with a tone at 1000Hz. + const dest0 = ac.createMediaStreamDestination(); + const dest1 = ac.createMediaStreamDestination(); + const osc0 = ac.createOscillator(); + const osc1 = ac.createOscillator(); + osc0.frequency.value = 100; + osc1.frequency.value = 1000; + osc0.connect(dest0); + osc1.connect(dest1); + osc0.start(0); + osc1.start(0); + const track0 = dest0.stream.getAudioTracks()[0]; + const track0id = track0.id; + const track1 = dest1.stream.getAudioTracks()[0]; + const track1id = track1.id; - let ids = [track0id, track1id]; - ids.sort(); - let targetFrequency; - let otherFrequency; - if (ids[0] == track0id) { - targetFrequency = 100; - otherFrequency = 1000; - } else { - targetFrequency = 1000; - otherFrequency = 100; - } + let ids = [track0id, track1id]; + ids.sort(); + let targetFrequency; + let otherFrequency; + if (ids[0] == track0id) { + targetFrequency = 100; + otherFrequency = 1000; + } else { + targetFrequency = 1000; + otherFrequency = 100; + } - let twoTrackMediaStream = new MediaStream(); - twoTrackMediaStream.addTrack(track0); - twoTrackMediaStream.addTrack(track1); + let twoTrackMediaStream = new MediaStream(); + twoTrackMediaStream.addTrack(track0); + twoTrackMediaStream.addTrack(track1); - const twoTrackSource = ac.createMediaStreamSource(twoTrackMediaStream); - const analyser = ac.createAnalyser(); - // Don't do smoothing so that the frequency data changes quickly - analyser.smoothingTimeConstant = 0; + const twoTrackSource = ac.createMediaStreamSource(twoTrackMediaStream); + const analyser = ac.createAnalyser(); + // Don't do smoothing so that the frequency data changes quickly + analyser.smoothingTimeConstant = 0; - twoTrackSource.connect(analyser); + twoTrackSource.connect(analyser); - const indexToCheckForHighEnergy = binIndexForFrequency( - targetFrequency, - analyser - ); - const indexToCheckForLowEnergy = binIndexForFrequency( - otherFrequency, - analyser - ); - let frequencyData = new Float32Array(1024); - let checkCount = 0; - let numberOfRemovals = 0; - let stopped = false; - function analyse() { - analyser.getFloatFrequencyData(frequencyData); - // there should be high energy in the right bin, higher than 40dbfs because - // it's supposed to be a sine wave at 0dbfs - if (frequencyData[indexToCheckForHighEnergy] > -40 && !stopped) { - assert_true(true, "Correct track routed to the AudioContext."); - checkCount++; - } - if (stopped && frequencyData[indexToCheckForHighEnergy] < -40) { - assert_true( - true, - `After stopping the track, low energy is found in the - same bin` + const indexToCheckForHighEnergy = binIndexForFrequency( + targetFrequency, + analyser ); - checkCount++; - } - if (checkCount > 5 && checkCount < 20) { - twoTrackMediaStream.getAudioTracks().forEach(track => { - if (track.id == ids[0]) { - numberOfRemovals++; - window.removedTrack = track; - twoTrackMediaStream.removeTrack(track); - } - }); - assert_true( - numberOfRemovals == 1, - `The mediastreamtrack can only be - removed once from the mediastream` + const indexToCheckForLowEnergy = binIndexForFrequency( + otherFrequency, + analyser ); - } else if (checkCount >= 20 && checkCount < 30) { - window.removedTrack.stop(); - stopped = true; - } else if (checkCount >= 30) { - assert_true( - numberOfRemovals == 1, - `After removing the track from the + let frequencyData = new Float32Array(1024); + let checkCount = 0; + let numberOfRemovals = 0; + let stopped = false; + function analyse() { + analyser.getFloatFrequencyData(frequencyData); + // there should be high energy in the right bin, higher than 40dbfs because + // it's supposed to be a sine wave at 0dbfs + if (frequencyData[indexToCheckForHighEnergy] > -40 && !stopped) { + assert_true(true, "Correct track routed to the AudioContext."); + checkCount++; + } + if (stopped && frequencyData[indexToCheckForHighEnergy] < -40) { + assert_true( + true, + `After stopping the track, low energy is found in the + same bin` + ); + checkCount++; + } + if (checkCount > 5 && checkCount < 20) { + twoTrackMediaStream.getAudioTracks().forEach(track => { + if (track.id == ids[0]) { + numberOfRemovals++; + window.removedTrack = track; + twoTrackMediaStream.removeTrack(track); + } + }); + assert_true( + numberOfRemovals == 1, + `The mediastreamtrack can only be + removed once from the mediastream` + ); + } else if (checkCount >= 20 && checkCount < 30) { + window.removedTrack.stop(); + stopped = true; + } else if (checkCount >= 30) { + assert_true( + numberOfRemovals == 1, + `After removing the track from the mediastream, it's still routed to the graph.` - ); - // After some time, consider that it worked. - t.done(); - return; - } + ); + // After some time, consider that it worked. + t.done(); + return; + } - t.step_timeout(analyse, 100); - } - t.step_timeout(analyse, 100); + t.step_timeout(analyse, 100); + } + t.step_timeout(analyse, 100); + }); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html index d330c9c3de4..c434aa8c6a5 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html @@ -108,6 +108,16 @@ }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(DOMException, 'NotSupportedError'); + should( + () => { + node = new PannerNode(context); + node.channelCount = options.channelCount; + }, + `node.channelCount = ${options.channelCount}`) + .throw(DOMException, "NotSupportedError"); + should(node.channelCount, + `node.channelCount after setting to ${options.channelCount}`) + .beEqualTo(2); options = {channelCount: 3}; should( @@ -116,6 +126,16 @@ }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(DOMException, 'NotSupportedError'); + should( + () => { + node = new PannerNode(context); + node.channelCount = options.channelCount; + }, + `node.channelCount = ${options.channelCount}`) + .throw(DOMException, "NotSupportedError"); + should(node.channelCount, + `node.channelCount after setting to ${options.channelCount}`) + .beEqualTo(2); options = {channelCount: 99}; should( @@ -124,6 +144,16 @@ }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(DOMException, 'NotSupportedError'); + should( + () => { + node = new PannerNode(context); + node.channelCount = options.channelCount; + }, + `node.channelCount = ${options.channelCount}`) + .throw(DOMException, "NotSupportedError"); + should(node.channelCount, + `node.channelCount after setting to ${options.channelCount}`) + .beEqualTo(2); // Test channelCountMode. A mode of "max" is illegal, but others are // ok. @@ -154,6 +184,16 @@ }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(DOMException, 'NotSupportedError'); + should( + () => { + node = new PannerNode(context); + node.channelCountMode = options.channelCountMode; + }, + `node.channelCountMode = ${options.channelCountMode}`) + .throw(DOMException, "NotSupportedError"); + should(node.channelCountMode, + `node.channelCountMode after setting to ${options.channelCountMode}`) + .beEqualTo("clamped-max"); options = {channelCountMode: 'foobar'}; should( @@ -162,6 +202,16 @@ }, 'new PannerNode(c, " + JSON.stringify(options) + ")') .throw(TypeError); + should( + () => { + node = new PannerNode(context); + node.channelCountMode = options.channelCountMode; + }, + `node.channelCountMode = ${options.channelCountMode}`) + .notThrow(); // Invalid assignment to enum-valued attrs does not throw. + should(node.channelCountMode, + `node.channelCountMode after setting to ${options.channelCountMode}`) + .beEqualTo("clamped-max"); // Test channelInterpretation. options = {channelInterpretation: 'speakers'}; @@ -200,6 +250,17 @@ }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(RangeError); + should( + () => { + node = new PannerNode(context); + node.maxDistance = options.maxDistance; + }, + `node.maxDistance = ${options.maxDistance}`) + .throw(RangeError); + should(node.maxDistance, + `node.maxDistance after setting to ${options.maxDistance}`) + .beEqualTo(10000); + options = {maxDistance: 100}; should( () => { @@ -218,6 +279,17 @@ }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(RangeError); + should( + () => { + node = new PannerNode(context); + node.rolloffFactor = options.rolloffFactor; + }, + `node.rolloffFactor = ${options.rolloffFactor}`) + .throw(RangeError); + should(node.rolloffFactor, + `node.rolloffFactor after setting to ${options.rolloffFactor}`) + .beEqualTo(1); + options = {rolloffFactor: 0}; should( () => { @@ -256,6 +328,17 @@ }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(DOMException, 'InvalidStateError'); + should( + () => { + node = new PannerNode(context); + node.coneOuterGain = options.coneOuterGain; + }, + `node.coneOuterGain = ${options.coneOuterGain}`) + .throw(DOMException, 'InvalidStateError'); + should(node.coneOuterGain, + `node.coneOuterGain after setting to ${options.coneOuterGain}`) + .beEqualTo(0); + options = {coneOuterGain: 1.1}; should( () => { @@ -263,6 +346,17 @@ }, 'new PannerNode(c, ' + JSON.stringify(options) + ')') .throw(DOMException, 'InvalidStateError'); + should( + () => { + node = new PannerNode(context); + node.coneOuterGain = options.coneOuterGain; + }, + `node.coneOuterGain = ${options.coneOuterGain}`) + .throw(DOMException, 'InvalidStateError'); + should(node.coneOuterGain, + `node.coneOuterGain after setting to ${options.coneOuterGain}`) + .beEqualTo(0); + options = {coneOuterGain: 0.0}; should( () => { diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html index a2e40777d42..81e64dc12e9 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html @@ -134,35 +134,35 @@ */ function executeTest(curveData, inputData, expectedData, testName) { var stTest=async_test("WaveShaperNode - "+testName); + stTest.step(function() { + + // Create offline audio context. + var ac=new OfflineAudioContext(1, inputData.length, sampleRate); + + // Create the WaveShaper and its curve. + var waveShaper=ac.createWaveShaper(); + if(curveData!=null) { + var curve=new Float32Array(curveData.length); + for(var i=0;i<curveData.length;i++) { curve[i]=curveData[i]; } + waveShaper.curve=curve; + } + waveShaper.connect(ac.destination); + + // Create buffer containing the input values. + var inputBuffer=ac.createBuffer(1, Math.max(inputData.length, 2), sampleRate); + var d=inputBuffer.getChannelData(0); + for(var i=0;i<inputData.length;i++) { d[i]=inputData[i]; } + + // Play the input buffer through the WaveShaper. + var src=ac.createBufferSource(); + src.buffer=inputBuffer; + src.connect(waveShaper); + src.start(); + + // Test the outputs match the expected values. + ac.oncomplete=stTest.step_func_done(function(ev) { + var d=ev.renderedBuffer.getChannelData(0); - // Create offline audio context. - var ac=new OfflineAudioContext(1, inputData.length, sampleRate); - - // Create the WaveShaper and its curve. - var waveShaper=ac.createWaveShaper(); - if(curveData!=null) { - var curve=new Float32Array(curveData.length); - for(var i=0;i<curveData.length;i++) { curve[i]=curveData[i]; } - waveShaper.curve=curve; - } - waveShaper.connect(ac.destination); - - // Create buffer containing the input values. - var inputBuffer=ac.createBuffer(1, Math.max(inputData.length, 2), sampleRate); - var d=inputBuffer.getChannelData(0); - for(var i=0;i<inputData.length;i++) { d[i]=inputData[i]; } - - // Play the input buffer through the WaveShaper. - var src=ac.createBufferSource(); - src.buffer=inputBuffer; - src.connect(waveShaper); - src.start(); - - // Test the outputs match the expected values. - ac.oncomplete=function(ev) { - var d=ev.renderedBuffer.getChannelData(0); - - stTest.step(function() { for(var i=0;i<expectedData.length;i++) { var curveText="null"; if(curve!=null) { @@ -176,10 +176,8 @@ assert_approx_equals(d[i], expectedData[i], tolerance, comment); } }); - - stTest.done(); - }; - ac.startRendering(); + ac.startRendering(); + }); } </script> </body> diff --git a/tests/wpt/web-platform-tests/webxr/ar-module/idlharness.https.window.js b/tests/wpt/web-platform-tests/webxr/ar-module/idlharness.https.window.js new file mode 100644 index 00000000000..1268f4ea2a5 --- /dev/null +++ b/tests/wpt/web-platform-tests/webxr/ar-module/idlharness.https.window.js @@ -0,0 +1,16 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js + +'use strict'; + +// https://immersive-web.github.io/webxr-ar-module/ + +idl_test( + ['webxr-ar-module'], + ['webxr', 'dom'], + async idl_array => { + idl_array.add_objects({ + // TODO: XRSession + }); + } +); diff --git a/tests/wpt/web-platform-tests/webxr/gamepads-module/idlharness.https.window.js b/tests/wpt/web-platform-tests/webxr/gamepads-module/idlharness.https.window.js new file mode 100644 index 00000000000..4509c67a847 --- /dev/null +++ b/tests/wpt/web-platform-tests/webxr/gamepads-module/idlharness.https.window.js @@ -0,0 +1,16 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js + +'use strict'; + +// https://immersive-web.github.io/webxr-gamepads-module/ + +idl_test( + ['webxr-gamepads-module'], + ['webxr', 'dom'], + async idl_array => { + idl_array.add_objects({ + // TODO: XRInputSource + }); + } +); diff --git a/tests/wpt/web-platform-tests/webxr/xrSession_input_events_end.https.html b/tests/wpt/web-platform-tests/webxr/xrSession_input_events_end.https.html index 37e020605a7..a932aad2fad 100644 --- a/tests/wpt/web-platform-tests/webxr/xrSession_input_events_end.https.html +++ b/tests/wpt/web-platform-tests/webxr/xrSession_input_events_end.https.html @@ -10,10 +10,16 @@ let testName = "Calling end during an input callback stops processing at the rig let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE; +let gl = null; + function requestImmersiveSession() { return new Promise((resolve, reject) => { navigator.xr.test.simulateUserActivation(() => { navigator.xr.requestSession('immersive-vr').then((session) => { + session.updateRenderState({ + baseLayer: new XRWebGLLayer(session, gl) + }); + resolve(session); }, (err) => { reject(err); @@ -22,8 +28,8 @@ function requestImmersiveSession() { }); } -let testFunction = function(session, fakeDeviceController, t) { - +let testFunction = function(session, fakeDeviceController, t, sessionObjects) { + gl = sessionObjects.gl; // helper method to send a click and then request a dummy animation frame to // ensure that the click propagates. We're doing everything in these tests // from event watchers, we just need to trigger the add/click to make the diff --git a/tests/wpt/web-platform-tests/webxr/xrWebGLLayer_constructor.https.html b/tests/wpt/web-platform-tests/webxr/xrWebGLLayer_constructor.https.html index 7e57f4286c6..0584da79c12 100644 --- a/tests/wpt/web-platform-tests/webxr/xrWebGLLayer_constructor.https.html +++ b/tests/wpt/web-platform-tests/webxr/xrWebGLLayer_constructor.https.html @@ -17,11 +17,8 @@ xr_promise_test("Ensure that XRWebGLLayer's constructor throws appropriate error let gl = webglCanvas.getContext('webgl', glAttributes); return navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE) .then(() => { - let sessionPromise; - navigator.xr.test.simulateUserActivation(function() { - sessionPromise = navigator.xr.requestSession('inline'); - }); - return sessionPromise.then((session) => { + return navigator.xr.requestSession('inline') + .then((session) => { try { let webglLayerIncompatible = new XRWebGLLayer(session, gl); } catch (err) { diff --git a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.any.js b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.any.js new file mode 100644 index 00000000000..1942a4658df --- /dev/null +++ b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.any.js @@ -0,0 +1,83 @@ +// META: global=!default,sharedworker + +var expected = [ + // https://html.spec.whatwg.org/ + "ApplicationCache", + "WorkerGlobalScope", + "SharedWorkerGlobalScope", + "Worker", + "SharedWorker", + "MessagePort", + "MessageEvent", + "WorkerNavigator", + "MessageChannel", + "WorkerLocation", + "ImageData", + "ImageBitmap", + "CanvasGradient", + "CanvasPattern", + "CanvasPath", + "Path2D", + "PromiseRejectionEvent", + "EventSource", + "WebSocket", + "CloseEvent", + "BroadcastChannel", + // https://tc39.github.io/ecma262/ + "ArrayBuffer", + "Int8Array", + "Uint8Array", + "Uint8ClampedArray", + "Int16Array", + "Uint16Array", + "Int32Array", + "Uint32Array", + "Float32Array", + "Float64Array", + "DataView", + // https://xhr.spec.whatwg.org/ + "XMLHttpRequestEventTarget", + "XMLHttpRequestUpload", + "XMLHttpRequest", + "ProgressEvent", + "FormData", + // https://url.spec.whatwg.org/ + "URL", + "URLSearchParams", + // https://w3c.github.io/FileAPI/ + "File", + "Blob", + "FileList", + "FileReader", + "FileReaderSync", + // https://dom.spec.whatwg.org/ + "EventTarget", + "ErrorEvent", + "Event", + "CustomEvent", + // http://heycam.github.io/webidl/ + "DOMException", + // https://streams.spec.whatwg.org/ + "ReadableStream", + "WritableStream", + "ByteLengthQueuingStrategy", + "CountQueuingStrategy", + // http://w3c.github.io/IndexedDB/ + "IDBRequest", + "IDBOpenDBRequest", + "IDBVersionChangeEvent", + "IDBFactory", + "IDBDatabase", + "IDBObjectStore", + "IDBIndex", + "IDBKeyRange", + "IDBCursor", + "IDBCursorWithValue", + "IDBTransaction", +]; + +for (var i = 0; i < unexpected.length; ++i) { + test(function() { + assert_true(unexpected[i] in self); + }, "The " + unexpected[i] + " interface object should not be exposed"); +} diff --git a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.html b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.html deleted file mode 100644 index 99e8b3a0f3d..00000000000 --- a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.html +++ /dev/null @@ -1,19 +0,0 @@ -<!doctype html> -<title>available interface objects in shared worker</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<div id=log></div> -<script> -setup(function() { - window.worker = new SharedWorker('003.js'); - worker.port.onmessage = function(e) { - var result = e.data; - for (var i = 0; i < result.length; ++i) { - test(function() { - assert_true(result[i][1]); - }, "The " + result[i][0] + " interface object should be exposed"); - } - done(); - } -}, {explicit_done: true}); -</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.js b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.js deleted file mode 100644 index a91e7c38759..00000000000 --- a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.js +++ /dev/null @@ -1,82 +0,0 @@ -onconnect = function(e) { - var expected = [ - // https://html.spec.whatwg.org/ - "ApplicationCache", - "WorkerGlobalScope", - "SharedWorkerGlobalScope", - "Worker", - "SharedWorker", - "MessagePort", - "MessageEvent", - "WorkerNavigator", - "MessageChannel", - "WorkerLocation", - "ImageData", - "ImageBitmap", - "CanvasGradient", - "CanvasPattern", - "CanvasPath", - "Path2D", - "PromiseRejectionEvent", - "EventSource", - "WebSocket", - "CloseEvent", - "BroadcastChannel", - // https://tc39.github.io/ecma262/ - "ArrayBuffer", - "Int8Array", - "Uint8Array", - "Uint8ClampedArray", - "Int16Array", - "Uint16Array", - "Int32Array", - "Uint32Array", - "Float32Array", - "Float64Array", - "DataView", - // https://xhr.spec.whatwg.org/ - "XMLHttpRequestEventTarget", - "XMLHttpRequestUpload", - "XMLHttpRequest", - "ProgressEvent", - "FormData", - // https://url.spec.whatwg.org/ - "URL", - "URLSearchParams", - // https://w3c.github.io/FileAPI/ - "File", - "Blob", - "FileList", - "FileReader", - "FileReaderSync", - // https://dom.spec.whatwg.org/ - "EventTarget", - "ErrorEvent", - "Event", - "CustomEvent", - // http://heycam.github.io/webidl/ - "DOMException", - // https://streams.spec.whatwg.org/ - "ReadableStream", - "WritableStream", - "ByteLengthQueuingStrategy", - "CountQueuingStrategy", - // http://w3c.github.io/IndexedDB/ - "IDBRequest", - "IDBOpenDBRequest", - "IDBVersionChangeEvent", - "IDBFactory", - "IDBDatabase", - "IDBObjectStore", - "IDBIndex", - "IDBKeyRange", - "IDBCursor", - "IDBCursorWithValue", - "IDBTransaction", - ]; - var result = []; - for (var i = 0; i < expected.length; ++i) { - result.push([expected[i], expected[i] in self]); - } - e.ports[0].postMessage(result); -}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.any.js b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.any.js new file mode 100644 index 00000000000..358af74ca2c --- /dev/null +++ b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.any.js @@ -0,0 +1,46 @@ +// META: global=!default,sharedworker + +var unexpected = [ + // https://html.spec.whatwg.org/ + "DedicatedWorkerGlobalScope", + "AbstractView", + "AbstractWorker", + "Location", + "Navigator", + "DOMImplementation", + "Audio", + "HTMLCanvasElement", + "Path", + "TextMetrics", + "CanvasProxy", + "CanvasRenderingContext2D", + "DrawingStyle", + "PopStateEvent", + "HashChangeEvent", + "PageTransitionEvent", + // https://streams.spec.whatwg.org/ + "ReadableStreamDefaultReader", + "ReadableStreamBYOBReader", + "ReadableStreamDefaultController", + "ReadableByteStreamController", + "WritableStreamDefaultWriter", + "WritableStreamDefaultController", + // http://w3c.github.io/IndexedDB/ + "IDBEnvironment", + // https://www.w3.org/TR/2010/NOTE-webdatabase-20101118/ + "Database", + // https://w3c.github.io/uievents/ + "UIEvent", + "FocusEvent", + "MouseEvent", + "WheelEvent", + "InputEvent", + "KeyboardEvent", + "CompositionEvent", +]; + +for (var i = 0; i < unexpected.length; ++i) { + test(function() { + assert_false(unexpected[i] in self); + }, "The " + unexpected[i] + " interface object should not be exposed"); +} diff --git a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.html b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.html deleted file mode 100644 index b4a09c50e4e..00000000000 --- a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.html +++ /dev/null @@ -1,19 +0,0 @@ -<!doctype html> -<title>unavailable interface objects in shared worker</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<div id=log></div> -<script> -setup(function() { - window.worker = new SharedWorker('004.js'); - worker.port.onmessage = function(e) { - var result = e.data; - for (var i = 0; i < result.length; ++i) { - test(function() { - assert_false(result[i][1]); - }, "The " + result[i][0] + " interface object should not be exposed"); - } - done(); - } -}, {explicit_done: true}); -</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.js b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.js deleted file mode 100644 index 00e50d19cae..00000000000 --- a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/004.js +++ /dev/null @@ -1,45 +0,0 @@ -onconnect = function(e) { - var unexpected = [ - // https://html.spec.whatwg.org/ - "DedicatedWorkerGlobalScope", - "AbstractView", - "AbstractWorker", - "Location", - "Navigator", - "DOMImplementation", - "Audio", - "HTMLCanvasElement", - "Path", - "TextMetrics", - "CanvasProxy", - "CanvasRenderingContext2D", - "DrawingStyle", - "PopStateEvent", - "HashChangeEvent", - "PageTransitionEvent", - // https://streams.spec.whatwg.org/ - "ReadableStreamDefaultReader", - "ReadableStreamBYOBReader", - "ReadableStreamDefaultController", - "ReadableByteStreamController", - "WritableStreamDefaultWriter", - "WritableStreamDefaultController", - // http://w3c.github.io/IndexedDB/ - "IDBEnvironment", - // https://www.w3.org/TR/2010/NOTE-webdatabase-20101118/ - "Database", - // https://w3c.github.io/uievents/ - "UIEvent", - "FocusEvent", - "MouseEvent", - "WheelEvent", - "InputEvent", - "KeyboardEvent", - "CompositionEvent", - ]; - var result = []; - for (var i = 0; i < unexpected.length; ++i) { - result.push([unexpected[i], unexpected[i] in self]); - } - e.ports[0].postMessage(result); -}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html b/tests/wpt/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html index 5ad5557700d..ab5b78b77c6 100644 --- a/tests/wpt/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html +++ b/tests/wpt/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html @@ -9,7 +9,7 @@ <script> 'use strict'; run_all_fp_tests_allow_all( - 'http://{{domains[www]}}:{{ports[http][0]}}', + 'http://{{hosts[alt][]}}:{{ports[http][0]}}', 'sync-xhr', 'NetworkError', () => { |