diff options
701 files changed, 13849 insertions, 1894 deletions
diff --git a/tests/wpt/metadata/2dcontext/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini b/tests/wpt/metadata/2dcontext/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini index f55ee4c25c7..c2bdf03fb9c 100644 --- a/tests/wpt/metadata/2dcontext/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini +++ b/tests/wpt/metadata/2dcontext/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini @@ -1,4 +1,5 @@ [imageData-colorManagedBehavior.html] + expected: ERROR [imageData-colorManagedBehavior] expected: FAIL diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index fb42ac009cc..ace6e811425 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -20121,6 +20121,18 @@ {} ] ], + "compat/webkit-box-clamp-visibility-change.html": [ + [ + "compat/webkit-box-clamp-visibility-change.html", + [ + [ + "/compat/webkit-box-clamp-visibility-change-ref.html", + "==" + ] + ], + {} + ] + ], "compat/webkit-box-fieldset.html": [ [ "compat/webkit-box-fieldset.html", @@ -122133,6 +122145,30 @@ {} ] ], + "css/css-flexbox/percentage-heights-008.html": [ + [ + "css/css-flexbox/percentage-heights-008.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-flexbox/percentage-heights-009.html": [ + [ + "css/css-flexbox/percentage-heights-009.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/css-flexbox/percentage-size-subitems-001.html": [ [ "css/css-flexbox/percentage-size-subitems-001.html", @@ -122373,18 +122409,6 @@ {} ] ], - "css/css-flexbox/ttwf-reftest-flex-order.html": [ - [ - "css/css-flexbox/ttwf-reftest-flex-order.html", - [ - [ - "/css/css-flexbox/reference/ttwf-reftest-flex-order-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-flexbox/ttwf-reftest-flex-wrap-reverse.html": [ [ "css/css-flexbox/ttwf-reftest-flex-wrap-reverse.html", @@ -130495,6 +130519,18 @@ {} ] ], + "css/css-lists/ol-change-display-type.html": [ + [ + "css/css-lists/ol-change-display-type.html", + [ + [ + "/css/css-lists/ol-change-display-type-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-logical/cascading-001.html": [ [ "css/css-logical/cascading-001.html", @@ -138415,6 +138451,18 @@ {} ] ], + "css/css-pseudo/first-line-with-before-after.html": [ + [ + "css/css-pseudo/first-line-with-before-after.html", + [ + [ + "/css/css-pseudo/first-line-with-before-after-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-pseudo/first-line-with-out-of-flow.html": [ [ "css/css-pseudo/first-line-with-out-of-flow.html", @@ -143735,6 +143783,450 @@ {} ] ], + "css/css-sizing/intrinsic-size/intrinsic-size-001.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-001.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-002.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-002.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-003.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-003.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-004.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-004.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-005.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-005.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-006.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-006.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-006-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-007.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-007.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-007-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-008.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-008.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-008-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-009.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-009.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-009-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-010.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-010.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-010-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-011.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-011.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-011-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-012.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-012.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-012-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-013.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-013.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-013-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-014.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-014.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-014-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-015.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-015.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-015-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-016.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-016.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-016-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-017.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-017.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-017-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-018.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-018.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-018-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-019.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-019.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-019-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-020.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-020.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-020-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-021.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-021.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-021-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-022.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-022.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-022-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-023.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-023.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-023-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-024.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-024.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-024-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-025.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-025.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-025-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-026.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-026.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-026-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008.html": [ + [ + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008.html", + [ + [ + "/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-sizing/orthogonal-writing-mode-float-in-inline.html": [ [ "css/css-sizing/orthogonal-writing-mode-float-in-inline.html", @@ -147831,6 +148323,318 @@ {} ] ], + "css/css-text/line-break/line-break-anywhere-017.html": [ + [ + "css/css-text/line-break/line-break-anywhere-017.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-001.html": [ + [ + "css/css-text/line-break/line-break-anywhere-and-white-space-001.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-002.html": [ + [ + "css/css-text/line-break/line-break-anywhere-and-white-space-002.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-003.html": [ + [ + "css/css-text/line-break/line-break-anywhere-and-white-space-003.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-004.html": [ + [ + "css/css-text/line-break/line-break-anywhere-and-white-space-004.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-005.html": [ + [ + "css/css-text/line-break/line-break-anywhere-and-white-space-005.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-006.html": [ + [ + "css/css-text/line-break/line-break-anywhere-and-white-space-006.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-007.html": [ + [ + "css/css-text/line-break/line-break-anywhere-and-white-space-007.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-008.html": [ + [ + "css/css-text/line-break/line-break-anywhere-and-white-space-008.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-009.html": [ + [ + "css/css-text/line-break/line-break-anywhere-and-white-space-009.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html": [ + [ + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html": [ + [ + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html": [ + [ + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html": [ + [ + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html": [ + [ + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html": [ + [ + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html": [ + [ + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html": [ + [ + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html": [ + [ + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html": [ + [ + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html": [ + [ + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html": [ + [ + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html": [ + [ + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html": [ + [ + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html": [ + [ + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html": [ + [ + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html", + [ + [ + "/css/css-text/line-break/reference/line-break-anywhere-004-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/line-break/line-break-loose-011.xht": [ [ "css/css-text/line-break/line-break-loose-011.xht", @@ -148731,6 +149535,66 @@ {} ] ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html": [ + [ + "css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html", + [ + [ + "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html": [ + [ + "css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html", + [ + [ + "/css/css-text/overflow-wrap/overflow-wrap-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html": [ + [ + "css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html", + [ + [ + "/css/css-text/overflow-wrap/overflow-wrap-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html": [ + [ + "css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html", + [ + [ + "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html": [ + [ + "css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html", + [ + [ + "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/overflow-wrap/overflow-wrap-anywhere-fit-content-001.html": [ [ "css/css-text/overflow-wrap/overflow-wrap-anywhere-fit-content-001.html", @@ -148743,6 +149607,54 @@ {} ] ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html": [ + [ + "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html", + [ + [ + "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html": [ + [ + "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html", + [ + [ + "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html": [ + [ + "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html", + [ + [ + "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html": [ + [ + "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html", + [ + [ + "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/overflow-wrap/overflow-wrap-anywhere-span-001.html": [ [ "css/css-text/overflow-wrap/overflow-wrap-anywhere-span-001.html", @@ -148851,6 +149763,30 @@ {} ] ], + "css/css-text/overflow-wrap/overflow-wrap-break-word-009.html": [ + [ + "css/css-text/overflow-wrap/overflow-wrap-break-word-009.html", + [ + [ + "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/overflow-wrap/overflow-wrap-break-word-010.html": [ + [ + "css/css-text/overflow-wrap/overflow-wrap-break-word-010.html", + [ + [ + "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/overflow-wrap/overflow-wrap-break-word-fit-content-001.html": [ [ "css/css-text/overflow-wrap/overflow-wrap-break-word-fit-content-001.html", @@ -148947,6 +149883,54 @@ {} ] ], + "css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html": [ + [ + "css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html", + [ + [ + "/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html": [ + [ + "css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html", + [ + [ + "/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html": [ + [ + "css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html", + [ + [ + "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/overflow-wrap/overflow-wrap-min-content-size-008.html": [ + [ + "css/css-text/overflow-wrap/overflow-wrap-min-content-size-008.html", + [ + [ + "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/overflow-wrap/overflow-wrap-normal-keep-all-001.html": [ [ "css/css-text/overflow-wrap/overflow-wrap-normal-keep-all-001.html", @@ -151791,6 +152775,66 @@ {} ] ], + "css/css-text/white-space/break-spaces-before-first-char-014.html": [ + [ + "css/css-text/white-space/break-spaces-before-first-char-014.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-before-first-char-015.html": [ + [ + "css/css-text/white-space/break-spaces-before-first-char-015.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-before-first-char-016.html": [ + [ + "css/css-text/white-space/break-spaces-before-first-char-016.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-before-first-char-017.html": [ + [ + "css/css-text/white-space/break-spaces-before-first-char-017.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-before-first-char-018.html": [ + [ + "css/css-text/white-space/break-spaces-before-first-char-018.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/white-space/break-spaces-tab-001.html": [ [ "css/css-text/white-space/break-spaces-tab-001.html", @@ -151863,6 +152907,126 @@ {} ] ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-001.html": [ + [ + "css/css-text/white-space/break-spaces-with-overflow-wrap-001.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-002.html": [ + [ + "css/css-text/white-space/break-spaces-with-overflow-wrap-002.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-003.html": [ + [ + "css/css-text/white-space/break-spaces-with-overflow-wrap-003.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-004.html": [ + [ + "css/css-text/white-space/break-spaces-with-overflow-wrap-004.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-005.html": [ + [ + "css/css-text/white-space/break-spaces-with-overflow-wrap-005.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-006.html": [ + [ + "css/css-text/white-space/break-spaces-with-overflow-wrap-006.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-007.html": [ + [ + "css/css-text/white-space/break-spaces-with-overflow-wrap-007.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-008.html": [ + [ + "css/css-text/white-space/break-spaces-with-overflow-wrap-008.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-009.html": [ + [ + "css/css-text/white-space/break-spaces-with-overflow-wrap-009.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-010.html": [ + [ + "css/css-text/white-space/break-spaces-with-overflow-wrap-010.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/white-space/control-chars-000.html": [ [ "css/css-text/white-space/control-chars-000.html", @@ -152763,6 +153927,30 @@ {} ] ], + "css/css-text/white-space/pre-wrap-009.html": [ + [ + "css/css-text/white-space/pre-wrap-009.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/pre-wrap-010.html": [ + [ + "css/css-text/white-space/pre-wrap-010.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/white-space/pre-wrap-011.html": [ [ "css/css-text/white-space/pre-wrap-011.html", @@ -154187,6 +155375,30 @@ {} ] ], + "css/css-text/word-break/word-break-break-all-029.html": [ + [ + "css/css-text/word-break/word-break-break-all-029.html", + [ + [ + "/css/css-text/word-break/reference/word-break-break-all-010-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/word-break/word-break-break-all-030.html": [ + [ + "css/css-text/word-break/word-break-break-all-030.html", + [ + [ + "/css/css-text/word-break/reference/word-break-break-all-010-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/word-break/word-break-break-all-inline-001.html": [ [ "css/css-text/word-break/word-break-break-all-inline-001.html", @@ -154283,6 +155495,30 @@ {} ] ], + "css/css-text/word-break/word-break-break-all-inline-009.html": [ + [ + "css/css-text/word-break/word-break-break-all-inline-009.html", + [ + [ + "/css/css-text/word-break/reference/word-break-break-all-010-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/word-break/word-break-break-all-inline-010.html": [ + [ + "css/css-text/word-break/word-break-break-all-inline-010.html", + [ + [ + "/css/css-text/word-break/reference/word-break-break-all-010-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/word-break/word-break-break-word-overflow-wrap-interactions.html": [ [ "css/css-text/word-break/word-break-break-word-overflow-wrap-interactions.html", @@ -205521,6 +206757,18 @@ {} ] ], + "svg/layout/svg-with-precent-dimensions-relayout.html": [ + [ + "svg/layout/svg-with-precent-dimensions-relayout.html", + [ + [ + "/svg/layout/svg-with-precent-dimensions-relayout-ref.html", + "==" + ] + ], + {} + ] + ], "svg/linking/reftests/href-a-element-attr-change.html": [ [ "svg/linking/reftests/href-a-element-attr-change.html", @@ -214197,6 +215445,12 @@ "client-hints/accept-ch-cache-revalidation.https.html.headers": [ [] ], + "client-hints/accept-ch-feature-policy-navigation.https.html.headers": [ + [] + ], + "client-hints/accept-ch-no-feature-policy-navigation.https.html.headers": [ + [] + ], "client-hints/accept_ch.http.html.headers": [ [] ], @@ -214245,15 +215499,27 @@ "client-hints/resources/dpr.py": [ [] ], + "client-hints/resources/expect-client-hints-headers-iframe.py": [ + [] + ], "client-hints/resources/expect_client_hints_headers.html": [ [] ], + "client-hints/resources/feature-policy-navigation.js": [ + [] + ], "client-hints/resources/http_equiv_accept_ch_lifetime.html": [ [] ], "client-hints/resources/http_equiv_accept_ch_lifetime.html.headers": [ [] ], + "client-hints/resources/iframe-accept-ch-lifetime.html": [ + [] + ], + "client-hints/resources/iframe-accept-ch-lifetime.html.headers": [ + [] + ], "client-hints/resources/sec-ch-ua.py": [ [] ], @@ -214503,6 +215769,9 @@ "compat/webkit-background-origin-text-ref.html": [ [] ], + "compat/webkit-box-clamp-visibility-change-ref.html": [ + [] + ], "compat/webkit-box-fieldset-ref.html": [ [] ], @@ -227784,6 +229053,9 @@ "content-security-policy/frame-src/frame-src-redirect.html.headers": [ [] ], + "content-security-policy/frame-src/frame-src-same-document.html.headers": [ + [] + ], "content-security-policy/frame-src/support/frame.html": [ [] ], @@ -243366,9 +244638,6 @@ "css/css-backgrounds/background-attachment-local/attachment-scroll-positioning-1-ref.html": [ [] ], - "css/css-backgrounds/background-attachment-local/reftest.list": [ - [] - ], "css/css-backgrounds/background-clip-color-ref.html": [ [] ], @@ -243447,9 +244716,6 @@ "css/css-backgrounds/background-size/support/rectangle-96x60.png": [ [] ], - "css/css-backgrounds/background-size/vector/empty/reftest.list": [ - [] - ], "css/css-backgrounds/background-size/vector/reference/background-size-vector-001-ref.html": [ [] ], @@ -243570,9 +244836,6 @@ "css/css-backgrounds/background-size/vector/reference/ref-wide-lime8x64-aqua8x64.html": [ [] ], - "css/css-backgrounds/background-size/vector/reftest.list": [ - [] - ], "css/css-backgrounds/background-size/vector/support/diagonal-scaled-fixed.svg": [ [] ], @@ -245634,9 +246897,6 @@ "css/css-flexbox/reference/ttwf-reftest-flex-inline-ref.html": [ [] ], - "css/css-flexbox/reference/ttwf-reftest-flex-order-ref.html": [ - [] - ], "css/css-flexbox/reference/ttwf-reftest-flex-wrap-ref.html": [ [] ], @@ -251718,6 +252978,9 @@ "css/css-lists/nested-marker-ref.html": [ [] ], + "css/css-lists/ol-change-display-type-ref.html": [ + [] + ], "css/css-lists/resources/white.gif": [ [] ], @@ -253095,6 +254358,9 @@ "css/css-pseudo/first-line-on-ancestor-block-ref.html": [ [] ], + "css/css-pseudo/first-line-with-before-after-ref.html": [ + [] + ], "css/css-pseudo/first-line-with-out-of-flow-ref.html": [ [] ], @@ -254265,6 +255531,120 @@ "css/css-sizing/intrinsic-percent-non-replaced-005-ref.html": [ [] ], + "css/css-sizing/intrinsic-size/intrinsic-size-001-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-002-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-003-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-004-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-005-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-006-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-007-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-008-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-009-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-010-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-011-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-012-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-013-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-014-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-015-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-016-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-017-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-018-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-019-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-020-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-021-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-022-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-023-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-024-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-025-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-026-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008-ref.html": [ + [] + ], + "css/css-sizing/intrinsic-size/resources/dice.png": [ + [] + ], "css/css-sizing/range-percent-intrinsic-size-1-ref.html": [ [] ], @@ -264543,12 +265923,18 @@ "docs/assets/testharness-tutorial-test-screenshot-2.png": [ [] ], + "docs/assets/web-platform.png": [ + [] + ], "docs/conf.py": [ [] ], "docs/index.md": [ [] ], + "docs/intro-video-transcript.md": [ + [] + ], "docs/make.bat": [ [] ], @@ -266562,6 +267948,9 @@ "fetch/api/request/destination/resources/empty.https.html": [ [] ], + "fetch/api/request/destination/resources/fetch-destination-worker-frame.js": [ + [] + ], "fetch/api/request/destination/resources/fetch-destination-worker-iframe.js": [ [] ], @@ -274161,6 +275550,9 @@ "html/webappapis/structured-clone/structured-clone-battery-of-tests.js": [ [] ], + "html/webappapis/the-windoworworkerglobalscope-mixin/README.md": [ + [] + ], "html/webappapis/the-windoworworkerglobalscope-mixin/support/WorkerSelfOriginSharedWorker.js": [ [] ], @@ -274413,7 +275805,7 @@ "import-maps/builtin-support.tentative/imported/resources/resolving.js": [ [] ], - "import-maps/builtin-support.tentative/static-import.js": [ + "import-maps/builtin-support.tentative/static-import.py": [ [] ], "import-maps/core/bare/__dir__.headers": [ @@ -274431,7 +275823,7 @@ "import-maps/core/bare/to-data": [ [] ], - "import-maps/core/static-import.js": [ + "import-maps/core/static-import.py": [ [] ], "import-maps/imported/resources/helpers/parsing.js": [ @@ -274524,6 +275916,18 @@ "infrastructure/metadata/infrastructure/expected-fail/failing-test.html.ini": [ [] ], + "infrastructure/metadata/infrastructure/expected-fail/precondition-in-promise.html.ini": [ + [] + ], + "infrastructure/metadata/infrastructure/expected-fail/precondition-in-setup.html.ini": [ + [] + ], + "infrastructure/metadata/infrastructure/expected-fail/precondition-without-setup.html.ini": [ + [] + ], + "infrastructure/metadata/infrastructure/expected-fail/precondition.html.ini": [ + [] + ], "infrastructure/metadata/infrastructure/expected-fail/timeout.html.ini": [ [] ], @@ -274608,6 +276012,9 @@ "infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini": [ [] ], + "infrastructure/metadata/infrastructure/testdriver/actions/multiTouchPoints.html.ini": [ + [] + ], "infrastructure/metadata/infrastructure/testdriver/actions/pause.html.ini": [ [] ], @@ -274620,6 +276027,9 @@ "infrastructure/metadata/infrastructure/testdriver/generate_test_report.html.ini": [ [] ], + "infrastructure/metadata/infrastructure/testdriver/virtual_authenticator.html.ini": [ + [] + ], "infrastructure/reftest-wait-ref.html": [ [] ], @@ -275208,6 +276618,9 @@ "layout-instability/resources/slow-image.py": [ [] ], + "layout-instability/resources/util.js": [ + [] + ], "lifecycle/META.yml": [ [] ], @@ -282114,6 +283527,9 @@ "std-toast/resources/helpers.js": [ [] ], + "storage-access-api/META.yml": [ + [] + ], "storage-access-api/helpers.js": [ [] ], @@ -282423,6 +283839,9 @@ "svg/interact/scripted/resources/blank.htm": [ [] ], + "svg/layout/svg-with-precent-dimensions-relayout-ref.html": [ + [] + ], "svg/linking/reftests/href-a-element-ref.html": [ [] ], @@ -287310,6 +288729,18 @@ "trusted-types/support/helper.sub.js": [ [] ], + "trusted-types/support/navigation-report-only-support.html": [ + [] + ], + "trusted-types/support/navigation-report-only-support.html.headers": [ + [] + ], + "trusted-types/support/navigation-support.html": [ + [] + ], + "trusted-types/support/navigation-support.html.headers": [ + [] + ], "trusted-types/support/worker.js": [ [] ], @@ -287994,9 +289425,6 @@ "webaudio/js/worklet-recorder.js": [ [] ], - "webaudio/refresh_idl.rb": [ - [] - ], "webaudio/resources/4ch-440.wav": [ [] ], @@ -288663,7 +290091,7 @@ "webgpu/suites/cts/validation/validation_test.js": [ [] ], - "webgpu/suites/cts/validation/vertex_input.spec.js": [ + "webgpu/suites/cts/validation/vertex_state.spec.js": [ [] ], "webmessaging/META.yml": [ @@ -298417,6 +299845,38 @@ {} ] ], + "IndexedDB/idbindex_reverse_cursor.any.js": [ + [ + "IndexedDB/idbindex_reverse_cursor.any.html", + { + "script_metadata": [ + [ + "title", + "Reverse Cursor Validity" + ], + [ + "script", + "support-promises.js" + ] + ] + } + ], + [ + "IndexedDB/idbindex_reverse_cursor.any.worker.html", + { + "script_metadata": [ + [ + "title", + "Reverse Cursor Validity" + ], + [ + "script", + "support-promises.js" + ] + ] + } + ] + ], "IndexedDB/idbkeyrange-includes.htm": [ [ "IndexedDB/idbkeyrange-includes.htm", @@ -307099,9 +308559,21 @@ {} ] ], - "battery-status/battery-interface-idlharness.https.window.js": [ + "battery-status/battery-promise-window.https.html": [ + [ + "battery-status/battery-promise-window.https.html", + {} + ] + ], + "battery-status/battery-promise.https.html": [ + [ + "battery-status/battery-promise.https.html", + {} + ] + ], + "battery-status/idlharness.https.window.js": [ [ - "battery-status/battery-interface-idlharness.https.window.html", + "battery-status/idlharness.https.window.html", { "script_metadata": [ [ @@ -307116,18 +308588,6 @@ } ] ], - "battery-status/battery-promise-window.https.html": [ - [ - "battery-status/battery-promise-window.https.html", - {} - ] - ], - "battery-status/battery-promise.https.html": [ - [ - "battery-status/battery-promise.https.html", - {} - ] - ], "beacon/beacon-basic-blob.html": [ [ "beacon/beacon-basic-blob.html", @@ -310039,6 +311499,12 @@ {} ] ], + "client-hints/accept-ch-feature-policy-navigation.https.html": [ + [ + "client-hints/accept-ch-feature-policy-navigation.https.html", + {} + ] + ], "client-hints/accept-ch-lifetime.tentative.https.html": [ [ "client-hints/accept-ch-lifetime.tentative.https.html", @@ -310047,6 +311513,12 @@ } ] ], + "client-hints/accept-ch-no-feature-policy-navigation.https.html": [ + [ + "client-hints/accept-ch-no-feature-policy-navigation.https.html", + {} + ] + ], "client-hints/accept_ch.http.html": [ [ "client-hints/accept_ch.http.html", @@ -311656,6 +313128,18 @@ {} ] ], + "content-security-policy/frame-src/frame-src-same-document-meta.html": [ + [ + "content-security-policy/frame-src/frame-src-same-document-meta.html", + {} + ] + ], + "content-security-policy/frame-src/frame-src-same-document.html": [ + [ + "content-security-policy/frame-src/frame-src-same-document.html", + {} + ] + ], "content-security-policy/frame-src/frame-src-self-unique-origin.html": [ [ "content-security-policy/frame-src/frame-src-self-unique-origin.html", @@ -311716,9 +313200,9 @@ {} ] ], - "content-security-policy/generic/generic-0_10.html": [ + "content-security-policy/generic/generic-0_10.sub.html": [ [ - "content-security-policy/generic/generic-0_10.html", + "content-security-policy/generic/generic-0_10.sub.html", {} ] ], @@ -317094,6 +318578,12 @@ {} ] ], + "css/css-color/parsing/system-color-valid.html": [ + [ + "css/css-color/parsing/system-color-valid.html", + {} + ] + ], "css/css-color/rgb-rounding-001.html": [ [ "css/css-color/rgb-rounding-001.html", @@ -318090,6 +319580,12 @@ {} ] ], + "css/css-flexbox/percentage-padding-001.html": [ + [ + "css/css-flexbox/percentage-padding-001.html", + {} + ] + ], "css/css-flexbox/position-absolute-001.html": [ [ "css/css-flexbox/position-absolute-001.html", @@ -318246,6 +319742,12 @@ {} ] ], + "css/css-fonts/generic-family-keywords-001.html": [ + [ + "css/css-fonts/generic-family-keywords-001.html", + {} + ] + ], "css/css-fonts/idlharness.html": [ [ "css/css-fonts/idlharness.html", @@ -319090,6 +320592,36 @@ {} ] ], + "css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html": [ + [ + "css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html", + {} + ] + ], + "css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html": [ + [ + "css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html", + {} + ] + ], + "css/css-grid/alignment/grid-align-justify-margin-border-padding.html": [ + [ + "css/css-grid/alignment/grid-align-justify-margin-border-padding.html", + {} + ] + ], + "css/css-grid/alignment/grid-align-justify-overflow.html": [ + [ + "css/css-grid/alignment/grid-align-justify-overflow.html", + {} + ] + ], + "css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html": [ + [ + "css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html", + {} + ] + ], "css/css-grid/alignment/grid-align-justify-stretch.html": [ [ "css/css-grid/alignment/grid-align-justify-stretch.html", @@ -321184,6 +322716,12 @@ {} ] ], + "css/css-lists/list-inside-contain.html": [ + [ + "css/css-lists/list-inside-contain.html", + {} + ] + ], "css/css-lists/nested-list-with-list-style-type-none.html": [ [ "css/css-lists/nested-list-with-list-style-type-none.html", @@ -324664,6 +326202,102 @@ {} ] ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-computed.html": [ + [ + "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-computed.html", + {} + ] + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-invalid.html": [ + [ + "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-invalid.html", + {} + ] + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-valid.html": [ + [ + "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-valid.html", + {} + ] + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-height-computed.html": [ + [ + "css/css-sizing/intrinsic-size/parsing/intrinsic-height-computed.html", + {} + ] + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-height-invalid.html": [ + [ + "css/css-sizing/intrinsic-size/parsing/intrinsic-height-invalid.html", + {} + ] + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-height-valid.html": [ + [ + "css/css-sizing/intrinsic-size/parsing/intrinsic-height-valid.html", + {} + ] + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-computed.html": [ + [ + "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-computed.html", + {} + ] + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-invalid.html": [ + [ + "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-invalid.html", + {} + ] + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-valid.html": [ + [ + "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-valid.html", + {} + ] + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-size-computed.html": [ + [ + "css/css-sizing/intrinsic-size/parsing/intrinsic-size-computed.html", + {} + ] + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-size-invalid.html": [ + [ + "css/css-sizing/intrinsic-size/parsing/intrinsic-size-invalid.html", + {} + ] + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-size-sets-computed-dimensions.html": [ + [ + "css/css-sizing/intrinsic-size/parsing/intrinsic-size-sets-computed-dimensions.html", + {} + ] + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-size-valid.html": [ + [ + "css/css-sizing/intrinsic-size/parsing/intrinsic-size-valid.html", + {} + ] + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-width-computed.html": [ + [ + "css/css-sizing/intrinsic-size/parsing/intrinsic-width-computed.html", + {} + ] + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-width-invalid.html": [ + [ + "css/css-sizing/intrinsic-size/parsing/intrinsic-width-invalid.html", + {} + ] + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-width-valid.html": [ + [ + "css/css-sizing/intrinsic-size/parsing/intrinsic-width-valid.html", + {} + ] + ], "css/css-sizing/min-max-content-orthogonal-flow-crash-001.html": [ [ "css/css-sizing/min-max-content-orthogonal-flow-crash-001.html", @@ -327010,6 +328644,12 @@ {} ] ], + "css/css-text/line-breaking/line-breaking-atomic-nowrap-001.html": [ + [ + "css/css-text/line-breaking/line-breaking-atomic-nowrap-001.html", + {} + ] + ], "css/css-text/overflow-wrap/overflow-wrap-anywhere-span-002.html": [ [ "css/css-text/overflow-wrap/overflow-wrap-anywhere-span-002.html", @@ -332848,6 +334488,12 @@ {} ] ], + "css/cssom/serialize-media-rule.html": [ + [ + "css/cssom/serialize-media-rule.html", + {} + ] + ], "css/cssom/serialize-namespaced-type-selectors.html": [ [ "css/cssom/serialize-namespaced-type-selectors.html", @@ -350450,6 +352096,12 @@ } ] ], + "fetch/api/request/destination/fetch-destination-frame.https.html": [ + [ + "fetch/api/request/destination/fetch-destination-frame.https.html", + {} + ] + ], "fetch/api/request/destination/fetch-destination-iframe.https.html": [ [ "fetch/api/request/destination/fetch-destination-iframe.https.html", @@ -355525,9 +357177,9 @@ {} ] ], - "html/dom/usvstring-reflection.html": [ + "html/dom/usvstring-reflection.https.html": [ [ - "html/dom/usvstring-reflection.html", + "html/dom/usvstring-reflection.https.html", {} ] ], @@ -361772,6 +363424,12 @@ {} ] ], + "html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html": [ + [ + "html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html", + {} + ] + ], "html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-multiple-times.html": [ [ "html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-multiple-times.html", @@ -361796,6 +363454,12 @@ {} ] ], + "html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html": [ + [ + "html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html", + {} + ] + ], "html/semantics/interactive-elements/the-dialog-element/dialog-open.html": [ [ "html/semantics/interactive-elements/the-dialog-element/dialog-open.html", @@ -367795,6 +369459,30 @@ {} ] ], + "infrastructure/expected-fail/precondition-in-promise.html": [ + [ + "infrastructure/expected-fail/precondition-in-promise.html", + {} + ] + ], + "infrastructure/expected-fail/precondition-in-setup.html": [ + [ + "infrastructure/expected-fail/precondition-in-setup.html", + {} + ] + ], + "infrastructure/expected-fail/precondition-without-setup.html": [ + [ + "infrastructure/expected-fail/precondition-without-setup.html", + {} + ] + ], + "infrastructure/expected-fail/precondition.html": [ + [ + "infrastructure/expected-fail/precondition.html", + {} + ] + ], "infrastructure/expected-fail/timeout.html": [ [ "infrastructure/expected-fail/timeout.html", @@ -368152,6 +369840,14 @@ } ] ], + "infrastructure/testdriver/actions/multiTouchPoints.html": [ + [ + "infrastructure/testdriver/actions/multiTouchPoints.html", + { + "testdriver": true + } + ] + ], "infrastructure/testdriver/actions/pause.html": [ [ "infrastructure/testdriver/actions/pause.html", @@ -368200,6 +369896,14 @@ } ] ], + "infrastructure/testdriver/virtual_authenticator.html": [ + [ + "infrastructure/testdriver/virtual_authenticator.html", + { + "testdriver": true + } + ] + ], "input-device-capabilities/idlharness.window.js": [ [ "input-device-capabilities/idlharness.window.html", @@ -369040,6 +370744,18 @@ } ] ], + "layout-instability/rtl-distance.html": [ + [ + "layout-instability/rtl-distance.html", + {} + ] + ], + "layout-instability/simple-block-movement.html": [ + [ + "layout-instability/simple-block-movement.html", + {} + ] + ], "layout-instability/supported-layout-type.html": [ [ "layout-instability/supported-layout-type.html", @@ -369052,6 +370768,12 @@ {} ] ], + "layout-instability/transform.html": [ + [ + "layout-instability/transform.html", + {} + ] + ], "lifecycle/child-display-none.tentative.html": [ [ "lifecycle/child-display-none.tentative.html", @@ -385662,6 +387384,12 @@ } ] ], + "permissions/nfc-permission.html": [ + [ + "permissions/nfc-permission.html", + {} + ] + ], "permissions/permissions-query-feature-policy-attribute.https.sub.html": [ [ "permissions/permissions-query-feature-policy-attribute.https.sub.html", @@ -402419,9 +404147,9 @@ } ] ], - "screen_enumeration/requestDisplays.tentative.https.any.js": [ + "screen_enumeration/getScreens.tentative.https.any.js": [ [ - "screen_enumeration/requestDisplays.tentative.https.any.html", + "screen_enumeration/getScreens.tentative.https.any.html", { "script_metadata": [ [ @@ -402432,7 +404160,7 @@ } ], [ - "screen_enumeration/requestDisplays.tentative.https.any.serviceworker.html", + "screen_enumeration/getScreens.tentative.https.any.serviceworker.html", { "script_metadata": [ [ @@ -402443,7 +404171,7 @@ } ], [ - "screen_enumeration/requestDisplays.tentative.https.any.sharedworker.html", + "screen_enumeration/getScreens.tentative.https.any.sharedworker.html", { "script_metadata": [ [ @@ -402454,7 +404182,7 @@ } ], [ - "screen_enumeration/requestDisplays.tentative.https.any.worker.html", + "screen_enumeration/getScreens.tentative.https.any.worker.html", { "script_metadata": [ [ @@ -402524,6 +404252,22 @@ {} ] ], + "scroll-to-text-fragment/scroll-to-text-fragment-api.html": [ + [ + "scroll-to-text-fragment/scroll-to-text-fragment-api.html", + { + "testdriver": true + } + ] + ], + "scroll-to-text-fragment/scroll-to-text-fragment-same-doc.html": [ + [ + "scroll-to-text-fragment/scroll-to-text-fragment-same-doc.html", + { + "testdriver": true + } + ] + ], "scroll-to-text-fragment/scroll-to-text-fragment.html": [ [ "scroll-to-text-fragment/scroll-to-text-fragment.html", @@ -407592,6 +409336,64 @@ } ] ], + "streams/piping/throwing-options.any.js": [ + [ + "streams/piping/throwing-options.any.html", + { + "script_metadata": [ + [ + "global", + "worker,jsshell" + ] + ] + } + ], + [ + "streams/piping/throwing-options.any.js", + { + "jsshell": true, + "script_metadata": [ + [ + "global", + "worker,jsshell" + ] + ] + } + ], + [ + "streams/piping/throwing-options.any.serviceworker.html", + { + "script_metadata": [ + [ + "global", + "worker,jsshell" + ] + ] + } + ], + [ + "streams/piping/throwing-options.any.sharedworker.html", + { + "script_metadata": [ + [ + "global", + "worker,jsshell" + ] + ] + } + ], + [ + "streams/piping/throwing-options.any.worker.html", + { + "script_metadata": [ + [ + "global", + "worker,jsshell" + ] + ] + } + ] + ], "streams/piping/transform-streams.any.js": [ [ "streams/piping/transform-streams.any.html", @@ -412018,6 +413820,12 @@ {} ] ], + "svg/animations/short-simple-duration-and-fractional-repeatcount.html": [ + [ + "svg/animations/short-simple-duration-and-fractional-repeatcount.html", + {} + ] + ], "svg/animations/single-values-animation.html": [ [ "svg/animations/single-values-animation.html", @@ -412476,6 +414284,12 @@ {} ] ], + "svg/animations/switching-animated-target-to-unknown-element.html": [ + [ + "svg/animations/switching-animated-target-to-unknown-element.html", + {} + ] + ], "svg/animations/syncbase-remove-add-while-running.html": [ [ "svg/animations/syncbase-remove-add-while-running.html", @@ -414101,6 +415915,12 @@ } ] ], + "trusted-types/trusted-types-createHTMLDocument.tentative.html": [ + [ + "trusted-types/trusted-types-createHTMLDocument.tentative.html", + {} + ] + ], "trusted-types/trusted-types-eval-reporting-no-unsafe-eval.tentative.https.html": [ [ "trusted-types/trusted-types-eval-reporting-no-unsafe-eval.tentative.https.html", @@ -414119,6 +415939,12 @@ {} ] ], + "trusted-types/trusted-types-navigation.tentative.html": [ + [ + "trusted-types/trusted-types-navigation.tentative.html", + {} + ] + ], "trusted-types/trusted-types-report-only.tentative.https.html": [ [ "trusted-types/trusted-types-report-only.tentative.https.html", @@ -421295,6 +423121,23 @@ {} ] ], + "web-animations/idlharness.window.js": [ + [ + "web-animations/idlharness.window.html", + { + "script_metadata": [ + [ + "script", + "/resources/WebIDLParser.js" + ], + [ + "script", + "/resources/idlharness.js" + ] + ] + } + ] + ], "web-animations/interfaces/Animatable/animate-no-browsing-context.html": [ [ "web-animations/interfaces/Animatable/animate-no-browsing-context.html", @@ -421349,23 +423192,6 @@ {} ] ], - "web-animations/interfaces/Animation/idlharness.window.js": [ - [ - "web-animations/interfaces/Animation/idlharness.window.html", - { - "script_metadata": [ - [ - "script", - "/resources/WebIDLParser.js" - ], - [ - "script", - "/resources/idlharness.js" - ] - ] - } - ] - ], "web-animations/interfaces/Animation/oncancel.html": [ [ "web-animations/interfaces/Animation/oncancel.html", @@ -421438,23 +423264,6 @@ {} ] ], - "web-animations/interfaces/AnimationPlaybackEvent/idlharness.window.js": [ - [ - "web-animations/interfaces/AnimationPlaybackEvent/idlharness.window.html", - { - "script_metadata": [ - [ - "script", - "/resources/WebIDLParser.js" - ], - [ - "script", - "/resources/idlharness.js" - ] - ] - } - ] - ], "web-animations/interfaces/Document/timeline.html": [ [ "web-animations/interfaces/Document/timeline.html", @@ -421473,23 +423282,6 @@ {} ] ], - "web-animations/interfaces/DocumentTimeline/idlharness.window.js": [ - [ - "web-animations/interfaces/DocumentTimeline/idlharness.window.html", - { - "script_metadata": [ - [ - "script", - "/resources/WebIDLParser.js" - ], - [ - "script", - "/resources/idlharness.js" - ] - ] - } - ] - ], "web-animations/interfaces/DocumentTimeline/style-change-events.html": [ [ "web-animations/interfaces/DocumentTimeline/style-change-events.html", @@ -421520,23 +423312,6 @@ {} ] ], - "web-animations/interfaces/KeyframeEffect/idlharness.window.js": [ - [ - "web-animations/interfaces/KeyframeEffect/idlharness.window.html", - { - "script_metadata": [ - [ - "script", - "/resources/WebIDLParser.js" - ], - [ - "script", - "/resources/idlharness.js" - ] - ] - } - ] - ], "web-animations/interfaces/KeyframeEffect/iterationComposite.html": [ [ "web-animations/interfaces/KeyframeEffect/iterationComposite.html", @@ -424436,7 +426211,7 @@ {} ], [ - "webgpu/cts.html?q=cts:validation/vertex_input:", + "webgpu/cts.html?q=cts:validation/vertex_state:", {} ] ], @@ -456369,7 +458144,9 @@ "webdriver/tests/find_element_from_element/find.py": [ [ "webdriver/tests/find_element_from_element/find.py", - {} + { + "timeout": "long" + } ] ], "webdriver/tests/find_element_from_element/user_prompts.py": [ @@ -461566,7 +463343,7 @@ "support" ], "CONTRIBUTING.md": [ - "baa208e30f4eca8ca10c0e9cb6f89f2d0a726f2b", + "54d963d7adbd9d0ab22ef331d0f5d56240c82e90", "support" ], "FileAPI/BlobURL/support/file_test2.txt": [ @@ -462725,6 +464502,10 @@ "bf134dff18a3bf6278b0c659b32e01652e4b984b", "testharness" ], + "IndexedDB/idbindex_reverse_cursor.any.js": [ + "0b3c767fee17cb2739bd49a05237beaea5129e20", + "testharness" + ], "IndexedDB/idbkeyrange-includes.htm": [ "aea588051aeaab63c3855a778b22d1a6932d78ff", "testharness" @@ -463414,7 +465195,7 @@ "support" ], "README.md": [ - "320176c40ce4d4fc3bfdbd6a637c87e59143cb20", + "e3ee8551ff48a77652e2a4dc4fbc677e0812c5c5", "support" ], "WebCryptoAPI/META.yml": [ @@ -467557,10 +469338,6 @@ "9d2c9fd1d41dc299a59c4e374c954302db1ac502", "testharness" ], - "battery-status/battery-interface-idlharness.https.window.js": [ - "b33c82e426c7fe35c6c54a649d12685d3419d9e7", - "testharness" - ], "battery-status/battery-plugging-in-manual.https.html": [ "1445bd7e2600bcf531cb50bdaf2337152d6638ae", "manual" @@ -467577,6 +469354,10 @@ "3b515786dc75e72c8d821f4a6189722021803edb", "manual" ], + "battery-status/idlharness.https.window.js": [ + "b33c82e426c7fe35c6c54a649d12685d3419d9e7", + "testharness" + ], "battery-status/support-iframe.html": [ "d4e5b31f130067ddf1a28d7cf787e61e83d340c1", "support" @@ -468581,10 +470362,26 @@ "05b7a4a6f6fcb91b18f2a0e767010e81c9329fb8", "support" ], + "client-hints/accept-ch-feature-policy-navigation.https.html": [ + "dff960d28709ae6888f0da0b221e93c7b160e7e6", + "testharness" + ], + "client-hints/accept-ch-feature-policy-navigation.https.html.headers": [ + "f9595a794d9c93dca09f371f5797399a9204ed53", + "support" + ], "client-hints/accept-ch-lifetime.tentative.https.html": [ "f0b03ba0a8c311642af793a341653995fb73cbd9", "testharness" ], + "client-hints/accept-ch-no-feature-policy-navigation.https.html": [ + "5fb6c22f50873ce597e6d5ed04c1ebeef64a17c1", + "testharness" + ], + "client-hints/accept-ch-no-feature-policy-navigation.https.html.headers": [ + "7eb28a000bdde9634e618701e2ba512e4a9ebc49", + "support" + ], "client-hints/accept_ch.http.html": [ "50d77646f89aea13c212c6ecee4e7f32107007e9", "testharness" @@ -468674,7 +470471,7 @@ "support" ], "client-hints/resources/accept_ch_lifetime.html.headers": [ - "bd90f6eced08859fc8918757538c255be3b2a1db", + "370f9869226db4bdf8785c876b13d69b415e5abf", "support" ], "client-hints/resources/clear-site-data.html": [ @@ -468693,10 +470490,18 @@ "14d7d550fe28d49a63105ea966d3cf7cf59901b1", "support" ], + "client-hints/resources/expect-client-hints-headers-iframe.py": [ + "e72d77c47d9aae36c619e8e065e5685f7a9c166b", + "support" + ], "client-hints/resources/expect_client_hints_headers.html": [ "8e64b1989ab2046952f91920245423caebb2a706", "support" ], + "client-hints/resources/feature-policy-navigation.js": [ + "4487d9a447313f87dd2f230ce7d858b38008fae8", + "support" + ], "client-hints/resources/http_equiv_accept_ch_lifetime.html": [ "ab2ab9e60c8a4ee6d4fc088fb6c8d4d6d0daffd6", "support" @@ -468705,6 +470510,14 @@ "27140bf36e4dbd22b8f7190587f42a570c9d12bd", "support" ], + "client-hints/resources/iframe-accept-ch-lifetime.html": [ + "693e4f94dcc3363f0d15e7c7a18a7a598c72cf77", + "support" + ], + "client-hints/resources/iframe-accept-ch-lifetime.html.headers": [ + "8e6dc72dda620dc0508d02009e6cc58631a00e7b", + "support" + ], "client-hints/resources/sec-ch-ua.py": [ "a14a27dadf9e333784a5c636c821634b387e475f", "support" @@ -468894,7 +470707,7 @@ "support" ], "common/security-features/resources/common.sub.js": [ - "c974e83b9604d5770ffb849a1b77f963d3f7955b", + "b43417b417c189d1e1b3444baa286456df979bb5", "support" ], "common/security-features/resources/common.sub.js.headers": [ @@ -469117,6 +470930,14 @@ "06e728342cdb63a72b420423b40b6e32ae3e2162", "reftest" ], + "compat/webkit-box-clamp-visibility-change-ref.html": [ + "20ec3bfaf8bf92f426d6dc7b6dc56a59dd568b1d", + "support" + ], + "compat/webkit-box-clamp-visibility-change.html": [ + "115fa4366523dd64adf5bd14de661eb8ac8f9214", + "reftest" + ], "compat/webkit-box-fieldset-ref.html": [ "b5d7176150d0403a87dfd2b9e59af219ddb6b9bb", "support" @@ -486862,7 +488683,7 @@ "testharness" ], "contacts/contacts-select.https.window.js": [ - "617dee8b7f85a77c3d412d87f1c7dcada176749f", + "c93d711ed5205fffb96298423d853bf4171ff8d3", "testharness" ], "contacts/resources/helpers.js": [ @@ -486882,7 +488703,7 @@ "support" ], "content-security-policy/README.html": [ - "98fd5c4bf789b99b959bab3fbdadb1ad408db5a0", + "8986d736a0e7d68b0c0b19d8555238d00f9248f3", "support" ], "content-security-policy/base-uri/base-uri-allow.sub.html": [ @@ -487433,6 +489254,18 @@ "338bea13b84a2f5c4d95b778637409e2bf8d3263", "support" ], + "content-security-policy/frame-src/frame-src-same-document-meta.html": [ + "f3750b1e7d83fb50089a1b643045b89df223dff4", + "testharness" + ], + "content-security-policy/frame-src/frame-src-same-document.html": [ + "398d0223bcb7cf3fad9086c424510bbfcdcdc818", + "testharness" + ], + "content-security-policy/frame-src/frame-src-same-document.html.headers": [ + "6502444407f59e6ea08da63c8dcdb22978e5ae83", + "support" + ], "content-security-policy/frame-src/frame-src-self-unique-origin.html": [ "947b11e063de776b4d9afffb91e1667460d9099f", "testharness" @@ -487490,11 +489323,11 @@ "testharness" ], "content-security-policy/generic/generic-0_1-script-src.html": [ - "35033c3899f78e1f176f34977e4e069d935ff1b3", + "b374b8b88e99c2275881d71c518358fff41feb60", "testharness" ], - "content-security-policy/generic/generic-0_10.html": [ - "5dfd9d83c7ff3060fa30beb8e3cff1845ab1d7ca", + "content-security-policy/generic/generic-0_10.sub.html": [ + "d4f52d8b8d1598779faacacec9825e0a9852abdb", "testharness" ], "content-security-policy/generic/generic-0_10_1.sub.html": [ @@ -553733,10 +555566,6 @@ "67bccc350e00f815b8bcd46f3a85a0d8916d378f", "reftest" ], - "css/css-backgrounds/background-attachment-local/reftest.list": [ - "b1d23371e3e5ef66de8d2bf3ef78fa4d3ce83803", - "support" - ], "css/css-backgrounds/background-border-collapsed-gradient.html": [ "73b097cf9a84733126237ea9ef0534b4850536bd", "reftest" @@ -554521,10 +556350,6 @@ "a794e46622b2c2d2405b6d324f1aa308c4e96157", "reftest" ], - "css/css-backgrounds/background-size/vector/empty/reftest.list": [ - "8cacdc1e469b240d7e24a5c2d0254f03e357cd5d", - "support" - ], "css/css-backgrounds/background-size/vector/reference/background-size-vector-001-ref.html": [ "9f0c4de5629d844ee246f4f84288e58da8e1d7c8", "support" @@ -554685,10 +556510,6 @@ "870bc1bf2c91f32a0c091ac39984cff6cf7b2d44", "support" ], - "css/css-backgrounds/background-size/vector/reftest.list": [ - "6b9fe45f97ea56b26468abc56d1c1543bb404a47", - "support" - ], "css/css-backgrounds/background-size/vector/support/diagonal-scaled-fixed.svg": [ "bf0dcfb59b5e215546de9aae8c0ba47229804f19", "support" @@ -557946,7 +559767,7 @@ "testharness" ], "css/css-color/parsing/color-valid.html": [ - "48e97561f40c370acd88bf41220b5482eedf245e", + "62df82623a4e958da46dbe91b1cd64e95a57c5af", "testharness" ], "css/css-color/parsing/opacity-computed.html": [ @@ -557961,6 +559782,10 @@ "daa8d8647f17ec48a1c648dfaea48bc8373c20ea", "testharness" ], + "css/css-color/parsing/system-color-valid.html": [ + "9d93bd4a21de259eb991e0dc90db6581e9b7c8c3", + "testharness" + ], "css/css-color/rebeccapurple-ref.html": [ "8c15364f38e53cc1651f2f6c115c7b2fca3f4ba9", "support" @@ -565253,6 +567078,18 @@ "1318933952c99e9bb142f74110cbc388e6dda6c4", "reftest" ], + "css/css-flexbox/percentage-heights-008.html": [ + "732f94199b5129e8d7a46dba0a6195d996678683", + "reftest" + ], + "css/css-flexbox/percentage-heights-009.html": [ + "b3de59562bc1ff6b78d9c7b29a5836d47bf8a81b", + "reftest" + ], + "css/css-flexbox/percentage-padding-001.html": [ + "8bba5d60f5cae1b93df70c1973a473f163020a51", + "testharness" + ], "css/css-flexbox/percentage-size-subitems-001.html": [ "70f3953052a3a770c6cd15ee169607a00fc452b0", "reftest" @@ -565441,10 +567278,6 @@ "369de990ff2190ea0e4592d4dfc354a8a8fcae16", "support" ], - "css/css-flexbox/reference/ttwf-reftest-flex-order-ref.html": [ - "6cddecece8649a168f915e502eae4d00204a74fb", - "support" - ], "css/css-flexbox/reference/ttwf-reftest-flex-wrap-ref.html": [ "bb3e2b947af42106dec6974664075afb9e8cb7d3", "support" @@ -565729,10 +567562,6 @@ "275ecd0b6091a1c2d267b5104552c9038b76b681", "reftest" ], - "css/css-flexbox/ttwf-reftest-flex-order.html": [ - "2edac404b6d1688c1cbe7cc497e82d5e87a918fd", - "reftest" - ], "css/css-flexbox/ttwf-reftest-flex-wrap-reverse.html": [ "f2aefa29e8b5e4461e6a8ae9eb76bc8c1c771698", "reftest" @@ -566985,6 +568814,10 @@ "8caf2f3d6000a28c548c84a6fbe2d4c8de2ee5b7", "testharness" ], + "css/css-fonts/generic-family-keywords-001.html": [ + "aa9fb5a6a03bb330d35669f903a1ee7c0f138e18", + "testharness" + ], "css/css-fonts/idlharness.html": [ "ecc601bcf6a97a1722e3901d731f9f424d0a79e1", "testharness" @@ -574377,6 +576210,26 @@ "fb3f7007ee19189a09de9c1f786176c317b7ee14", "testharness" ], + "css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html": [ + "9c9e944df04b58a11f0b3096d50b94ddc4f326db", + "testharness" + ], + "css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html": [ + "f7698e45df39855d53c2c205cd034fd04524568a", + "testharness" + ], + "css/css-grid/alignment/grid-align-justify-margin-border-padding.html": [ + "9cdce092cc302ccbb3d4ed7633c19696b481b241", + "testharness" + ], + "css/css-grid/alignment/grid-align-justify-overflow.html": [ + "f0d94198aff6dddb7acab1e7965e1ca9fc84c4a3", + "testharness" + ], + "css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html": [ + "c8fd340006038b1bd7addd84e2bd013da389bbed", + "testharness" + ], "css/css-grid/alignment/grid-align-justify-stretch.html": [ "9feeed3e0ef2a17b68bce2b7d71cbdb14a06ee2d", "testharness" @@ -578501,6 +580354,10 @@ "df54e8fb0df8146f896c2abd136d63d930d92d1c", "testharness" ], + "css/css-lists/list-inside-contain.html": [ + "70e25b8644e5e7c7398e734611e7dd46a4db8f2b", + "testharness" + ], "css/css-lists/list-item-definition-ref.html": [ "2d49bc4cb972803c45f701667d68d13028c4abc2", "support" @@ -578629,6 +580486,14 @@ "9627ce936ae570325b430a1ac673cd66ae7d4252", "reftest" ], + "css/css-lists/ol-change-display-type-ref.html": [ + "a10bc17899f9cfaa938d04d198598c4fc82fe3ca", + "support" + ], + "css/css-lists/ol-change-display-type.html": [ + "e711cfef5ddfd0d85914ce166f774a2ec1480f05", + "reftest" + ], "css/css-lists/parsing/content-invalid.html": [ "54fe99c0f02442c30256692aae83a3cc3a685a06", "testharness" @@ -582142,7 +584007,7 @@ "reftest" ], "css/css-overflow/dynamic-visible-to-clip-001.html": [ - "08114d73b8bf6364d2ad647236fe5388f9eef1b2", + "b97701bfb299b5b9fc06b774f489b2e2285b2c13", "reftest" ], "css/css-overflow/float-with-relpos-and-transform.html": [ @@ -584389,6 +586254,14 @@ "6b797107df80156b511b9dc58c5ee40d6114cfc4", "reftest" ], + "css/css-pseudo/first-line-with-before-after-ref.html": [ + "fcee7995052717c0509c58a76fa1f420434ceb43", + "support" + ], + "css/css-pseudo/first-line-with-before-after.html": [ + "f91a22a4a7d65366dbd7dda3934c82c9b5776977", + "reftest" + ], "css/css-pseudo/first-line-with-out-of-flow-ref.html": [ "7193bf25eb88c5443457480f7ce27782acd9473a", "support" @@ -587162,7 +589035,7 @@ "support" ], "css/css-scroll-anchoring/README.md": [ - "8ce2a95c620b5a25c31a4d8d4bca251904d0fa32", + "78f1387bdf47e987da47861a8f0be5ddcd4fba6a", "support" ], "css/css-scroll-anchoring/abspos-containing-block-outside-scroller.html": [ @@ -589285,6 +591158,370 @@ "bce0a18be6f66e57cad2e2e90694a6f53dab71c7", "reftest" ], + "css/css-sizing/intrinsic-size/intrinsic-size-001-ref.html": [ + "d4f0281ae48cd9ab43403fcbfc0c50d8c96e1381", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-001.html": [ + "4d17602a95f91af86ef16825203e903d841e68cc", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-002-ref.html": [ + "ab847fc36e56155a0b3638a24f9ca90077c76b23", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-002.html": [ + "55f209494125e08900b60bc566b5c85d0d123d54", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-003-ref.html": [ + "6a2d05149894c0e7ecfc5471bab6055bc51f072d", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-003.html": [ + "3dd41ba1d2c001bcaaec7ea8338bcb3cce41d52e", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-004-ref.html": [ + "6e710943de9957bcda6ac83985615e35f2154d1e", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-004.html": [ + "9cce7ae25fc8f343e9a693e1ee6ef92847e71ece", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-005-ref.html": [ + "950f7190cac250124ba5cda419a71126e157d2e0", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-005.html": [ + "92b777d22e054bef9d675f00b7d67845f17081df", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-006-ref.html": [ + "d545093e2db58163637e466b233cd15da40d0f7b", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-006.html": [ + "82c6e8eef8536cb95f291828107a53a97a1d1428", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-007-ref.html": [ + "6b3f63685ac07bb0e5f95570744a7b87c56158f6", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-007.html": [ + "85fcae6cd91ba8a2f9404497992ba5b7d6411ad9", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-008-ref.html": [ + "5c6186fd48cf0dfd2ee83fd6ed2819fa6dbb0989", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-008.html": [ + "f3b344f6b0a79464090434127309f724ab4ba64e", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-009-ref.html": [ + "223e0c8a33a6832e37dc4b78de4c27b5a3abcc11", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-009.html": [ + "06a02fe78bd08602c14f890ae4bb374076807789", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-010-ref.html": [ + "eaaa0977f139938e2657814fd78d543f2bc5e0db", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-010.html": [ + "eea76ffb07325ac9268581f9b2db348f8301e4df", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-011-ref.html": [ + "29d1f4e2d1a108dd53c5905e45d9c7923ca9a2ba", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-011.html": [ + "c7888f906f8b7ec92648a7cb5b4b18df2bbeaad5", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-012-ref.html": [ + "ed9857aa2565762f514fe5fb73173b6a5da6494f", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-012.html": [ + "889b07ace922271e335054992d6731264a291c9f", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-013-ref.html": [ + "9f8334c03d508bc1d91d0163674a28c89c77e034", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-013.html": [ + "1082100012fd890d466cbea1aafe8c1101ebc945", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-014-ref.html": [ + "66c10824893089e0c78dd5f6f68e167eac7438b6", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-014.html": [ + "4dd45a2da409449d225c6768d2e19564f0b567d6", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-015-ref.html": [ + "ae65a3b5ca547b19e8bdc7b38099c8206edfa6c4", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-015.html": [ + "5ca5e49992e1d537499bc8ea314229bdfdc5bfc7", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-016-ref.html": [ + "f80510f630624b7bce27483fe9847cd182114fe0", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-016.html": [ + "ce6ac5c56e4a101fda21a46dc37d81ebee4b1dd5", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-017-ref.html": [ + "553451a7075559dad575be17e2ce08b62cb67832", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-017.html": [ + "5e2122f34ecf8e74e54c8b101772de0f9be0cdb6", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-018-ref.html": [ + "17261caa8af2b65f80ed331fb38bb5c2e37d5b10", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-018.html": [ + "68931834d630410e1ca9906db8a97317b26ee062", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-019-ref.html": [ + "8e55d7b02f9d1d7352ebdeeca1ee48a1009b49f4", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-019.html": [ + "cae8e0739fe823e82369fa5661a7f70b4dd30e0f", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-020-ref.html": [ + "1ee5ba8376ddc7e6bb74d765755fbe89b9e33b6b", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-020.html": [ + "a7286ce1054cae30cb8023cae074d9be8781fa33", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-021-ref.html": [ + "35db43fcf44a3668ae19f0d97ea7a872223fcc9c", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-021.html": [ + "04591924f659615dc22851102f5d59b4d83e5e18", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-022-ref.html": [ + "b0df199283470db4a7ecba4011a3429e8065bb7e", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-022.html": [ + "3593b9cce38f158bf96164ba1e8110c09eedbc01", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-023-ref.html": [ + "800e4ae706447004c3c8ff5bf8a530216cba1dea", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-023.html": [ + "c64ef66a03fd18b57e34ade82bd538e33578f129", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-024-ref.html": [ + "02ec85a0084910bb09de2e7871b7ddd7d8a68265", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-024.html": [ + "b11317d96b015282e9bcc043efcdbba799851bc6", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-025-ref.html": [ + "60d5cc9cd9aadb99620773ea11eaf9e2081b771b", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-025.html": [ + "ab9c56fc528ed848a200a890e0df3cc018618529", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-026-ref.html": [ + "2e456b43422c014a10c62fe93c776c43ad59581a", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-026.html": [ + "100f542b783794dbf5c07ac146f1e0ee5f481db7", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001-ref.html": [ + "99e86d0c38fd2b76745b6cbd05224dc5aa0537d6", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001.html": [ + "9c2dac07da2b012a4e927916cd18f980a15d9e68", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002-ref.html": [ + "70a245469b702bb5b2348ca7698c71ac1ca99671", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002.html": [ + "5b3902455bdccd8d16f8e9795e3821f5ab73799a", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003-ref.html": [ + "246a5bad51ed6155177a7f1fb11705c4ca7dd944", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003.html": [ + "07ec0326787f96e08654f9643e7032309c62bfaa", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001-ref.html": [ + "39c6abdcf8eba74a04c1255388ca551cf8988ed5", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001.html": [ + "df662e5c7f17342a0facdf2c614689833b4a424b", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002-ref.html": [ + "535915a7a7bed54142f731a21eb20a97379650a1", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002.html": [ + "66d008ce6cef7cfe93d097a362e6cfba57b57a7a", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003-ref.html": [ + "eb6394fe28464f74106c99830d67af1efa58aba4", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003.html": [ + "90e4f53bf64fe4d9eb9c19036abdccea98a582bf", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004-ref.html": [ + "d5e7c9ff9bb9c4f155955065161e14f1fcbc954e", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004.html": [ + "dfeed45d73b91e620a8d3aefe8461af2c21c3e86", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005-ref.html": [ + "c23984f5f1a4d07c2121088987718781d00fc85c", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005.html": [ + "baf9bef3aca6ae9d9c6026d993dda9e4584e78e3", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006-ref.html": [ + "9b9e25d3c8da8693f82bfa7d49e87a320bb3f141", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006.html": [ + "41ef1fddc19d6ba3ec3ee6c6adfce4d51d078929", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007-ref.html": [ + "6894b4643ad616d4acf3a631c991718c76cdae27", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007.html": [ + "df2c57b5d8a7f884a31934a15cc1e1037d3a6c8e", + "reftest" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008-ref.html": [ + "5cce190275940e70c3e3451a47ed9432025dab46", + "support" + ], + "css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008.html": [ + "45b8fbdd24484d6d2637d440edad3dc3e959cadf", + "reftest" + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-computed.html": [ + "e9a073ca2aacd9dd9fce6a1b0d33493498b33bac", + "testharness" + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-invalid.html": [ + "1b6cba20f88d78f8e29d385676a261d6d78c8e67", + "testharness" + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-valid.html": [ + "b34c73b230f50d00371811ec063180bfc249fad7", + "testharness" + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-height-computed.html": [ + "6f95274c637a54bd88b1bf5e732b8a6aaa291e32", + "testharness" + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-height-invalid.html": [ + "1f801124a2b5f2fe3cf96c76b9b64fe33d9f50da", + "testharness" + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-height-valid.html": [ + "e461476211879b903e451e662ad393162a94afdd", + "testharness" + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-computed.html": [ + "c53a77e5631068101f4d58a9a67d6db8b9c8c2a3", + "testharness" + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-invalid.html": [ + "6ad224d11d3831ba227fc41ab90bf0c3b748be46", + "testharness" + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-valid.html": [ + "ad5aef95dca952785a8263a7b6447ef4e4b83e03", + "testharness" + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-size-computed.html": [ + "29be33d4a3d9a33ec30cfe150f9c9f80d5fd796d", + "testharness" + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-size-invalid.html": [ + "b4cb2dbffd2004762d028f092e82e5f9297655ec", + "testharness" + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-size-sets-computed-dimensions.html": [ + "e70c3179223eaf220edd3993069848b8e0294dea", + "testharness" + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-size-valid.html": [ + "7ab13c7d7986151f22e01711f34a9184effca082", + "testharness" + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-width-computed.html": [ + "08602e5347f3de0827446875b15a29c8b6789b27", + "testharness" + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-width-invalid.html": [ + "b89f6567ae27595ac752ece8bfe66784d16146de", + "testharness" + ], + "css/css-sizing/intrinsic-size/parsing/intrinsic-width-valid.html": [ + "e2d23eabe5da207ce82519e9f57adcbd4cf5d70c", + "testharness" + ], + "css/css-sizing/intrinsic-size/resources/dice.png": [ + "c82d01517cd056fe1b63266b00fb9a96ce6251a2", + "support" + ], "css/css-sizing/min-max-content-orthogonal-flow-crash-001.html": [ "d2617f8aa2d1c966e394abb1d1617c012ea4648e", "testharness" @@ -594073,6 +596310,110 @@ "5f80f52c6ea0c5c9c7577896b9bc5d309093c90e", "reftest" ], + "css/css-text/line-break/line-break-anywhere-017.html": [ + "a2521cbcbbe1c16e0d71d22d33b90429ae8e1ed7", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-001.html": [ + "a4158dc990798d7868332eeb245137bac74e8b87", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-002.html": [ + "2fbb53dca21179e679a1d8523ac75e8b712dbb37", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-003.html": [ + "3002dc106487187da90af9bbd39e84d7d5cfe535", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-004.html": [ + "e6e1b39787d50178bb152e6459e624c84df97e99", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-005.html": [ + "2f64d8704bac8d3ad85bad41c05b5b490a3b34de", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-006.html": [ + "c804e37126266852909a3bf2054a4446105496be", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-007.html": [ + "d9b266db9f95db5eaa45c12709125155faa46f41", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-008.html": [ + "aebd31ea6851cc3fcef469d50bf320d1914395c4", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-and-white-space-009.html": [ + "f536c907a4004ca7ff7c7fcec9e99f7c5a5cd25c", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html": [ + "d18df4b38c65c3a46ba0c68e7f57a6512a2eb86a", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html": [ + "1255aa14d38589dfaaa46446e3e77409910abd55", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html": [ + "7fe230e890dbbb206107fc64631439c8dde26ae4", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html": [ + "13706d5d9dc4bd44c40bd416051997cb43f3a3d7", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html": [ + "175228d9c52ac7eb08958f22bc23f2f0aea290ce", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html": [ + "9bb557e7d3b01e0af7b14ebd67726eb9666f79a7", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html": [ + "7f90bfd43049337d66054804dd351f8877d73973", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html": [ + "40826540c9f5de0cb135f111812cda54f579e02e", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html": [ + "6d6ca3f743a7a68db65c6df70c04726c1e1d519d", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html": [ + "5f152c66294e4ea8bebbc229288f7ed43d80d59d", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html": [ + "2196d983f9f9fa140e2d7b71689ecf62417609ae", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html": [ + "110d9cafc4c3aa98b07f9fd5e4ffecde6467ffbd", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html": [ + "2cda76c5cd324ffeb0573b9c87c579f19fc4a641", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html": [ + "d79efb7aee83eca68b72f33c0a6d7b00e90eaa1f", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html": [ + "5eecd03da25ec0cfa2f2f22b1adb658d4c83e55c", + "reftest" + ], + "css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html": [ + "d4ab337a7b5d5a77063bc9ed024336f061346229", + "reftest" + ], "css/css-text/line-break/line-break-loose-011.xht": [ "604466a1f4723f5da0e74682643b4fcd746852d0", "reftest" @@ -594449,6 +596790,10 @@ "777b5ab92e985945c5eb3a8a5c0467b828f3f2d6", "reftest" ], + "css/css-text/line-breaking/line-breaking-atomic-nowrap-001.html": [ + "1e3b9edb1dc1331660c1300d2c5a8fd103b6b115", + "testharness" + ], "css/css-text/line-breaking/line-breaking-ic-001.html": [ "6cfe6f86a452c19eae31a076710f02dfc8c4ec4e", "reftest" @@ -594601,10 +596946,46 @@ "d125a0b5c85c15c94f4765c11c5b6ef276cca7e2", "reftest" ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html": [ + "ac90149ff30d1d8252171460ab1f3b8800c2d58a", + "reftest" + ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html": [ + "a5e10a84ebd3dad65e5cecfbf55eea0e70cdc108", + "reftest" + ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html": [ + "ddb95629999d3599d972de5cf19afaa9378d6d06", + "reftest" + ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html": [ + "90f2ad3337305bc1f59194a582373851577eadaa", + "reftest" + ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html": [ + "0b4b75bc1c5d3daf6ecedc146c2f693de7dc8b17", + "reftest" + ], "css/css-text/overflow-wrap/overflow-wrap-anywhere-fit-content-001.html": [ "8655b1f087df4534f59ea7c6348fe3272f84ccbf", "reftest" ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html": [ + "5a93c873445e91d59a857220056ba18234926850", + "reftest" + ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html": [ + "38dc19631d3794e011f046acb225471aec2363dd", + "reftest" + ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html": [ + "511294901d914cf8f836ea8b50662544fb72dbf4", + "reftest" + ], + "css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html": [ + "e498e1eff16a40ce96279173b42c3827b566ba5c", + "reftest" + ], "css/css-text/overflow-wrap/overflow-wrap-anywhere-span-001.html": [ "c4a0e10fa42d6389f1bb02a945137a4f40fa03db", "reftest" @@ -594645,6 +597026,14 @@ "8a0fb9959d697f9d4188a0fd49973d90d8143ab3", "reftest" ], + "css/css-text/overflow-wrap/overflow-wrap-break-word-009.html": [ + "fbbcf2233c5a2666bcccb3941bd76b6383410530", + "reftest" + ], + "css/css-text/overflow-wrap/overflow-wrap-break-word-010.html": [ + "da45dea2530dd19a2cecf3dc8ceb160d2d9a9d34", + "reftest" + ], "css/css-text/overflow-wrap/overflow-wrap-break-word-fit-content-001.html": [ "2c83c46aa50f6d51efbb4d05635d86f7c166042d", "reftest" @@ -594682,7 +597071,7 @@ "reftest" ], "css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html": [ - "608d4853a2425d9b4157bbe331fd78763985cecd", + "6975e816b469a898d3f3617f49ad91badfdc0859", "reftest" ], "css/css-text/overflow-wrap/overflow-wrap-min-content-size-002.html": [ @@ -594694,7 +597083,23 @@ "reftest" ], "css/css-text/overflow-wrap/overflow-wrap-min-content-size-004.html": [ - "7ee2b344f7fdee15b05e590ff93a23c04cf63ffc", + "16161ece69dc85e0caffe370889e46a3071ebe08", + "reftest" + ], + "css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html": [ + "c8c2a1a43353f9f572ce0a586a2d9c81f51515d1", + "reftest" + ], + "css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html": [ + "dbbd39301bd741cb77f49deebc6de0ea324e8ddb", + "reftest" + ], + "css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html": [ + "7296b8d3769a6ea83726d41efdd0725c230e9d17", + "reftest" + ], + "css/css-text/overflow-wrap/overflow-wrap-min-content-size-008.html": [ + "5c2b3958bd79a235d2c0236804de8df195c87776", "reftest" ], "css/css-text/overflow-wrap/overflow-wrap-normal-keep-all-001.html": [ @@ -594734,7 +597139,7 @@ "support" ], "css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html": [ - "99d964777c663fb8ca37be00c162ddfbb82951c9", + "ef5c2e88cefbb99163b8144098d38eb5fb0d06bf", "support" ], "css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-002-ref.html": [ @@ -594746,7 +597151,7 @@ "support" ], "css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-004-ref.html": [ - "c37f3f107841a33afd891a7f39433146ab4704cc", + "93e22ba71ed08199fb01858e8db9950c41d4b35b", "support" ], "css/css-text/overflow-wrap/reference/overflow-wrap-normal-keep-all-001-ref.html": [ @@ -596982,7 +599387,7 @@ "reftest" ], "css/css-text/white-space/break-spaces-before-first-char-011.html": [ - "bc6b2965cb0fdc554082ae0cd2453c602fd805de", + "cf1babeb5e93f601a416994cce060d46a3894f07", "reftest" ], "css/css-text/white-space/break-spaces-before-first-char-012.html": [ @@ -596993,6 +599398,26 @@ "828058f53dd811d4dbea0b7e0d56ab5a940725c6", "reftest" ], + "css/css-text/white-space/break-spaces-before-first-char-014.html": [ + "6eb32b57f3f3298d9b66056c7c6842c88851b152", + "reftest" + ], + "css/css-text/white-space/break-spaces-before-first-char-015.html": [ + "785c2f2a4e9ac98bbb53124eb5a0a45e5bf1648e", + "reftest" + ], + "css/css-text/white-space/break-spaces-before-first-char-016.html": [ + "bec4520b113b26a10f1ff29b3f515487f8d565e0", + "reftest" + ], + "css/css-text/white-space/break-spaces-before-first-char-017.html": [ + "9cb8fdbebcbec4687a1f523b1ffcd4a137338bff", + "reftest" + ], + "css/css-text/white-space/break-spaces-before-first-char-018.html": [ + "828058f53dd811d4dbea0b7e0d56ab5a940725c6", + "reftest" + ], "css/css-text/white-space/break-spaces-tab-001.html": [ "4b01a60395a6c1133c7af8af957dd70859db4823", "reftest" @@ -597017,6 +599442,46 @@ "34df3bfc1bd2f20abbe29b79124a95ce28a4cfaf", "reftest" ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-001.html": [ + "6912bafee9ebd55cfeddd878f9145048b235566b", + "reftest" + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-002.html": [ + "caef57ec60f8fa7c1874825272290d8236af10dd", + "reftest" + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-003.html": [ + "9f91d085d8ad295b7308fe65822ad4114273fbf7", + "reftest" + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-004.html": [ + "911cff021ad2df5ada257d3aa0d2a53aa131caac", + "reftest" + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-005.html": [ + "d5c836539d2636e3b4e916d2b66eca135a659321", + "reftest" + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-006.html": [ + "0e4b6a80f14eb9c6ed73d7d97d040ba0163dbe93", + "reftest" + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-007.html": [ + "bf51e4bc2fb4b3d17635df65716a3fe2e504bda2", + "reftest" + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-008.html": [ + "9826449ecc639cd0c6f388159e0a118ff1f2e0ca", + "reftest" + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-009.html": [ + "3b6e76433091aae25af57b389b207d75d51dae73", + "reftest" + ], + "css/css-text/white-space/break-spaces-with-overflow-wrap-010.html": [ + "d479c5e56757fd32fcfff2066e326a8bfc24860a", + "reftest" + ], "css/css-text/white-space/control-chars-000.html": [ "b038fe9a90d3b8b9cb3bde7fd46396c7121688c9", "reftest" @@ -597329,6 +599794,14 @@ "e2faf3671c2061c30028be4c9608ba1495b79072", "reftest" ], + "css/css-text/white-space/pre-wrap-009.html": [ + "0912a2d3a150cea47ace39cb815af14ca811bb60", + "reftest" + ], + "css/css-text/white-space/pre-wrap-010.html": [ + "71d169c65c011fe28e1b2fcdb3c3bd9dd35dad32", + "reftest" + ], "css/css-text/white-space/pre-wrap-011.html": [ "9945e3ae2dda846c8691a3676d3a83aacd08bb0c", "reftest" @@ -598269,6 +600742,14 @@ "48f60a346115a576cf63c5222dd68aeeda91fb13", "reftest" ], + "css/css-text/word-break/word-break-break-all-029.html": [ + "3e0a1e14e6952d756a64e7b16a8b7b0af84dd2ff", + "reftest" + ], + "css/css-text/word-break/word-break-break-all-030.html": [ + "e6a8a0076d4bd80b7eca2a1cf7c568ccf38ac332", + "reftest" + ], "css/css-text/word-break/word-break-break-all-inline-001.html": [ "a0c7c4958bd94be3ae199e6e18f1dace4cc2d28b", "reftest" @@ -598301,6 +600782,14 @@ "930ae436fe4f1c91b60e9a84c0925e679b6ddfc0", "reftest" ], + "css/css-text/word-break/word-break-break-all-inline-009.html": [ + "e1914f5f4db6d5bfbc5c928562eb1ab790a934b8", + "reftest" + ], + "css/css-text/word-break/word-break-break-all-inline-010.html": [ + "3c2df3cea296b32b4bb4972ed50e28e9d3f5427b", + "reftest" + ], "css/css-text/word-break/word-break-break-word-crash-001.html": [ "894a6f3aa0ce257a92926158b75a29986a98e079", "testharness" @@ -598346,7 +600835,7 @@ "reftest" ], "css/css-text/word-break/word-break-min-content-001.html": [ - "20b610180b359bfdf7da5720d2e962af2ba6343f", + "a310e304529dd83f1d356cab6b6664e7f07be97d", "reftest" ], "css/css-text/word-break/word-break-min-content-002.html": [ @@ -598358,7 +600847,7 @@ "reftest" ], "css/css-text/word-break/word-break-min-content-004.html": [ - "efa61b9cd8af65bdb354ef7b07e7008f8a3b6511", + "89b30027c2e9b127ee65e5466ae0d7872f0fa451", "reftest" ], "css/css-text/word-break/word-break-min-content-005.html": [ @@ -616969,6 +619458,10 @@ "804885a74a17f23e18f4c073099c26b2e9f80532", "testharness" ], + "css/cssom/serialize-media-rule.html": [ + "94b37dc1a95f12dd36e59bae82ab9e2c42e9ed1a", + "testharness" + ], "css/cssom/serialize-namespaced-type-selectors.html": [ "600008c7a9eb7351b15ede25b870525882b32a0c", "testharness" @@ -630602,7 +633095,7 @@ "reftest" ], "custom-elements/CustomElementRegistry.html": [ - "368044df3c9373b4ea966bd1b7e9080581b91293", + "c288e8232703afbe00d355ef5b40bdc8d1fa0ac2", "testharness" ], "custom-elements/Document-createElement-svg.svg": [ @@ -631062,7 +633555,7 @@ "support" ], "docs/admin/index.md": [ - "7eca6e3a9a92cbbfb8b23d3c1ee88e43d1af69ad", + "56a08eb7f07aefd2b9d2f9de0130ba584b960df8", "support" ], "docs/assets/_reftest_graph_example.dot": [ @@ -631125,12 +633618,20 @@ "0010a57173121330bae8df3c3f851db10cffcb67", "support" ], + "docs/assets/web-platform.png": [ + "2b14c5ef60dd064b8751151f5b778019fe2431bf", + "support" + ], "docs/conf.py": [ "e425667ce888dabed639ff29a7e051d3aedcdd0f", "support" ], "docs/index.md": [ - "b24abae007fe9a84e523f30fc2018a07a447582a", + "d1a527e1a754bdb846c11846e90b23c6e7771a92", + "support" + ], + "docs/intro-video-transcript.md": [ + "b43ebf728fc2340420827be04e17b884015daf1f", "support" ], "docs/make.bat": [ @@ -631146,7 +633647,7 @@ "support" ], "docs/reviewing-tests/email.md": [ - "fbfa65d75cccca5b913da393788cd94faf637f6e", + "55bbf4436726163432837909db30bf57d570b865", "support" ], "docs/reviewing-tests/git.md": [ @@ -631290,7 +633791,7 @@ "support" ], "docs/writing-tests/test-templates.md": [ - "858758b4c8e022afe53d76184a65a44da8106a1b", + "e8f4bfe77f4c7d142345e02792f2128d25c40f54", "support" ], "docs/writing-tests/testdriver-extension-tutorial.md": [ @@ -631302,7 +633803,7 @@ "support" ], "docs/writing-tests/testharness-api.md": [ - "5883308cc66957b1b7215825fd0ea6c7aa1ca74a", + "1bdf06613f993bd7ad74a8385c682150f4ea121c", "support" ], "docs/writing-tests/testharness-tutorial.md": [ @@ -631310,7 +633811,7 @@ "support" ], "docs/writing-tests/testharness.md": [ - "acab70a1f1630cce6a270d8a966d166c90c23c22", + "e04a344d098f994cca585f9759070cc3a672494c", "support" ], "docs/writing-tests/tools.md": [ @@ -632594,7 +635095,7 @@ "testharness" ], "dom/nodes/aria-element-reflection.tentative.html": [ - "848828810f160d5ac01f11bf41b27230b9738800", + "7c8e690a28bbcaa1391878300f143aa1e584fe5e", "testharness" ], "dom/nodes/attributes.html": [ @@ -637777,8 +640278,12 @@ "68ff2c5bcf2d85e6930196b8b1a3a2005ea54094", "testharness" ], + "fetch/api/request/destination/fetch-destination-frame.https.html": [ + "f3f9f7856d5d908fe2ed45b0cbbd3981cdab8dad", + "testharness" + ], "fetch/api/request/destination/fetch-destination-iframe.https.html": [ - "cb1e9d87cd537fce1a21f2d839d105739b1df2d2", + "1aa5a5613b1c6e601801dea3b4b4457ca592e2ca", "testharness" ], "fetch/api/request/destination/fetch-destination-no-load-event.https.html": [ @@ -637841,6 +640346,10 @@ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", "support" ], + "fetch/api/request/destination/resources/fetch-destination-worker-frame.js": [ + "b69de0b7df91ac442f095d4cbda568d50b7822ab", + "support" + ], "fetch/api/request/destination/resources/fetch-destination-worker-iframe.js": [ "76345839eadfeb75d07134919af80983b0e61531", "support" @@ -638122,7 +640631,7 @@ "testharness" ], "fetch/api/response/response-consume.html": [ - "4946a4d33a437af657d4440b270bec3f56534d0a", + "7a9c6505d80f3feff2ffa297df03cf37e546f0d7", "testharness" ], "fetch/api/response/response-error-from-stream.html": [ @@ -643566,7 +646075,7 @@ "support" ], "html/cross-origin-opener-policy/coep.https.html": [ - "1c04ed30dd7b3e7cdf7df43e29eca3b433000703", + "64994cdfb76f18cb11c42cc8258209fcfd1091e3", "testharness" ], "html/cross-origin-opener-policy/coep.https.html.headers": [ @@ -643590,7 +646099,7 @@ "support" ], "html/cross-origin-opener-policy/no-https.html": [ - "da9efdce777c43e5b3f37bda628884c1a3579fde", + "014ba1f333b5e254609819bd99618ebcc6b7391b", "testharness" ], "html/cross-origin-opener-policy/no-https.html.headers": [ @@ -644785,7 +647294,7 @@ "aba2b3016a5d56e29cdf5526b7b7259e402c188d", "testharness" ], - "html/dom/usvstring-reflection.html": [ + "html/dom/usvstring-reflection.https.html": [ "b9cafd1fb352cf619141420cbb68aca1483ca8e4", "testharness" ], @@ -648870,7 +651379,7 @@ "support" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js": [ - "96276d747047fc72d02a22055edf2986ab2163b9", + "a755865911d7bd5eea2c7eeca85705602234e571", "testharness" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-transferring.https.html": [ @@ -649014,7 +651523,7 @@ "support" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-worker-success.js": [ - "9befc9006e706853d9fab259e631a39f3193c095", + "ffc3708acb7ae00339efbde8c9d912b1f58e7e50", "support" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-worker-success.js.headers": [ @@ -653778,7 +656287,7 @@ "testharness" ], "html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html": [ - "397c95a23911ef979718a3aa8b879d257803fb85", + "0bd9f9b2295813f0a4664c01a9594ba94d76233d", "testharness" ], "html/semantics/embedded-content/the-iframe-element/stash.py": [ @@ -655837,6 +658346,10 @@ "8df2d3052320bbfebc8184b3f426405b398dc632", "testharness" ], + "html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html": [ + "894efd59dc290d682b6732e49782606a90f4fad1", + "testharness" + ], "html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-multiple-times.html": [ "ff9ebd7d2868ca732a9f4eff8558b461fd14154c", "testharness" @@ -655853,6 +658366,10 @@ "87a130c6f0178de695a1f9ebd8c000dabf3e53c3", "testharness" ], + "html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html": [ + "2e8563f761dd5538185c988dc63008e2ecf25c0c", + "testharness" + ], "html/semantics/interactive-elements/the-dialog-element/dialog-open.html": [ "4719f63b853ded4577d09066eb7ef2cedf7cd934", "testharness" @@ -660469,6 +662986,10 @@ "006827f186eb4e47d387a3b0c9fae404e41e1d37", "testharness" ], + "html/webappapis/the-windoworworkerglobalscope-mixin/README.md": [ + "10ae3e5f03601a67e247f771cf73fdfddfdda12f", + "support" + ], "html/webappapis/the-windoworworkerglobalscope-mixin/Worker_Self_Origin.html": [ "22b28b3e35ef5f05d18b4013798d6513c59c1700", "testharness" @@ -661001,8 +663522,8 @@ "29ee31ccbc936787894a43de1f6625608d14a192", "support" ], - "import-maps/builtin-support.tentative/static-import.js": [ - "1686fc123a798bddbf626f4d112516317739da8f", + "import-maps/builtin-support.tentative/static-import.py": [ + "8d0f5d9f4204384ec9612ddca3ec30cec017d14e", "support" ], "import-maps/core/bare.sub.tentative.html": [ @@ -661041,8 +663562,8 @@ "6f2f18a02e12a92530b7a3ae6bbbd31eecff3816", "testharness" ], - "import-maps/core/static-import.js": [ - "1686fc123a798bddbf626f4d112516317739da8f", + "import-maps/core/static-import.py": [ + "8d0f5d9f4204384ec9612ddca3ec30cec017d14e", "support" ], "import-maps/csp/applied-to-target-dynamic.sub.tentative.html": [ @@ -661142,7 +663663,7 @@ "support" ], "import-maps/resources/test-helper.js": [ - "f21ad935baa5e1310e15232822902c86481bebc4", + "3cb278b7989959977c7cca3d645bb61f032701d8", "support" ], "inert/frame/button.html": [ @@ -661281,6 +663802,22 @@ "249099c06f6c08e92bd1bc6752f57a436ebf9ae0", "testharness" ], + "infrastructure/expected-fail/precondition-in-promise.html": [ + "b2a32facad07150258cae3af857c841eb6e2cfae", + "testharness" + ], + "infrastructure/expected-fail/precondition-in-setup.html": [ + "071f140afb6a4b3244dc6793c2ff304d80df4891", + "testharness" + ], + "infrastructure/expected-fail/precondition-without-setup.html": [ + "12188dbdaeb516c8f67cedf78b0989720c81fdac", + "testharness" + ], + "infrastructure/expected-fail/precondition.html": [ + "2e6ddc1d02cc77d4068c1bb2997780f6a03d579d", + "testharness" + ], "infrastructure/expected-fail/timeout.html": [ "29ff348a9af645ff59d860e91af9534e64a606c5", "testharness" @@ -661337,6 +663874,22 @@ "b954a0e9b75d79c279eed0f3205c25e5b09fdd17", "support" ], + "infrastructure/metadata/infrastructure/expected-fail/precondition-in-promise.html.ini": [ + "7210f8dcfe616f8170b92c43b40e09bfb3b59b9c", + "support" + ], + "infrastructure/metadata/infrastructure/expected-fail/precondition-in-setup.html.ini": [ + "a33ebafe65023bf5b91834e0d203a9a82f46a14e", + "support" + ], + "infrastructure/metadata/infrastructure/expected-fail/precondition-without-setup.html.ini": [ + "406db30a095e057d4302180455830f3abb71d067", + "support" + ], + "infrastructure/metadata/infrastructure/expected-fail/precondition.html.ini": [ + "91544eba4c44ff60ab4e51548c4052c34d0dbf9e", + "support" + ], "infrastructure/metadata/infrastructure/expected-fail/timeout.html.ini": [ "53b281f8358c4f90aab96c731076439ccb5567b4", "support" @@ -661350,7 +663903,7 @@ "support" ], "infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini": [ - "0bcdd374f2521b6534208ab750a1c0d36e7dd7ca", + "40a58e4153ec8c39c3ce6ce64e8bcaae391f3b68", "support" ], "infrastructure/metadata/infrastructure/expected-fail/unhandled-rejection-following-subtest.html.ini": [ @@ -661362,7 +663915,7 @@ "support" ], "infrastructure/metadata/infrastructure/expected-fail/unhandled-rejection.html.ini": [ - "39773dfe714a6b5754bfe73c64294bcb38f2afa3", + "da4fe27e58959f7e3d6ba5ebbc7edd58a93dcf5c", "support" ], "infrastructure/metadata/infrastructure/reftest/reftest_and_fail.html.ini": [ @@ -661406,19 +663959,19 @@ "support" ], "infrastructure/metadata/infrastructure/server/context.any.js.ini": [ - "c3431d687b60aa1a07d9a4307ccfd4a2253ee162", + "ca095a18785a6d31070c02492a868c3b8d6e6606", "support" ], "infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini": [ - "8db9536e38cc880865c374f3743d7df9f727a530", + "23387657b41e99385f8fb9cbc0e46a7dd2626164", "support" ], "infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini": [ - "5f5ed991cf1b04da84e89d7eae2e0d80b9fd2841", + "5b24c9429dc6e75a1288379290f04b18ab050f2c", "support" ], "infrastructure/metadata/infrastructure/server/title.any.js.ini": [ - "e2a7b5578c3b0dec13206ec60da2a5c018c23eb1", + "8cbb5f76493c2c8e21f6c45223d4b551f5335b68", "support" ], "infrastructure/metadata/infrastructure/server/wpt-server-http.sub.html.ini": [ @@ -661449,6 +664002,10 @@ "baf2116bad6b5cd258e07d29e2115c6aab11e099", "support" ], + "infrastructure/metadata/infrastructure/testdriver/actions/multiTouchPoints.html.ini": [ + "c7b3482c786fc4532488f388b802930ccea8dc0e", + "support" + ], "infrastructure/metadata/infrastructure/testdriver/actions/pause.html.ini": [ "657d2a2492605557dcc62f02dca36364cf3007fd", "support" @@ -661465,6 +664022,10 @@ "3e43b63af9545f2828efd2f7ce510bbc9a87bbfc", "support" ], + "infrastructure/metadata/infrastructure/testdriver/virtual_authenticator.html.ini": [ + "88c9bbd479951b62ffa83d900a62f7a6a019dd37", + "support" + ], "infrastructure/reftest-wait-ref.html": [ "6772c2c460e79993979688ddf46e2045b14f7d71", "support" @@ -661673,6 +664234,10 @@ "5cab1206dbec8bc307fbdfed1bf3002cc02c299a", "testharness" ], + "infrastructure/testdriver/actions/multiTouchPoints.html": [ + "c8169733306b4f348509145f2f04df2573cc6c3e", + "testharness" + ], "infrastructure/testdriver/actions/pause.html": [ "72f34c1bde8cf54814cdf91b3fdeeaff90dd07e3", "testharness" @@ -661705,6 +664270,10 @@ "2170347c9729564f7e492009b3d20b3267422c1d", "testharness" ], + "infrastructure/testdriver/virtual_authenticator.html": [ + "339e42665c720cd212419a956936daf10640d8af", + "testharness" + ], "infrastructure/webdriver/tests/conftest.py": [ "cbc4f83421bb4868d1e6958a0622676895eac9ca", "support" @@ -661806,7 +664375,7 @@ "support" ], "interfaces/appmanifest.idl": [ - "4a6425829f23da3cd1f78f74ff52a18635f7af7c", + "b3a303652f53d2ca225fbd8da4899d3eefe6aa15", "support" ], "interfaces/audio-output.idl": [ @@ -661958,7 +664527,7 @@ "support" ], "interfaces/fetch.idl": [ - "eacc69d8b9d1d8f7f9bdbf6f2a879d95d9d847bd", + "9ff4aab4b148c152b4dea4bd47fa8ab1c82b6e4b", "support" ], "interfaces/filter-effects.idl": [ @@ -662126,7 +664695,7 @@ "support" ], "interfaces/picture-in-picture.idl": [ - "3323fc1f099f86ebd06a85baabfe953211be3ae1", + "3d3bad08219af2e422f2cb0d4cabeffa1f8a2b80", "support" ], "interfaces/pointerevents-extension.idl": [ @@ -662170,7 +664739,7 @@ "support" ], "interfaces/resize-observer.idl": [ - "d96a348a721a62516a451c2bb58618fe48035178", + "8018fc4b22be815b0947821b72cd92d10b5892f4", "support" ], "interfaces/resource-timing.idl": [ @@ -662258,7 +664827,7 @@ "support" ], "interfaces/web-animations.idl": [ - "6fd172ce425d570d097fcb573115091c83cc5484", + "0d5d40ba74f40ed68c19a8218710204b2767ae12", "support" ], "interfaces/web-bluetooth.idl": [ @@ -662266,11 +664835,11 @@ "support" ], "interfaces/web-nfc.idl": [ - "117812a1f276d0bb84de94c2357485d7670ad314", + "9f726ece289dde08facf194c40b59539d8e799c2", "support" ], "interfaces/web-share.idl": [ - "f433f2314becd82e7446cc00c96108d1f0efe681", + "a29107f05987369128593b9fb2bd3bb13017eae0", "support" ], "interfaces/webaudio.idl": [ @@ -662306,11 +664875,11 @@ "support" ], "interfaces/webrtc-stats.idl": [ - "2b823047ff1e37a13e9d2e71711360944019fcb5", + "3e58254baa45dbd9f94307326bf3f6fedce53b60", "support" ], "interfaces/webrtc.idl": [ - "5a5eb7b10631f14245b158cc6b06a2a178ce1d20", + "43ee424b7c396fe32a087ce63b604d18322ee595", "support" ], "interfaces/webusb.idl": [ @@ -662957,6 +665526,18 @@ "ee7988c551f6429eea2b929af083ad30cbd5c73d", "support" ], + "layout-instability/resources/util.js": [ + "ca430d0a9e2a89e85ed087289de40234f9061bae", + "support" + ], + "layout-instability/rtl-distance.html": [ + "a6f0040e950649015119ecacc465e75303b5ff9b", + "testharness" + ], + "layout-instability/simple-block-movement.html": [ + "0f9257e27ce5d553d8176f084e537e47b331416e", + "testharness" + ], "layout-instability/supported-layout-type.html": [ "8679a2de7388c5e43a8d784cb3a986d4e23ca568", "testharness" @@ -662965,6 +665546,10 @@ "3d39d623e13314b183463fa1c365df3a7b725243", "testharness" ], + "layout-instability/transform.html": [ + "7ac1c8cafde664f6a39c9d0a88e0a5d76753d85f", + "testharness" + ], "lifecycle/META.yml": [ "c1fcbca4c1f8366da1dd9eb91bc9427edeef1153", "support" @@ -664258,7 +666843,7 @@ "support" ], "mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html": [ - "ca3e679491951d9a573a0f754491cf549a565953", + "d50e69eb97db1c3741401817788054b904598491", "reftest" ], "mathml/relations/html5-tree/css-inline-style-interface.tentative.html": [ @@ -664302,7 +666887,7 @@ "reftest" ], "mathml/relations/html5-tree/href-click-3.html": [ - "a8475ea3ff801dfdb6f4d6d5a7e049a6eafe7c00", + "1b7f0685e65e7c939caab3d546316e7bf858f885", "testharness" ], "mathml/relations/html5-tree/html-or-foreign-element-interfaces.tentative.html": [ @@ -665334,7 +667919,7 @@ "testharness" ], "mediacapture-record/MediaRecorder-mimetype.html": [ - "ddc56e9cb750c59753e238c8ec39c6e1f128790b", + "e90bbcced989d5c5b7fa8a978821316b0150c731", "testharness" ], "mediacapture-record/MediaRecorder-pause-resume.html": [ @@ -665438,7 +668023,7 @@ "manual" ], "mediacapture-streams/MediaStream-MediaElement-srcObject.https.html": [ - "3b16006e0f52ca966c0298bef59a10a19e4038a3", + "790f73ae7bd21bb118a104fc3c3e37d7895f5fe6", "testharness" ], "mediacapture-streams/MediaStream-add-audio-track.https.html": [ @@ -665602,7 +668187,7 @@ "support" ], "mixed-content/README.md": [ - "407b8960cbeb108b729ba5bdc70e1ace41e944ea", + "488432d41ea61c18264c37310369dbd59ccb78ea", "support" ], "mixed-content/gen/top.http-rp/opt-in/audio-tag/cross-http.keep-scheme.https.html": [ @@ -668202,7 +670787,7 @@ "support" ], "mixed-content/generic/test-case.sub.js": [ - "9e9e169f15ff07423065c38afc8a449de6513813", + "661cff12d00e1d7cc1f8e9b2ca2f4ff2b65f4e06", "support" ], "mixed-content/generic/tools/generate.py": [ @@ -676305,6 +678890,10 @@ "ff0a969badace39c3c4466c4528e30c21355e132", "testharness" ], + "permissions/nfc-permission.html": [ + "eeec7251c1c18ff839f5e01d8d439a5e0630aa55", + "testharness" + ], "permissions/permissions-query-feature-policy-attribute.https.sub.html": [ "1d7333d9b5f67a405dc6979d5ddcfda444a04c39", "testharness" @@ -677826,7 +680415,7 @@ "support" ], "referrer-policy/README.md": [ - "ca9977c89ec36493bb6ec35cde30df8e8e6c187a", + "4d6eda97250a3177cb1846fd0950965519605d67", "support" ], "referrer-policy/css-integration/README.md": [ @@ -690758,7 +693347,7 @@ "support" ], "resources/chromium/contacts_manager_mock.js": [ - "8e7c9eef38e39e39652075e757bcc8bf521c4039", + "bbee65b0c9e5c170259fbebc8768fc3f8fa49d44", "support" ], "resources/chromium/device.mojom.js": [ @@ -690838,7 +693427,7 @@ "support" ], "resources/chromium/nfc-mock.js": [ - "aff72bbad028ecd6b8c6a8023841e08f072adfac", + "ce22a9c2cfe9c0ae460d6e1eff4aaa99fe6b24e3", "support" ], "resources/chromium/sensor.mojom.js": [ @@ -690898,7 +693487,7 @@ "support" ], "resources/chromium/webxr-test.js": [ - "d87b3420a85177ad5ef1c5c36cc5c4d785133eba", + "653dcac79f8f22e7143568fcf33543d210eb0127", "support" ], "resources/chromium/webxr-test.js.headers": [ @@ -690986,7 +693575,7 @@ "support" ], "resources/test/tests/functional/api-tests-1.html": [ - "02009f856f6a33bf10d9804541efba5350178431", + "e4246e7faba8a57920bca06eafa11f7817fb07ed", "support" ], "resources/test/tests/functional/api-tests-2.html": [ @@ -691082,19 +693671,19 @@ "support" ], "resources/test/tests/functional/single-page-test-fail.html": [ - "5826a2ef15c00d817197333de1f444cf1ac51e8b", + "9169a5a54e211042d2d46bdcc1b8d68ec9699e03", "support" ], "resources/test/tests/functional/single-page-test-no-assertions.html": [ - "f3140dd492c0c6442d03bc3fe063029892c45dcd", + "f1b18923de4b9e60e129c5eff08183647d88b644", "support" ], "resources/test/tests/functional/single-page-test-no-body.html": [ - "82f3e18a44cdc78cabd6b55406449d18eae59f20", + "0f3d4adf44bd753f3cfb4a8103d9a8d47adb8d9e", "support" ], "resources/test/tests/functional/single-page-test-pass.html": [ - "9d5f776d541454cdcff985bb2ad050036d358b81", + "e47250d763cfdf209efd954ac7d7758f4bf54db5", "support" ], "resources/test/tests/functional/task-scheduling-promise-test.html": [ @@ -691142,7 +693731,7 @@ "support" ], "resources/test/tests/functional/worker-uncaught-single.js": [ - "d7f00382c0b92ff29bd8bcb7fceebec727df4ef7", + "c04542b2f57915826887592b9c08c30d90741ee3", "support" ], "resources/test/tests/functional/worker.js": [ @@ -691222,7 +693811,7 @@ "support" ], "resources/test/tests/unit/exceptional-cases.html": [ - "236970cbea95a53ad1be21076d5a6af3bc53642e", + "2be4dacaaec8ae53e63d704e842d32968a424b4b", "support" ], "resources/test/tests/unit/format-value.html": [ @@ -691274,7 +693863,7 @@ "support" ], "resources/testdriver.js": [ - "031be1b7e5501658d412aecc6f0cba56b3444601", + "bd38e3e006afec94c23005cb1725c6d4a6e9bbe0", "support" ], "resources/testdriver.js.headers": [ @@ -691286,7 +693875,7 @@ "support" ], "resources/testharness.js": [ - "a44185c1eaf97d89dd023d75354da588873905a4", + "93809664ea347d575913186362d12635893ec1c3", "support" ], "resources/testharness.js.headers": [ @@ -691393,8 +693982,8 @@ "e1b50f670105f3a05dacd3518d62770685121c67", "support" ], - "screen_enumeration/requestDisplays.tentative.https.any.js": [ - "e2a5bc427deb96275a1441141d53e2ffc7f8cd99", + "screen_enumeration/getScreens.tentative.https.any.js": [ + "0b8c226ddbd7035d29760b8afa84d8429a3d3482", "testharness" ], "scroll-animations/META.yml": [ @@ -691437,12 +694026,20 @@ "0320210f8394c7439353a6e1efd0eba339b27e20", "testharness" ], + "scroll-to-text-fragment/scroll-to-text-fragment-api.html": [ + "8b1dea6f331bf41b4759cadf6859f016848566fa", + "testharness" + ], + "scroll-to-text-fragment/scroll-to-text-fragment-same-doc.html": [ + "3bfd45382e55657b8f42d16f3a47c0188cd5c73f", + "testharness" + ], "scroll-to-text-fragment/scroll-to-text-fragment-target.html": [ - "bc513126ae625846ef16e15f23ff174e78709fdb", + "1ef9dbba519697c61529fba0e81dc64979257e70", "support" ], "scroll-to-text-fragment/scroll-to-text-fragment.html": [ - "e05210f1ea06e3f7676cc86392c6eb5b3d1d8837", + "b3a35f489aca424b24c57b40796a179c5ee5b4c7", "testharness" ], "secure-contexts/META.yml": [ @@ -696142,7 +698739,7 @@ "testharness" ], "sms/README.md": [ - "7cd98964c24979d427b51c095e178b0622efa971", + "1f34178beace0786a347a6b378489b3741c960d9", "support" ], "sms/idlharness.https.any.js": [ @@ -696198,7 +698795,7 @@ "testharness" ], "speech-api/SpeechSynthesis-speak-events.html": [ - "babfe3c388e92aee8c4e6ea62cd3c038eb5bcb2d", + "c559da1f92965d00c7532bfdad6e0cccad80c83a", "testharness" ], "speech-api/SpeechSynthesis-speak-ownership.html": [ @@ -696230,7 +698827,7 @@ "manual" ], "speech-api/historical.html": [ - "207d3e016ed1fec05d9a1256f40088c61bb05c83", + "9da70c44de9be25933d95d7e6fd2f3ae69a04333", "testharness" ], "speech-api/idlharness.window.js": [ @@ -696297,6 +698894,10 @@ "1db8620485dc459577649e0c2689194d106dcc51", "testharness" ], + "storage-access-api/META.yml": [ + "cb059fe6bb103af62e83abe2e1518011975102e2", + "support" + ], "storage-access-api/hasStorageAccess.sub.window.js": [ "c4d6e3a8b9a856007a299b7f2b1112188547ebd1", "testharness" @@ -696457,6 +699058,10 @@ "3c85f6edb25b955645ccc5fedae3f0facdb36a2b", "testharness" ], + "streams/piping/throwing-options.any.js": [ + "6fab32cc6dcf4c2f4fb5a7a22999788f22459f4e", + "testharness" + ], "streams/piping/transform-streams.any.js": [ "368ed79da4786e0206d421d33076fe9fe61a14ba", "testharness" @@ -697177,6 +699782,10 @@ "56f67dc5ed1ceeeea347b703f5048b289f95131b", "testharness" ], + "svg/animations/short-simple-duration-and-fractional-repeatcount.html": [ + "025dd5092d3bb77707423b316f10bef8f2fb927d", + "testharness" + ], "svg/animations/single-values-animation.html": [ "40aa3461866cf4c32316d86216dcfe4298be7718", "testharness" @@ -697481,6 +700090,10 @@ "17b78a2787d0becf64b90136fcf0f6f966404baa", "testharness" ], + "svg/animations/switching-animated-target-to-unknown-element.html": [ + "fef86a723eebede0641f0fd46f7a2672b184457e", + "testharness" + ], "svg/animations/syncbase-remove-add-while-running.html": [ "61b9604a7b6751a156c48431b89fa2f3cd1af551", "testharness" @@ -700045,6 +702658,14 @@ "29ba209b2badecaac695a678540cc53e5c4ed3f5", "testharness" ], + "svg/layout/svg-with-precent-dimensions-relayout-ref.html": [ + "1a15a9f2b890dfcfe4a8a59530a75de8a69b9179", + "support" + ], + "svg/layout/svg-with-precent-dimensions-relayout.html": [ + "9d04f412b70ad3038bde08b31bf981b7f65619bb", + "reftest" + ], "svg/linking/reftests/href-a-element-attr-change.html": [ "c74b2e015613a09d1cecb5a0c3136d26f07e2a5b", "reftest" @@ -702518,7 +705139,7 @@ "support" ], "tools/requirements_flake8.txt": [ - "16e35cf5aa957755d0b171e8a86f69c208484996", + "ae35da67e53fcc348054d10c9e498e5fcbca06ed", "support" ], "tools/requirements_mypy.txt": [ @@ -706534,7 +709155,7 @@ "support" ], "tools/tox.ini": [ - "63fb8ed9832ba9d11dae965e3c335e3d26289720", + "a330d0523486ca0b3f5e7d4e00567f8a0b60200e", "support" ], "tools/webdriver/.gitignore": [ @@ -706542,7 +709163,7 @@ "support" ], "tools/webdriver/README.md": [ - "72de3b2ae8b6a25434bbfef00e49e0a0463ff247", + "2795ff1fcf39f7da98a18eb3484109b0bf7137ae", "support" ], "tools/webdriver/setup.py": [ @@ -706614,7 +709235,7 @@ "support" ], "tools/wpt/run.py": [ - "25255320fa9232286de9a779550618913d9ba7a3", + "44dfbc25fa58ca50dbfdb761f358692c2115a7a3", "support" ], "tools/wpt/testfiles.py": [ @@ -706646,7 +709267,7 @@ "support" ], "tools/wpt/tox.ini": [ - "d0dead55d9aa863dd4bd50c941f45ab462f4ede9", + "6a044473a6b74981345683abb960588de6535bfb", "support" ], "tools/wpt/update.py": [ @@ -706702,7 +709323,7 @@ "support" ], "tools/wptrunner/requirements.txt": [ - "d8a6c898d24f40c2bcffae42c32e63a9e5b10005", + "60775f8259eb317203825ea8fd5c26c901db5fad", "support" ], "tools/wptrunner/requirements_android_webview.txt": [ @@ -706730,11 +709351,11 @@ "support" ], "tools/wptrunner/requirements_epiphany.txt": [ - "9115b7ac4e8f6a6e4703a7b61d2715075e2f6053", + "470aaf9a93996d0231e13e05cc35557a36d25de9", "support" ], "tools/wptrunner/requirements_firefox.txt": [ - "85efd35486d8d9a3724c9cf37aa231dfcdac72ec", + "f49102b8a89ba7bbbc809c1b4313779c31330fc4", "support" ], "tools/wptrunner/requirements_ie.txt": [ @@ -706758,7 +709379,7 @@ "support" ], "tools/wptrunner/requirements_webkit.txt": [ - "f85779a40bd50db1e24dc032ec43a7444341905b", + "470aaf9a93996d0231e13e05cc35557a36d25de9", "support" ], "tools/wptrunner/setup.py": [ @@ -706874,7 +709495,7 @@ "support" ], "tools/wptrunner/tox.ini": [ - "5d343751c5488cdd1a73b9d3fcae94de46874a3e", + "f82dbc6b8a83556383cb26a2e7c5633f6b19da99", "support" ], "tools/wptrunner/wptrunner.default.ini": [ @@ -706986,7 +709607,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/base.py": [ - "004b92b4b6639aba5ccfe46e6558640a794c18cf", + "f20f735528c16dbc72fdb41434f3511c2128dbd9", "support" ], "tools/wptrunner/wptrunner/executors/executorchrome.py": [ @@ -707030,7 +709651,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/executorwebdriver.py": [ - "a2601978b578aa546fd5d38c1bb997719ae27d41", + "344debf8aa69ef0634764cdaf0e994511bbceab6", "support" ], "tools/wptrunner/wptrunner/executors/executorwebkit.py": [ @@ -707042,7 +709663,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/protocol.py": [ - "77a705ffb4759c04c53ab3a8f045b50569f2598d", + "0758312d65f90043b1cbb2f536d3d31c71812ad6", "support" ], "tools/wptrunner/wptrunner/executors/pytestrunner/__init__.py": [ @@ -707134,7 +709755,7 @@ "support" ], "tools/wptrunner/wptrunner/testdriver-extra.js": [ - "9f97fac9a0cbc99ae8631ac2a1179da8bb9123a8", + "278f226dbd2cefc284ebf347c32089ea1fa5a22d", "support" ], "tools/wptrunner/wptrunner/testdriver-vendor.js": [ @@ -707318,7 +709939,7 @@ "support" ], "tools/wptrunner/wptrunner/wpttest.py": [ - "80db17a3c7284cd82145a3d20c3532a0e79c82a4", + "e5c28bc47316df6aec758459b6aa2c5053cf7a3e", "support" ], "tools/wptserve/.gitignore": [ @@ -707913,10 +710534,30 @@ "d13ad567a726f39299a7e7f58aeffec4ba90a908", "support" ], + "trusted-types/support/navigation-report-only-support.html": [ + "d00d0538753a74411feeec42d5682082031c09d4", + "support" + ], + "trusted-types/support/navigation-report-only-support.html.headers": [ + "fa87952ae486b3a902eca0257eadace8e25e881f", + "support" + ], + "trusted-types/support/navigation-support.html": [ + "cd41f3968e7c74f84a7541506053808073ce541d", + "support" + ], + "trusted-types/support/navigation-support.html.headers": [ + "1bc33add09b4b34ce2cba21f488f8ed53345a27a", + "support" + ], "trusted-types/support/worker.js": [ "4079f7e9c7933cf9ee195fe0e7a54e0f56f184ab", "support" ], + "trusted-types/trusted-types-createHTMLDocument.tentative.html": [ + "7a43b1f7b35f51d249b815a64eb26fdd90d529d1", + "testharness" + ], "trusted-types/trusted-types-eval-reporting-no-unsafe-eval.tentative.https.html": [ "e15ecfaa86c5b48dcc3aa9903ab7b0ab89af8474", "testharness" @@ -707941,6 +710582,10 @@ "2e935f73a48c42346b6352fa6cd16d12294eebd8", "support" ], + "trusted-types/trusted-types-navigation.tentative.html": [ + "7f17c64e57090392c100eb0791372fcf9107de13", + "testharness" + ], "trusted-types/trusted-types-report-only.tentative.https.html": [ "bf0a1eb9c1911e2fb25ed89dbd14e7dfd86cf358", "testharness" @@ -708162,7 +710807,7 @@ "support" ], "upgrade-insecure-requests/README.md": [ - "516e8e262f4b18375689cb45d15f2c516c24571f", + "7b7ac65c9903410dd9e6e924b922b1961df32318", "support" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/fetch/cross-http-downgrade.downgrade.https.html": [ @@ -711558,7 +714203,7 @@ "testharness" ], "vibration/invalid-values.html": [ - "6740a44a8ed98ac76c577636d42010c1c8c27ada", + "9381dadcc06e5d301b5531f0679ce44f943e8740", "testharness" ], "vibration/pattern-array-extra-manual.html": [ @@ -711610,7 +714255,7 @@ "testharness" ], "visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini": [ - "75e29ae4c427efbaeb9e08ec4824b90c30c2aead", + "f8d682fbf902cf7d65ed75c1bcdfd2d1f54980ac", "support" ], "visual-viewport/viewport-offset-manual.html": [ @@ -713149,6 +715794,10 @@ "a33d6d4f24676356b59b6b431968d8486df50615", "testharness" ], + "web-animations/idlharness.window.js": [ + "c32016280e659fe8268c87b58e4956a1eb81b399", + "testharness" + ], "web-animations/interfaces/Animatable/animate-no-browsing-context.html": [ "61a7502a988f96437574bc2949a8978d326003e9", "testharness" @@ -713185,10 +715834,6 @@ "5b9586bfaf962e73dd418212e407e6d529ecdfd6", "testharness" ], - "web-animations/interfaces/Animation/idlharness.window.js": [ - "14b8395a2171db536ac5bbde964972a99defc41d", - "testharness" - ], "web-animations/interfaces/Animation/oncancel.html": [ "d5391196092c9671c2c22c1c035bc173bbef7b4f", "testharness" @@ -713237,10 +715882,6 @@ "1c40a3fb211c1bd3e33e6c6c6325b1d25e3b981d", "testharness" ], - "web-animations/interfaces/AnimationPlaybackEvent/idlharness.window.js": [ - "5124e5095724521c721b8781dcfc92ff573f48e8", - "testharness" - ], "web-animations/interfaces/Document/timeline.html": [ "b8b4d74d5e536a111449fd0268424ac06a151b95", "testharness" @@ -713253,10 +715894,6 @@ "ca0997ac8f9012b7d019760be97e09fa0f837179", "testharness" ], - "web-animations/interfaces/DocumentTimeline/idlharness.window.js": [ - "395d133f482a38a33ea5be061450f0f322be9fc9", - "testharness" - ], "web-animations/interfaces/DocumentTimeline/style-change-events.html": [ "c1607e6fb92943c580802025e4a4cc617a747144", "testharness" @@ -713277,10 +715914,6 @@ "1f8d267e4a660c80b9820ff516079dbd71042f94", "testharness" ], - "web-animations/interfaces/KeyframeEffect/idlharness.window.js": [ - "22548861ae335c80858808cbe19f996f24a7edc9", - "testharness" - ], "web-animations/interfaces/KeyframeEffect/iterationComposite.html": [ "bbb8ee2a3261fcb98cda7a83056467bc0b20dac6", "testharness" @@ -713558,7 +716191,7 @@ "testharness" ], "web-nfc/NDEFMessage_constructor.https.html": [ - "a6a2e6bd67c5c480367e20dd46e7a796b4c4f8a9", + "ce212136023058dd6597ff925fd68a73e5d2ab95", "testharness" ], "web-nfc/NDEFReader-document-hidden-manual.https.html": [ @@ -713566,11 +716199,11 @@ "manual" ], "web-nfc/NDEFReader_options.https.html": [ - "389fff9e041e284358a87e5cc133046d4a579b84", + "b1452c0240d176316341a0ab6857433fbc99a5b5", "testharness" ], "web-nfc/NDEFReader_scan.https.html": [ - "3fe95cc91478aea7426e882743814723c4517ec6", + "a26a548c6392d8116e8c188d6dbbe03b4660d87f", "testharness" ], "web-nfc/NDEFReader_scan_iframe.https.html": [ @@ -713578,11 +716211,11 @@ "testharness" ], "web-nfc/NDEFReadingEvent_constructor.https.html": [ - "c23a68a2f79e5527f5d2742c4729bce0d6178c19", + "15ef6e466aab05e289cc93bb678fbda02ce253f7", "testharness" ], "web-nfc/NDEFRecord_constructor.https.html": [ - "1206afb4713dc7e4b48dcc837b3dd708382a9ce2", + "6028e970b879b1f65dd48d64525995114b5e82e9", "testharness" ], "web-nfc/NDEFWriter-document-hidden-manual.https.html": [ @@ -713590,7 +716223,7 @@ "manual" ], "web-nfc/NDEFWriter_push.https.html": [ - "2be655fbbf93cfb0c0c8813f86dc3e98450af720", + "f8b461c42d5ee0265f1301458b8e92a812e650da", "testharness" ], "web-nfc/README.md": [ @@ -713606,7 +716239,7 @@ "testharness" ], "web-nfc/resources/nfc-helpers.js": [ - "cf9b510f30424e79412cc35098f63f5afd05707b", + "bdd8290d9eb7f9fcae1e46820a64fc6cef8617e5", "support" ], "web-nfc/resources/support-iframe.html": [ @@ -713749,10 +716382,6 @@ "3bf3bc23b20764ba54d5ff125699df91fffe741a", "support" ], - "webaudio/refresh_idl.rb": [ - "a07847535ad7cae63b06c3d30333819cfef08b77", - "support" - ], "webaudio/resources/4ch-440.wav": [ "85dc1ea9044e28eeeac6176bae61285c25ebf711", "support" @@ -715150,7 +717779,7 @@ "support" ], "webdriver/tests/find_element_from_element/find.py": [ - "56e216bb646131bdcc9a0c3c28ea4142c2982897", + "b107a8957e08fa2c83fd47459f1e66d3b7d74134", "wdspec" ], "webdriver/tests/find_element_from_element/user_prompts.py": [ @@ -715862,7 +718491,7 @@ "testharness" ], "webgpu/cts.html": [ - "b60faec9623bb0adf7c1b9ad0e5d488ce14b5882", + "13d8b7c8324a7e3c3c0c00359e729a958f715205", "testharness" ], "webgpu/framework/allowed_characters.js": [ @@ -715874,7 +718503,7 @@ "support" ], "webgpu/framework/fixture.js": [ - "2c1ea8314689e610528ba81254ee00e99242f4d5", + "d976fa46880a30cbb1837fce30a96023875e0f87", "support" ], "webgpu/framework/gpu/implementation.js": [ @@ -715898,7 +718527,7 @@ "support" ], "webgpu/framework/logger.js": [ - "e854292473640a21d6bb660a2a0999e740a90c8e", + "5536e736f069a3a013eb88233eb0d3a8c413f919", "support" ], "webgpu/framework/params/combine.js": [ @@ -715942,7 +718571,7 @@ "support" ], "webgpu/framework/test_group.js": [ - "69d8cc0401714f4f6ffe2ddfe0f8763b833914e5", + "68527a5b2cf55426ae779739fba788cfde94b244", "support" ], "webgpu/framework/tree.js": [ @@ -715962,7 +718591,7 @@ "support" ], "webgpu/framework/util/stack.js": [ - "ae99ac904a132d947f304ca0f03f50b25fd197ae", + "bd51d54509483954bb84ea9757b873ca42233cab", "support" ], "webgpu/framework/util/timeout.js": [ @@ -715970,7 +718599,7 @@ "support" ], "webgpu/framework/version.js": [ - "55a72f5efb03ad9043ea2600a311cfff249a21ce", + "e2c91190305110d107b22dfb45e6a29739d424cd", "support" ], "webgpu/runtime/helper/options.js": [ @@ -715986,7 +718615,7 @@ "testharness" ], "webgpu/runtime/wpt.js": [ - "c87f9167bbeba1edca847a76a6cb59401f0c7409", + "fd02f09471bc656a900714dd586101d6acb28c46", "support" ], "webgpu/suites/cts/buffers/create_mapped.spec.js": [ @@ -716010,7 +718639,7 @@ "support" ], "webgpu/suites/cts/canvas/context_creation.spec.js": [ - "ba0d47228536da7192111f8bd7a6947de7c6181a", + "a693b002769ae9a1e951bc1888ca49ba393df7d0", "support" ], "webgpu/suites/cts/command_buffer/basic.spec.js": [ @@ -716018,7 +718647,7 @@ "support" ], "webgpu/suites/cts/command_buffer/compute/basic.spec.js": [ - "8fcc7ef9309b5a8760247f0c86ea374c0d3f3e14", + "8a5fc168a4d8fbed69ba5ee2009fc7049fdcf3a3", "support" ], "webgpu/suites/cts/command_buffer/copies.spec.js": [ @@ -716030,11 +718659,11 @@ "support" ], "webgpu/suites/cts/command_buffer/render/rendering.spec.js": [ - "46829a8d07cc51a04ad1ec323fdaf6f5b14e6cdc", + "54c627dfd35d7179d9f357c046afa77c8b9e116a", "support" ], "webgpu/suites/cts/command_buffer/render/storeop.spec.js": [ - "0b38debc13425c87def0548f88085aa362a7a7cb", + "0326cf65ad69a1558a69b83df94622041d7eb1db", "support" ], "webgpu/suites/cts/examples.spec.js": [ @@ -716050,11 +718679,11 @@ "support" ], "webgpu/suites/cts/gpu_test.js": [ - "96f109d3043edf8f77d7cbfce88e13b348e44f58", + "a324e8839e505ab4fcce98dbf49b9217bc52aa00", "support" ], "webgpu/suites/cts/index.js": [ - "33934cdd38cb51c8a00dc72c436a14965ab7aa28", + "d38bcc5b6b51cf6b5f7bc19d4a23d9f5d98b4415", "support" ], "webgpu/suites/cts/validation/createBindGroup.spec.js": [ @@ -716070,7 +718699,7 @@ "support" ], "webgpu/suites/cts/validation/createRenderPipeline.spec.js": [ - "cc838fc6515a5b9a7cc55bacc0361556a3bdd93c", + "b66dabf285a2c007e01356ed9c42a9cfe7eddc43", "support" ], "webgpu/suites/cts/validation/createTexture.spec.js": [ @@ -716094,7 +718723,7 @@ "support" ], "webgpu/suites/cts/validation/render_pass.spec.js": [ - "52da36fa7ac9cb196aaf578707acf09a7f62724d", + "3e08dcc17368ecb7a74d386c64e2166fb6baff66", "support" ], "webgpu/suites/cts/validation/render_pass_descriptor.spec.js": [ @@ -716118,7 +718747,7 @@ "support" ], "webgpu/suites/cts/validation/setVertexBuffer.spec.js": [ - "1df40173abe0eab97fe384b12df94f0e4ec03c3b", + "ba22ee2d2a4e636e2b519003da669bbd33fead2d", "support" ], "webgpu/suites/cts/validation/setViewport.spec.js": [ @@ -716126,11 +718755,11 @@ "support" ], "webgpu/suites/cts/validation/validation_test.js": [ - "099b8202204d06b41403410f287a770a0945559d", + "dc5488e769883b99a9157567d3aaa71eafd2dd42", "support" ], - "webgpu/suites/cts/validation/vertex_input.spec.js": [ - "951c9ead3cfc53569bbcfa322252edef3b672609", + "webgpu/suites/cts/validation/vertex_state.spec.js": [ + "da619181192b907f0485d71cf364616568d77f66", "support" ], "webmessaging/Channel_postMessage_Blob.htm": [ @@ -716910,7 +719539,7 @@ "testharness" ], "webrtc/RTCPeerConnection-iceConnectionState.https.html": [ - "9dd364ed3271283d71f784c3c37abddf09e68c68", + "32f2eb9b4607121ad9aa0db99a05e3ab78750f7e", "testharness" ], "webrtc/RTCPeerConnection-iceGatheringState.html": [ @@ -718262,7 +720891,7 @@ "support" ], "websockets/unload-a-document/001-1.html": [ - "bd0c36686954938a1d2bf70918bc506da431e296", + "75d689e0b3d2e2ce3b7aa56ef33fb05409b78cb6", "support" ], "websockets/unload-a-document/001-2.html": [ @@ -718274,7 +720903,7 @@ "testharness" ], "websockets/unload-a-document/002-1.html": [ - "d151b231f250ab61103db23877e0dc0e80bd1eec", + "546de89dfee0782a916bf0ed82328bb77e92956c", "support" ], "websockets/unload-a-document/002-2.html": [ @@ -724206,7 +726835,7 @@ "support" ], "wpt.py": [ - "0736186c5d813f04a83fdd117974a9e1513dbff1", + "c65e1ed2c6cde4d3abd9e9a771f02542398fec49", "support" ], "x-frame-options/META.yml": [ @@ -725090,7 +727719,7 @@ "support" ], "xhr/resources/echo-method.py": [ - "5351d1961ac0254106c374e2b2ead84bbc6878d4", + "ccb46b6b2eb4d4b4c281720e0a16142f048ddbc3", "support" ], "xhr/resources/empty-div-utf8-html.py": [ diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_cbc.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_cbc.https.worker.js.ini index 0ca37973f27..f36c001c6e3 100644 --- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_cbc.https.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_cbc.https.worker.js.ini @@ -1,4 +1,5 @@ [aes_cbc.https.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_ctr.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_ctr.https.worker.js.ini index 090e9e6de76..57f13020bf4 100644 --- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_ctr.https.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_ctr.https.worker.js.ini @@ -1,4 +1,5 @@ [aes_ctr.https.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_gcm.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_gcm.https.worker.js.ini index 0d86ee96b49..78ba046e07c 100644 --- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_gcm.https.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_gcm.https.worker.js.ini @@ -1,4 +1,5 @@ [aes_gcm.https.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/rsa.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/rsa.https.worker.js.ini index 953d7d5a25a..e07e920891e 100644 --- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/rsa.https.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/rsa.https.worker.js.ini @@ -1,4 +1,5 @@ [rsa.https.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https.html.ini index 20d98b7e6c2..ed2e028c280 100644 --- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https.html.ini +++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https.html.ini @@ -1,5 +1,6 @@ [test_aes_cbc.https.html] type: testharness + expected: ERROR [WebCryptoAPI: encrypt() Using AES-CBC] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https.html.ini index 1dec5ae9d7c..a358eeb4442 100644 --- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https.html.ini +++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https.html.ini @@ -1,5 +1,6 @@ [test_aes_ctr.https.html] type: testharness + expected: ERROR [WebCryptoAPI: encrypt() Using AES-CTR] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https.html.ini index 83c05d12a09..8c2823cafb6 100644 --- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https.html.ini +++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https.html.ini @@ -1,5 +1,6 @@ [test_aes_gcm.https.html] type: testharness + expected: ERROR [WebCryptoAPI: encrypt() Using AES-GCM] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.https.html.ini index 2d053589082..be69a1b8f60 100644 --- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.https.html.ini +++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.https.html.ini @@ -1,5 +1,6 @@ [test_rsa_oaep.https.html] type: testharness + expected: ERROR [WebCryptoAPI: encrypt() Using RSA-OAEP] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js.ini index 508d737660c..63c4cbd671d 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js.ini @@ -1,4 +1,5 @@ [failures_AES-CBC.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [failures_AES-CBC.https.any.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js.ini index b2741c0aa31..a94fd44425d 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js.ini @@ -1,4 +1,5 @@ [failures_AES-CTR.https.any.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [failures_AES-CTR.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js.ini index 6332c7f58db..9dddf23cc9e 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js.ini @@ -1,4 +1,5 @@ [failures_AES-GCM.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [failures_AES-GCM.https.any.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js.ini index aed97dc8b02..0790ecec4a2 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js.ini @@ -1,4 +1,5 @@ [failures_AES-KW.https.any.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [failures_AES-KW.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDH.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDH.https.any.js.ini index 0d6ad10da7e..51fab92d9f2 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDH.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDH.https.any.js.ini @@ -1,4 +1,5 @@ [failures_ECDH.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [failures_ECDH.https.any.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js.ini index da5d59aa3f3..ccff8aa6284 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js.ini @@ -1,4 +1,5 @@ [failures_ECDSA.https.any.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [failures_ECDSA.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_HMAC.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_HMAC.https.any.js.ini index efe0d31b033..f38b35f747d 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_HMAC.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_HMAC.https.any.js.ini @@ -1,4 +1,5 @@ [failures_HMAC.https.any.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [failures_HMAC.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js.ini index 8c954b5cca5..a12b666e11b 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js.ini @@ -1,4 +1,5 @@ [failures_RSA-OAEP.https.any.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [failures_RSA-OAEP.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js.ini index 56008b662b9..221ae61cd44 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js.ini @@ -1,4 +1,5 @@ [failures_RSA-PSS.https.any.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [failures_RSA-PSS.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js.ini index d6daa8d5cd6..90843f4b0a6 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js.ini @@ -1,4 +1,5 @@ [failures_RSASSA-PKCS1-v1_5.https.any.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [failures_RSASSA-PKCS1-v1_5.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js.ini index f4d5ec100fa..4ab30e4c1d9 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js.ini @@ -1,4 +1,5 @@ [successes_AES-CBC.https.any.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [successes_AES-CBC.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js.ini index ab30f20ed2a..26f9b95b3b5 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js.ini @@ -1,4 +1,5 @@ [successes_AES-CTR.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [successes_AES-CTR.https.any.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js.ini index 8ad478fae27..47a58a9d66b 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js.ini @@ -1,4 +1,5 @@ [successes_AES-GCM.https.any.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [successes_AES-GCM.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js.ini index 13a7bdf1646..ad313f67217 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js.ini @@ -1,4 +1,5 @@ [successes_AES-KW.https.any.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [successes_AES-KW.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDH.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDH.https.any.js.ini index a4270c582ca..86e8d942187 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDH.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDH.https.any.js.ini @@ -1,4 +1,5 @@ [successes_ECDH.https.any.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [successes_ECDH.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js.ini index cfb6b99531d..f3e09694740 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js.ini @@ -1,4 +1,5 @@ [successes_ECDSA.https.any.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [successes_ECDSA.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_HMAC.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_HMAC.https.any.js.ini index 252866e2dc8..d68735be03b 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_HMAC.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_HMAC.https.any.js.ini @@ -1,4 +1,5 @@ [successes_HMAC.https.any.worker.html] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [successes_HMAC.https.any.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js.ini index 72051178642..ac264080061 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js.ini @@ -1,4 +1,5 @@ [successes_RSA-OAEP.https.any.html?1-10] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [successes_RSA-OAEP.https.any.html?131-140] + expected: ERROR [Untitled] expected: FAIL @@ -15,6 +17,7 @@ [successes_RSA-OAEP.https.any.html?71-80] + expected: ERROR [Untitled] expected: FAIL @@ -23,6 +26,7 @@ [successes_RSA-OAEP.https.any.html?101-110] + expected: ERROR [Untitled] expected: FAIL @@ -31,6 +35,7 @@ [successes_RSA-OAEP.https.any.worker.html?111-120] + expected: ERROR [Untitled] expected: FAIL @@ -39,6 +44,7 @@ [successes_RSA-OAEP.https.any.html?41-50] + expected: ERROR [Untitled] expected: FAIL @@ -47,6 +53,7 @@ [successes_RSA-OAEP.https.any.worker.html?141-150] + expected: ERROR [Untitled] expected: FAIL @@ -55,6 +62,7 @@ [successes_RSA-OAEP.https.any.html?121-130] + expected: ERROR [Untitled] expected: FAIL @@ -63,6 +71,7 @@ [successes_RSA-OAEP.https.any.worker.html?151-last] + expected: ERROR [Untitled] expected: FAIL @@ -71,6 +80,7 @@ [successes_RSA-OAEP.https.any.html?61-70] + expected: ERROR [Untitled] expected: FAIL @@ -79,6 +89,7 @@ [successes_RSA-OAEP.https.any.worker.html?51-60] + expected: ERROR [Untitled] expected: FAIL @@ -87,6 +98,7 @@ [successes_RSA-OAEP.https.any.html?141-150] + expected: ERROR [Untitled] expected: FAIL @@ -95,6 +107,7 @@ [successes_RSA-OAEP.https.any.worker.html?31-40] + expected: ERROR [Untitled] expected: FAIL @@ -103,6 +116,7 @@ [successes_RSA-OAEP.https.any.worker.html?21-30] + expected: ERROR [Untitled] expected: FAIL @@ -111,6 +125,7 @@ [successes_RSA-OAEP.https.any.html?151-last] + expected: ERROR [Untitled] expected: FAIL @@ -119,6 +134,7 @@ [successes_RSA-OAEP.https.any.worker.html?61-70] + expected: ERROR [Untitled] expected: FAIL @@ -127,6 +143,7 @@ [successes_RSA-OAEP.https.any.worker.html?81-90] + expected: ERROR [Untitled] expected: FAIL @@ -135,6 +152,7 @@ [successes_RSA-OAEP.https.any.html?111-120] + expected: ERROR [Untitled] expected: FAIL @@ -143,6 +161,7 @@ [successes_RSA-OAEP.https.any.html?81-90] + expected: ERROR [Untitled] expected: FAIL @@ -151,6 +170,7 @@ [successes_RSA-OAEP.https.any.worker.html?71-80] + expected: ERROR [Untitled] expected: FAIL @@ -159,6 +179,7 @@ [successes_RSA-OAEP.https.any.html?21-30] + expected: ERROR [Untitled] expected: FAIL @@ -167,6 +188,7 @@ [successes_RSA-OAEP.https.any.worker.html?101-110] + expected: ERROR [Untitled] expected: FAIL @@ -175,6 +197,7 @@ [successes_RSA-OAEP.https.any.html?51-60] + expected: ERROR [Untitled] expected: FAIL @@ -183,6 +206,7 @@ [successes_RSA-OAEP.https.any.html?91-100] + expected: ERROR [Untitled] expected: FAIL @@ -191,6 +215,7 @@ [successes_RSA-OAEP.https.any.worker.html?41-50] + expected: ERROR [Untitled] expected: FAIL @@ -199,6 +224,7 @@ [successes_RSA-OAEP.https.any.worker.html?1-10] + expected: ERROR [Untitled] expected: FAIL @@ -207,6 +233,7 @@ [successes_RSA-OAEP.https.any.html?11-20] + expected: ERROR [Untitled] expected: FAIL @@ -215,6 +242,7 @@ [successes_RSA-OAEP.https.any.html?31-40] + expected: ERROR [Untitled] expected: FAIL @@ -223,6 +251,7 @@ [successes_RSA-OAEP.https.any.worker.html?91-100] + expected: ERROR [Untitled] expected: FAIL @@ -231,6 +260,7 @@ [successes_RSA-OAEP.https.any.worker.html?131-140] + expected: ERROR [Untitled] expected: FAIL @@ -239,6 +269,7 @@ [successes_RSA-OAEP.https.any.worker.html?11-20] + expected: ERROR [Untitled] expected: FAIL @@ -247,6 +278,7 @@ [successes_RSA-OAEP.https.any.worker.html?121-130] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js.ini index 1f4fd74a8db..6f41195b892 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js.ini @@ -1,4 +1,5 @@ [successes_RSA-PSS.https.any.html?11-20] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [successes_RSA-PSS.https.any.worker.html?11-20] + expected: ERROR [Untitled] expected: FAIL @@ -15,6 +17,7 @@ [successes_RSA-PSS.https.any.html?31-last] + expected: ERROR [Untitled] expected: FAIL @@ -23,6 +26,7 @@ [successes_RSA-PSS.https.any.html?1-10] + expected: ERROR [Untitled] expected: FAIL @@ -31,6 +35,7 @@ [successes_RSA-PSS.https.any.worker.html?1-10] + expected: ERROR [Untitled] expected: FAIL @@ -39,6 +44,7 @@ [successes_RSA-PSS.https.any.html?21-30] + expected: ERROR [Untitled] expected: FAIL @@ -47,6 +53,7 @@ [successes_RSA-PSS.https.any.worker.html?31-last] + expected: ERROR [Untitled] expected: FAIL @@ -55,6 +62,7 @@ [successes_RSA-PSS.https.any.worker.html?21-30] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js.ini index 32bd359d068..3a180e87d76 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js.ini @@ -1,4 +1,5 @@ [successes_RSASSA-PKCS1-v1_5.https.any.html?1-10] + expected: ERROR [Untitled] expected: FAIL @@ -7,6 +8,7 @@ [successes_RSASSA-PKCS1-v1_5.https.any.html?31-last] + expected: ERROR [Untitled] expected: FAIL @@ -15,6 +17,7 @@ [successes_RSASSA-PKCS1-v1_5.https.any.worker.html?11-20] + expected: ERROR [Untitled] expected: FAIL @@ -23,6 +26,7 @@ [successes_RSASSA-PKCS1-v1_5.https.any.html?21-30] + expected: ERROR [Untitled] expected: FAIL @@ -31,6 +35,7 @@ [successes_RSASSA-PKCS1-v1_5.https.any.worker.html?1-10] + expected: ERROR [Untitled] expected: FAIL @@ -39,6 +44,7 @@ [successes_RSASSA-PKCS1-v1_5.https.any.worker.html?31-last] + expected: ERROR [Untitled] expected: FAIL @@ -47,6 +53,7 @@ [successes_RSASSA-PKCS1-v1_5.https.any.html?11-20] + expected: ERROR [Untitled] expected: FAIL @@ -55,6 +62,7 @@ [successes_RSASSA-PKCS1-v1_5.https.any.worker.html?21-30] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/ecdsa.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/ecdsa.https.worker.js.ini index e7adef887fa..b3828d7c0b5 100644 --- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/ecdsa.https.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/ecdsa.https.worker.js.ini @@ -1,4 +1,5 @@ [ecdsa.https.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/hmac.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/hmac.https.worker.js.ini index c7c98e1736f..17a3910f43f 100644 --- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/hmac.https.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/hmac.https.worker.js.ini @@ -1,4 +1,5 @@ [hmac.https.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pkcs.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pkcs.https.worker.js.ini index e8892f42aa3..0d631283748 100644 --- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pkcs.https.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pkcs.https.worker.js.ini @@ -1,4 +1,5 @@ [rsa_pkcs.https.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pss.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pss.https.worker.js.ini index f115447809e..4f6b0a93f99 100644 --- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pss.https.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pss.https.worker.js.ini @@ -1,4 +1,5 @@ [rsa_pss.https.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_ecdsa.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_ecdsa.https.html.ini index f789cd74c71..5bbe8cdede3 100644 --- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_ecdsa.https.html.ini +++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_ecdsa.https.html.ini @@ -1,5 +1,6 @@ [test_ecdsa.https.html] type: testharness + expected: ERROR [WebCryptoAPI: sign() and verify() Using ECDSA] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_hmac.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_hmac.https.html.ini index f1054ef0341..db418af39dc 100644 --- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_hmac.https.html.ini +++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_hmac.https.html.ini @@ -1,5 +1,6 @@ [test_hmac.https.html] type: testharness + expected: ERROR [WebCryptoAPI: sign() and verify() Using HMAC] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pkcs.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pkcs.https.html.ini index 8e54405ea89..8cfea0d5511 100644 --- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pkcs.https.html.ini +++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pkcs.https.html.ini @@ -1,5 +1,6 @@ [test_rsa_pkcs.https.html] type: testharness + expected: ERROR [WebCryptoAPI: sign() and verify() Using RSASSA-PKCS1-v1_5] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pss.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pss.https.html.ini index 1059fe86e4e..db290642bad 100644 --- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pss.https.html.ini +++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/test_rsa_pss.https.html.ini @@ -1,5 +1,6 @@ [test_rsa_pss.https.html] type: testharness + expected: ERROR [WebCryptoAPI: sign() and verify() Using RSA-PSS] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html.ini b/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html.ini index 63f8830dd0e..ea42614a1b4 100644 --- a/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html.ini +++ b/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html.ini @@ -1,5 +1,6 @@ [test_wrapKey_unwrapKey.https.html] type: testharness + expected: ERROR [WebCryptoAPI: wrapKey() and unwrapKey()] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.worker.js.ini index 2ae77964437..51481123aa4 100644 --- a/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.worker.js.ini @@ -1,4 +1,5 @@ [wrapKey_unwrapKey.https.worker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/WebIDL/ecmascript-binding/global-immutable-prototype.any.js.ini b/tests/wpt/metadata/WebIDL/ecmascript-binding/global-immutable-prototype.any.js.ini index 39fea350252..054e0b00a57 100644 --- a/tests/wpt/metadata/WebIDL/ecmascript-binding/global-immutable-prototype.any.js.ini +++ b/tests/wpt/metadata/WebIDL/ecmascript-binding/global-immutable-prototype.any.js.ini @@ -4,11 +4,13 @@ [global-immutable-prototype.any.sharedworker.html] + expected: ERROR [Immutability of the global prototype chain] expected: FAIL [global-immutable-prototype.any.serviceworker.html] + expected: ERROR [Immutability of the global prototype chain] expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/linebox/vertical-align-top-bottom-001.html.ini b/tests/wpt/metadata/css/CSS2/linebox/vertical-align-top-bottom-001.html.ini index 8590ba0b818..3fa51ffd74e 100644 --- a/tests/wpt/metadata/css/CSS2/linebox/vertical-align-top-bottom-001.html.ini +++ b/tests/wpt/metadata/css/CSS2/linebox/vertical-align-top-bottom-001.html.ini @@ -1,4 +1,5 @@ [vertical-align-top-bottom-001.html] + expected: ERROR [vertical-align-top-bottom-001] expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/positioning/inline-static-position-001.html.ini b/tests/wpt/metadata/css/CSS2/positioning/inline-static-position-001.html.ini index f0b909eb1ed..f02507f83b3 100644 --- a/tests/wpt/metadata/css/CSS2/positioning/inline-static-position-001.html.ini +++ b/tests/wpt/metadata/css/CSS2/positioning/inline-static-position-001.html.ini @@ -1,4 +1,5 @@ [inline-static-position-001.html] + expected: ERROR [CSS Test: Static positions and line wrapping] expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html.ini b/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html.ini index 0736abd6467..e2607f69bb4 100644 --- a/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html.ini +++ b/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html.ini @@ -1,4 +1,5 @@ [relpos-percentage-left-in-scrollable-2.html] + expected: ERROR [relpos-percentage-left-in-scrollable-2] expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html.ini b/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html.ini index d6c749574b4..6d5530dd5f5 100644 --- a/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html.ini +++ b/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-left-in-scrollable.html.ini @@ -1,4 +1,5 @@ [relpos-percentage-left-in-scrollable.html] + expected: ERROR [relpos-percentage-left-in-scrollable] expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html.ini b/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html.ini index e6c121200a0..7d7251809cd 100644 --- a/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html.ini +++ b/tests/wpt/metadata/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html.ini @@ -1,4 +1,5 @@ [relpos-percentage-top-in-scrollable.html] + expected: ERROR [relpos-percentage-top-in-scrollable] expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/visufx/animation/visibility-interpolation.html.ini b/tests/wpt/metadata/css/CSS2/visufx/animation/visibility-interpolation.html.ini index 96c5c0e6b38..7f02684f048 100644 --- a/tests/wpt/metadata/css/CSS2/visufx/animation/visibility-interpolation.html.ini +++ b/tests/wpt/metadata/css/CSS2/visufx/animation/visibility-interpolation.html.ini @@ -1,4 +1,5 @@ [visibility-interpolation.html] + expected: ERROR [visibility interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-align/animation/column-gap-interpolation.html.ini b/tests/wpt/metadata/css/css-align/animation/column-gap-interpolation.html.ini index 8fe5a71fd4d..d0c9b229624 100644 --- a/tests/wpt/metadata/css/css-align/animation/column-gap-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-align/animation/column-gap-interpolation.html.ini @@ -1,4 +1,5 @@ [column-gap-interpolation.html] + expected: ERROR [column-gap interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-align/animation/row-gap-interpolation.html.ini b/tests/wpt/metadata/css/css-align/animation/row-gap-interpolation.html.ini index d7fcea800d5..0974487f792 100644 --- a/tests/wpt/metadata/css/css-align/animation/row-gap-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-align/animation/row-gap-interpolation.html.ini @@ -1,4 +1,5 @@ [row-gap-interpolation.html] + expected: ERROR [row-gap interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/background-color-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/background-color-interpolation.html.ini index ca374b82142..1e54a5f1f23 100644 --- a/tests/wpt/metadata/css/css-backgrounds/animations/background-color-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-backgrounds/animations/background-color-interpolation.html.ini @@ -1,4 +1,5 @@ [background-color-interpolation.html] + expected: ERROR [background-color-interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/background-position-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/background-position-interpolation.html.ini index cd4abcc999d..7f0649b1627 100644 --- a/tests/wpt/metadata/css/css-backgrounds/animations/background-position-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-backgrounds/animations/background-position-interpolation.html.ini @@ -1,4 +1,5 @@ [background-position-interpolation.html] + expected: ERROR [background-position-interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/background-position-origin-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/background-position-origin-interpolation.html.ini index 2a5a51aa646..9d9724f8cc8 100644 --- a/tests/wpt/metadata/css/css-backgrounds/animations/background-position-origin-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-backgrounds/animations/background-position-origin-interpolation.html.ini @@ -1,4 +1,5 @@ [background-position-origin-interpolation.html] + expected: ERROR [background-position-origin-interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/background-position-x-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/background-position-x-interpolation.html.ini index 3beb283012a..fb2d744eb50 100644 --- a/tests/wpt/metadata/css/css-backgrounds/animations/background-position-x-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-backgrounds/animations/background-position-x-interpolation.html.ini @@ -1,4 +1,5 @@ [background-position-x-interpolation.html] + expected: ERROR [background-position-x-interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/background-position-y-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/background-position-y-interpolation.html.ini index 0baa50c7671..a92ca1bf0a1 100644 --- a/tests/wpt/metadata/css/css-backgrounds/animations/background-position-y-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-backgrounds/animations/background-position-y-interpolation.html.ini @@ -1,4 +1,5 @@ [background-position-y-interpolation.html] + expected: ERROR [background-position-y-interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/background-size-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/background-size-interpolation.html.ini index cca534c8bbb..dd8677a8b26 100644 --- a/tests/wpt/metadata/css/css-backgrounds/animations/background-size-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-backgrounds/animations/background-size-interpolation.html.ini @@ -1,4 +1,5 @@ [background-size-interpolation.html] + expected: ERROR [background-size-interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/border-color-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/border-color-interpolation.html.ini index 970058f0b3f..a39ea79eafd 100644 --- a/tests/wpt/metadata/css/css-backgrounds/animations/border-color-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-backgrounds/animations/border-color-interpolation.html.ini @@ -1,4 +1,5 @@ [border-color-interpolation.html] + expected: ERROR [border-color interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/border-image-outset-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/border-image-outset-interpolation.html.ini index 96f888b78fb..3847c277f7b 100644 --- a/tests/wpt/metadata/css/css-backgrounds/animations/border-image-outset-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-backgrounds/animations/border-image-outset-interpolation.html.ini @@ -1,4 +1,5 @@ [border-image-outset-interpolation.html] + expected: ERROR [border-image-outset interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/border-image-slice-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/border-image-slice-interpolation.html.ini index 7dd3d364d85..1cc3b63b10e 100644 --- a/tests/wpt/metadata/css/css-backgrounds/animations/border-image-slice-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-backgrounds/animations/border-image-slice-interpolation.html.ini @@ -1,4 +1,5 @@ [border-image-slice-interpolation.html] + expected: ERROR [border-image-slice interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/border-image-source-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/border-image-source-interpolation.html.ini index 51817f63dfa..246ab3baf12 100644 --- a/tests/wpt/metadata/css/css-backgrounds/animations/border-image-source-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-backgrounds/animations/border-image-source-interpolation.html.ini @@ -1,4 +1,5 @@ [border-image-source-interpolation.html] + expected: ERROR [border-image-source interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/border-image-width-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/border-image-width-interpolation.html.ini index 7f71caea3b3..66174906c6a 100644 --- a/tests/wpt/metadata/css/css-backgrounds/animations/border-image-width-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-backgrounds/animations/border-image-width-interpolation.html.ini @@ -1,4 +1,5 @@ [border-image-width-interpolation.html] + expected: ERROR [border-image-width interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/border-radius-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/border-radius-interpolation.html.ini index 211695f850a..5572f3b9754 100644 --- a/tests/wpt/metadata/css/css-backgrounds/animations/border-radius-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-backgrounds/animations/border-radius-interpolation.html.ini @@ -1,4 +1,5 @@ [border-radius-interpolation.html] + expected: ERROR [border-radius interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/border-width-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/border-width-interpolation.html.ini index 09fe4f7ed4b..ba1236f53f7 100644 --- a/tests/wpt/metadata/css/css-backgrounds/animations/border-width-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-backgrounds/animations/border-width-interpolation.html.ini @@ -1,4 +1,5 @@ [border-width-interpolation.html] + expected: ERROR [border-width interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/box-shadow-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/box-shadow-interpolation.html.ini index 88df625ed31..2b13dd777be 100644 --- a/tests/wpt/metadata/css/css-backgrounds/animations/box-shadow-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-backgrounds/animations/box-shadow-interpolation.html.ini @@ -1,4 +1,5 @@ [box-shadow-interpolation.html] + expected: ERROR [box-shadow-interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/inheritance.sub.html.ini b/tests/wpt/metadata/css/css-backgrounds/inheritance.sub.html.ini index a845c87b205..a22655943a0 100644 --- a/tests/wpt/metadata/css/css-backgrounds/inheritance.sub.html.ini +++ b/tests/wpt/metadata/css/css-backgrounds/inheritance.sub.html.ini @@ -1,4 +1,5 @@ [inheritance.sub.html] + expected: ERROR [Inheritance of CSS Backgrounds and Borders properties] expected: FAIL diff --git a/tests/wpt/metadata/css/css-color/animation/color-interpolation.html.ini b/tests/wpt/metadata/css/css-color/animation/color-interpolation.html.ini index ffb8d4d40b4..6aebd4bda19 100644 --- a/tests/wpt/metadata/css/css-color/animation/color-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-color/animation/color-interpolation.html.ini @@ -1,4 +1,5 @@ [color-interpolation.html] + expected: ERROR [color interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-color/animation/opacity-interpolation.html.ini b/tests/wpt/metadata/css/css-color/animation/opacity-interpolation.html.ini index ffd445b07e8..eb473ba082f 100644 --- a/tests/wpt/metadata/css/css-color/animation/opacity-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-color/animation/opacity-interpolation.html.ini @@ -1,4 +1,5 @@ [opacity-interpolation.html] + expected: ERROR [opacity interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-color/parsing/color-valid.html.ini b/tests/wpt/metadata/css/css-color/parsing/color-valid.html.ini new file mode 100644 index 00000000000..bc52d28869d --- /dev/null +++ b/tests/wpt/metadata/css/css-color/parsing/color-valid.html.ini @@ -0,0 +1,7 @@ +[color-valid.html] + [e.style['color'\] = "fieldtext" should set the property value] + expected: FAIL + + [e.style['color'\] = "field" should set the property value] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-color/parsing/system-color-valid.html.ini b/tests/wpt/metadata/css/css-color/parsing/system-color-valid.html.ini new file mode 100644 index 00000000000..d2142a9b021 --- /dev/null +++ b/tests/wpt/metadata/css/css-color/parsing/system-color-valid.html.ini @@ -0,0 +1,37 @@ +[system-color-valid.html] + [e.style['color'\] = "HighlightText" should set the property value] + expected: FAIL + + [e.style['color'\] = "ButtonFace" should set the property value] + expected: FAIL + + [e.style['color'\] = "VisitedText" should set the property value] + expected: FAIL + + [e.style['color'\] = "FieldText" should set the property value] + expected: FAIL + + [e.style['color'\] = "Field" should set the property value] + expected: FAIL + + [e.style['color'\] = "GrayText" should set the property value] + expected: FAIL + + [e.style['color'\] = "ActiveText" should set the property value] + expected: FAIL + + [e.style['color'\] = "ButtonText" should set the property value] + expected: FAIL + + [e.style['color'\] = "Highlight" should set the property value] + expected: FAIL + + [e.style['color'\] = "CanvasText" should set the property value] + expected: FAIL + + [e.style['color'\] = "LinkText" should set the property value] + expected: FAIL + + [e.style['color'\] = "Canvas" should set the property value] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/animation/flex-basis-interpolation.html.ini b/tests/wpt/metadata/css/css-flexbox/animation/flex-basis-interpolation.html.ini index 8731ceb86cd..152e807d6df 100644 --- a/tests/wpt/metadata/css/css-flexbox/animation/flex-basis-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-flexbox/animation/flex-basis-interpolation.html.ini @@ -1,4 +1,5 @@ [flex-basis-interpolation.html] + expected: ERROR [flex-basis interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-flexbox/animation/flex-grow-interpolation.html.ini b/tests/wpt/metadata/css/css-flexbox/animation/flex-grow-interpolation.html.ini index f7414a1ecbe..1e5d4fe74f8 100644 --- a/tests/wpt/metadata/css/css-flexbox/animation/flex-grow-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-flexbox/animation/flex-grow-interpolation.html.ini @@ -1,4 +1,5 @@ [flex-grow-interpolation.html] + expected: ERROR [flex-grow interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-flexbox/animation/flex-shrink-interpolation.html.ini b/tests/wpt/metadata/css/css-flexbox/animation/flex-shrink-interpolation.html.ini index 74f709458cc..e25706009be 100644 --- a/tests/wpt/metadata/css/css-flexbox/animation/flex-shrink-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-flexbox/animation/flex-shrink-interpolation.html.ini @@ -1,4 +1,5 @@ [flex-shrink-interpolation.html] + expected: ERROR [flex-shrink interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-flexbox/animation/order-interpolation.html.ini b/tests/wpt/metadata/css/css-flexbox/animation/order-interpolation.html.ini index e004f85c24c..a7e52670667 100644 --- a/tests/wpt/metadata/css/css-flexbox/animation/order-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-flexbox/animation/order-interpolation.html.ini @@ -1,4 +1,5 @@ [order-interpolation.html] + expected: ERROR [order interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-flexbox/percentage-heights-009.html.ini b/tests/wpt/metadata/css/css-flexbox/percentage-heights-009.html.ini new file mode 100644 index 00000000000..6ca87ccb8a2 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/percentage-heights-009.html.ini @@ -0,0 +1,2 @@ +[percentage-heights-009.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-fonts/animations/font-size-adjust-interpolation.html.ini b/tests/wpt/metadata/css/css-fonts/animations/font-size-adjust-interpolation.html.ini index 0d88804e1be..123c6e59ade 100644 --- a/tests/wpt/metadata/css/css-fonts/animations/font-size-adjust-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-fonts/animations/font-size-adjust-interpolation.html.ini @@ -1,4 +1,5 @@ [font-size-adjust-interpolation.html] + expected: ERROR [font-size-adjust interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-001.html.ini b/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-001.html.ini index cd3b7660d6c..3cc169ca314 100644 --- a/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-001.html.ini +++ b/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-001.html.ini @@ -1,4 +1,5 @@ [font-size-interpolation-001.html] + expected: ERROR [font-size interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-002.html.ini b/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-002.html.ini index 1f20ed1e9a7..c430b0702af 100644 --- a/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-002.html.ini +++ b/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-002.html.ini @@ -1,4 +1,5 @@ [font-size-interpolation-002.html] + expected: ERROR [font-size interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-003.html.ini b/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-003.html.ini index 724e6c41c63..41cc7a482cb 100644 --- a/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-003.html.ini +++ b/tests/wpt/metadata/css/css-fonts/animations/font-size-interpolation-003.html.ini @@ -1,4 +1,5 @@ [font-size-interpolation-003.html] + expected: ERROR [font-size interpolation with zoom] expected: FAIL diff --git a/tests/wpt/metadata/css/css-fonts/animations/font-variation-settings-interpolation.html.ini b/tests/wpt/metadata/css/css-fonts/animations/font-variation-settings-interpolation.html.ini index 28ab2aa6d51..e8f6869ab22 100644 --- a/tests/wpt/metadata/css/css-fonts/animations/font-variation-settings-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-fonts/animations/font-variation-settings-interpolation.html.ini @@ -1,4 +1,5 @@ [font-variation-settings-interpolation.html] + expected: ERROR [font-variation-settings interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-002.tentative.html.ini b/tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-002.tentative.html.ini index 7eca7e70390..f84e4ebffe0 100644 --- a/tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-002.tentative.html.ini +++ b/tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-002.tentative.html.ini @@ -1,4 +1,5 @@ [math-script-level-002.tentative.html] + expected: ERROR [<integer> ; starting from level 50] expected: FAIL diff --git a/tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html.ini b/tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html.ini index 4db4fe6f51f..e75b5bc760f 100644 --- a/tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html.ini +++ b/tests/wpt/metadata/css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html.ini @@ -1,4 +1,5 @@ [math-script-level-004.tentative.html] + expected: ERROR [math-script-level] expected: FAIL diff --git a/tests/wpt/metadata/css/css-images/animations/object-position-interpolation.html.ini b/tests/wpt/metadata/css/css-images/animations/object-position-interpolation.html.ini index 748cf761f86..c0c7c0bf2f2 100644 --- a/tests/wpt/metadata/css/css-images/animations/object-position-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-images/animations/object-position-interpolation.html.ini @@ -1,4 +1,5 @@ [object-position-interpolation.html] + expected: ERROR [object-position-interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/animations/letter-spacing-interpolation.html.ini b/tests/wpt/metadata/css/css-text/animations/letter-spacing-interpolation.html.ini index 10720d01e2f..d36bca23c57 100644 --- a/tests/wpt/metadata/css/css-text/animations/letter-spacing-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-text/animations/letter-spacing-interpolation.html.ini @@ -1,4 +1,5 @@ [letter-spacing-interpolation.html] + expected: ERROR [letter-spacing-interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/animations/text-indent-interpolation.html.ini b/tests/wpt/metadata/css/css-text/animations/text-indent-interpolation.html.ini index b0f38402877..a4ea398608e 100644 --- a/tests/wpt/metadata/css/css-text/animations/text-indent-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-text/animations/text-indent-interpolation.html.ini @@ -1,4 +1,5 @@ [text-indent-interpolation.html] + expected: ERROR [text-indent-interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/animations/word-spacing-interpolation.html.ini b/tests/wpt/metadata/css/css-text/animations/word-spacing-interpolation.html.ini index 9909c7e9051..0725df56802 100644 --- a/tests/wpt/metadata/css/css-text/animations/word-spacing-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-text/animations/word-spacing-interpolation.html.ini @@ -1,4 +1,5 @@ [word-spacing-interpolation.html] + expected: ERROR [word-spacing-interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-017.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-017.html.ini new file mode 100644 index 00000000000..b3bb55e9a17 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-017.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-017.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-005.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-005.html.ini new file mode 100644 index 00000000000..b519af7ce3a --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-005.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-and-white-space-005.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-008.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-008.html.ini new file mode 100644 index 00000000000..58968a23286 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-008.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-and-white-space-008.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-009.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-009.html.ini new file mode 100644 index 00000000000..e791a89089f --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-and-white-space-009.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-and-white-space-009.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html.ini new file mode 100644 index 00000000000..151fa589805 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-overrides-uax-behavior-001.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html.ini new file mode 100644 index 00000000000..1a3d2f43091 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-overrides-uax-behavior-002.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html.ini new file mode 100644 index 00000000000..3487387fb37 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-overrides-uax-behavior-003.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html.ini new file mode 100644 index 00000000000..f4d0422a3bb --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-overrides-uax-behavior-004.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html.ini new file mode 100644 index 00000000000..24877a8d59a --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-overrides-uax-behavior-005.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html.ini new file mode 100644 index 00000000000..2988acb800f --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-overrides-uax-behavior-006.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html.ini new file mode 100644 index 00000000000..a148375d374 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-overrides-uax-behavior-007.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html.ini new file mode 100644 index 00000000000..5383ef5eb82 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-overrides-uax-behavior-008.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html.ini new file mode 100644 index 00000000000..5934f43112a --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-overrides-uax-behavior-009.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html.ini new file mode 100644 index 00000000000..83d18b4594d --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-overrides-uax-behavior-010.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html.ini new file mode 100644 index 00000000000..7cec821ea20 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-overrides-uax-behavior-011.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html.ini new file mode 100644 index 00000000000..fea7d4e2e5e --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-overrides-uax-behavior-012.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html.ini new file mode 100644 index 00000000000..24a2797efb4 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-overrides-uax-behavior-013.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html.ini new file mode 100644 index 00000000000..e4d69eda8d4 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-overrides-uax-behavior-014.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html.ini new file mode 100644 index 00000000000..a402bca6a59 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-overrides-uax-behavior-015.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html.ini new file mode 100644 index 00000000000..0b218fe7acb --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html.ini @@ -0,0 +1,2 @@ +[line-break-anywhere-overrides-uax-behavior-016.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html.ini new file mode 100644 index 00000000000..487ba5fad2f --- /dev/null +++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html.ini @@ -0,0 +1,2 @@ +[overflow-wrap-anywhere-006.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html.ini new file mode 100644 index 00000000000..270e0bf115c --- /dev/null +++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html.ini @@ -0,0 +1,2 @@ +[overflow-wrap-anywhere-007.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html.ini new file mode 100644 index 00000000000..0cf4645059f --- /dev/null +++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html.ini @@ -0,0 +1,2 @@ +[overflow-wrap-anywhere-008.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html.ini new file mode 100644 index 00000000000..e8ffced7a01 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html.ini @@ -0,0 +1,2 @@ +[overflow-wrap-anywhere-009.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html.ini new file mode 100644 index 00000000000..06b8b72b342 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html.ini @@ -0,0 +1,2 @@ +[overflow-wrap-anywhere-010.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html.ini new file mode 100644 index 00000000000..e808a9f1730 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html.ini @@ -0,0 +1,2 @@ +[overflow-wrap-anywhere-inline-001.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html.ini new file mode 100644 index 00000000000..712f0e1b9fc --- /dev/null +++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html.ini @@ -0,0 +1,2 @@ +[overflow-wrap-anywhere-inline-002.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html.ini new file mode 100644 index 00000000000..bde68abaad4 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html.ini @@ -0,0 +1,2 @@ +[overflow-wrap-anywhere-inline-003.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html.ini new file mode 100644 index 00000000000..76fbf3c6de6 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html.ini @@ -0,0 +1,2 @@ +[overflow-wrap-anywhere-inline-004.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-009.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-009.html.ini new file mode 100644 index 00000000000..fb47feebbb9 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-009.html.ini @@ -0,0 +1,2 @@ +[overflow-wrap-break-word-009.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-010.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-010.html.ini new file mode 100644 index 00000000000..da457ab8eba --- /dev/null +++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-010.html.ini @@ -0,0 +1,2 @@ +[overflow-wrap-break-word-010.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html.ini new file mode 100644 index 00000000000..dd7cc7b0711 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html.ini @@ -0,0 +1,2 @@ +[overflow-wrap-min-content-size-005.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html.ini new file mode 100644 index 00000000000..0e1f7bd4623 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html.ini @@ -0,0 +1,2 @@ +[overflow-wrap-min-content-size-006.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html.ini new file mode 100644 index 00000000000..28b5a5c70ff --- /dev/null +++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html.ini @@ -0,0 +1,2 @@ +[overflow-wrap-min-content-size-007.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/text-indent/percentage-value-intrinsic-size.html.ini b/tests/wpt/metadata/css/css-text/text-indent/percentage-value-intrinsic-size.html.ini index b8d7e315d82..7e9b2037766 100644 --- a/tests/wpt/metadata/css/css-text/text-indent/percentage-value-intrinsic-size.html.ini +++ b/tests/wpt/metadata/css/css-text/text-indent/percentage-value-intrinsic-size.html.ini @@ -1,4 +1,5 @@ [percentage-value-intrinsic-size.html] + expected: ERROR [percentage-value-intrinsic-size] expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-014.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-014.html.ini new file mode 100644 index 00000000000..683b54c4520 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-014.html.ini @@ -0,0 +1,2 @@ +[break-spaces-before-first-char-014.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-015.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-015.html.ini new file mode 100644 index 00000000000..3f4a1af7489 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-015.html.ini @@ -0,0 +1,2 @@ +[break-spaces-before-first-char-015.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-016.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-016.html.ini new file mode 100644 index 00000000000..a2be3661272 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-016.html.ini @@ -0,0 +1,2 @@ +[break-spaces-before-first-char-016.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-017.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-017.html.ini new file mode 100644 index 00000000000..12fc5765951 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-017.html.ini @@ -0,0 +1,2 @@ +[break-spaces-before-first-char-017.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-018.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-018.html.ini new file mode 100644 index 00000000000..b584d74aae3 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-before-first-char-018.html.ini @@ -0,0 +1,2 @@ +[break-spaces-before-first-char-018.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-001.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-001.html.ini new file mode 100644 index 00000000000..0a40eef3b5c --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-001.html.ini @@ -0,0 +1,2 @@ +[break-spaces-with-overflow-wrap-001.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-002.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-002.html.ini new file mode 100644 index 00000000000..8f901e2bbc3 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-002.html.ini @@ -0,0 +1,2 @@ +[break-spaces-with-overflow-wrap-002.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-003.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-003.html.ini new file mode 100644 index 00000000000..9099541de3f --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-003.html.ini @@ -0,0 +1,2 @@ +[break-spaces-with-overflow-wrap-003.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-004.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-004.html.ini new file mode 100644 index 00000000000..2de09bb7489 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-004.html.ini @@ -0,0 +1,2 @@ +[break-spaces-with-overflow-wrap-004.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-005.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-005.html.ini new file mode 100644 index 00000000000..a628f2c6a61 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-005.html.ini @@ -0,0 +1,2 @@ +[break-spaces-with-overflow-wrap-005.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-006.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-006.html.ini new file mode 100644 index 00000000000..a802a80f700 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-006.html.ini @@ -0,0 +1,2 @@ +[break-spaces-with-overflow-wrap-006.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-007.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-007.html.ini new file mode 100644 index 00000000000..17362d676fd --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-007.html.ini @@ -0,0 +1,2 @@ +[break-spaces-with-overflow-wrap-007.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-008.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-008.html.ini new file mode 100644 index 00000000000..4f3dd71e757 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-008.html.ini @@ -0,0 +1,2 @@ +[break-spaces-with-overflow-wrap-008.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-009.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-009.html.ini new file mode 100644 index 00000000000..41d52652db6 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-009.html.ini @@ -0,0 +1,2 @@ +[break-spaces-with-overflow-wrap-009.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-010.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-010.html.ini new file mode 100644 index 00000000000..e4c87cfe658 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-with-overflow-wrap-010.html.ini @@ -0,0 +1,2 @@ +[break-spaces-with-overflow-wrap-010.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/pre-wrap-009.html.ini b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-009.html.ini new file mode 100644 index 00000000000..6b908f61ec1 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-009.html.ini @@ -0,0 +1,2 @@ +[pre-wrap-009.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/trailing-space-before-br-001.html.ini b/tests/wpt/metadata/css/css-text/white-space/trailing-space-before-br-001.html.ini index 08a2433c8d4..0809c2d559a 100644 --- a/tests/wpt/metadata/css/css-text/white-space/trailing-space-before-br-001.html.ini +++ b/tests/wpt/metadata/css/css-text/white-space/trailing-space-before-br-001.html.ini @@ -1,4 +1,5 @@ [trailing-space-before-br-001.html] + expected: ERROR [CSS Text: A sequence of collapsible spaces at the end of a line is removed] expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-029.html.ini b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-029.html.ini new file mode 100644 index 00000000000..aa320b774fd --- /dev/null +++ b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-029.html.ini @@ -0,0 +1,2 @@ +[word-break-break-all-029.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-030.html.ini b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-030.html.ini new file mode 100644 index 00000000000..d446bda392d --- /dev/null +++ b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-030.html.ini @@ -0,0 +1,2 @@ +[word-break-break-all-030.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-inline-009.html.ini b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-inline-009.html.ini new file mode 100644 index 00000000000..8b0de9552fc --- /dev/null +++ b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-inline-009.html.ini @@ -0,0 +1,2 @@ +[word-break-break-all-inline-009.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-inline-010.html.ini b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-inline-010.html.ini new file mode 100644 index 00000000000..e3b2f4c4067 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-inline-010.html.ini @@ -0,0 +1,2 @@ +[word-break-break-all-inline-010.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/animation/list-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/list-interpolation.html.ini index d8df35ad03b..9b671ea64ee 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/list-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/list-interpolation.html.ini @@ -1,4 +1,5 @@ [list-interpolation.html] + expected: ERROR [Animation between "scale(2) rotate(0deg) translate(100px)" and "rotate(720deg) scale(2) translate(200px)" at progress 0.25] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/animation/matrix-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/matrix-interpolation.html.ini index 0f05b67d484..062dcee442c 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/matrix-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/matrix-interpolation.html.ini @@ -1,4 +1,5 @@ [matrix-interpolation.html] + expected: ERROR [Animation between "rotateY(360deg)" and "rotateX(720deg)" at progress 0.5] 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 03f2f3fe9d1..1193e3dfa5c 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,5 +1,5 @@ [perspective-interpolation.html] - expected: CRASH + expected: ERROR [ perspective interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/animation/perspective-origin-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/perspective-origin-interpolation.html.ini index 304fe3cbf6f..475a3a37e29 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/perspective-origin-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/perspective-origin-interpolation.html.ini @@ -1,4 +1,5 @@ [perspective-origin-interpolation.html] + expected: ERROR [perspective-origin interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/animation/rotate-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/rotate-interpolation.html.ini index 906dc2eaf07..c09d1696d8f 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/rotate-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/rotate-interpolation.html.ini @@ -1,4 +1,5 @@ [rotate-interpolation.html] + expected: ERROR [Animation between "100deg" and "180deg" at progress -1] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/animation/scale-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/scale-interpolation.html.ini index 18fe2ce3054..c4daaea26d0 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/scale-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/scale-interpolation.html.ini @@ -1,4 +1,5 @@ [scale-interpolation.html] + expected: ERROR [Animation between "2 30 400" and "10 110 1200" at progress -1] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-001.html.ini b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-001.html.ini index e8fd8821a07..4ea34ca69cd 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-001.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-001.html.ini @@ -1,4 +1,5 @@ [transform-interpolation-001.html] + expected: ERROR [transform interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-002.html.ini b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-002.html.ini index 8274a11ba82..ab072437844 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-002.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-002.html.ini @@ -1,4 +1,5 @@ [transform-interpolation-002.html] + expected: ERROR [transform interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-003.html.ini b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-003.html.ini index 36fdde14172..eeeb89a8175 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-003.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-003.html.ini @@ -1,4 +1,5 @@ [transform-interpolation-003.html] + expected: ERROR [transform interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini index ca24607724d..477238cc89d 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini @@ -1,4 +1,5 @@ [transform-interpolation-004.html] + expected: ERROR [transform interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-005.html.ini b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-005.html.ini index 79ab5ae1a0f..74b4381cf8c 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-005.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-005.html.ini @@ -1,4 +1,5 @@ [transform-interpolation-005.html] + expected: ERROR [transform interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-006.html.ini b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-006.html.ini index 7f8c63ad11f..bc7061336f3 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-006.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-006.html.ini @@ -1,4 +1,5 @@ [transform-interpolation-006.html] + expected: ERROR [transform interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/animation/transform-origin-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/transform-origin-interpolation.html.ini index 28191ed3360..6c8104cccca 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/transform-origin-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/transform-origin-interpolation.html.ini @@ -1,4 +1,5 @@ [transform-origin-interpolation.html] + expected: ERROR [transform-origin interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/animation/translate-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/translate-interpolation.html.ini index 88830acf249..bffca51359d 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/translate-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/translate-interpolation.html.ini @@ -1,4 +1,5 @@ [translate-interpolation.html] + expected: ERROR [Animation between "220px 240px 260px" and "300px 400px 500px" at progress -1] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transitions/animations/text-shadow-interpolation.html.ini b/tests/wpt/metadata/css/css-transitions/animations/text-shadow-interpolation.html.ini index 6619bd4efa4..1e38244ddb7 100644 --- a/tests/wpt/metadata/css/css-transitions/animations/text-shadow-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-transitions/animations/text-shadow-interpolation.html.ini @@ -1,4 +1,5 @@ [text-shadow-interpolation.html] + expected: ERROR [text-shadow interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-ui/animation/caret-color-interpolation.html.ini b/tests/wpt/metadata/css/css-ui/animation/caret-color-interpolation.html.ini index b5e7460ffea..8920c4dacee 100644 --- a/tests/wpt/metadata/css/css-ui/animation/caret-color-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-ui/animation/caret-color-interpolation.html.ini @@ -1,4 +1,5 @@ [caret-color-interpolation.html] + expected: ERROR [caret-color interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-ui/animation/outline-color-interpolation.html.ini b/tests/wpt/metadata/css/css-ui/animation/outline-color-interpolation.html.ini index 2c952b88f44..cbd9d0788c0 100644 --- a/tests/wpt/metadata/css/css-ui/animation/outline-color-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-ui/animation/outline-color-interpolation.html.ini @@ -1,4 +1,5 @@ [outline-color-interpolation.html] + expected: ERROR [outline-color interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-ui/animation/outline-offset-interpolation.html.ini b/tests/wpt/metadata/css/css-ui/animation/outline-offset-interpolation.html.ini index 95b3f144828..12a28490f5d 100644 --- a/tests/wpt/metadata/css/css-ui/animation/outline-offset-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-ui/animation/outline-offset-interpolation.html.ini @@ -1,4 +1,5 @@ [outline-offset-interpolation.html] + expected: ERROR [outline-offset interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-ui/animation/outline-width-interpolation.html.ini b/tests/wpt/metadata/css/css-ui/animation/outline-width-interpolation.html.ini index e28aceaf698..c996d09746e 100644 --- a/tests/wpt/metadata/css/css-ui/animation/outline-width-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-ui/animation/outline-width-interpolation.html.ini @@ -1,4 +1,5 @@ [outline-width-interpolation.html] + expected: ERROR [outline-width interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-ui/inheritance.html.ini b/tests/wpt/metadata/css/css-ui/inheritance.html.ini index 29c2c73cf2e..2acff700c53 100644 --- a/tests/wpt/metadata/css/css-ui/inheritance.html.ini +++ b/tests/wpt/metadata/css/css-ui/inheritance.html.ini @@ -1,4 +1,5 @@ [inheritance.html] + expected: ERROR [Inheritance of CSS Basic User Interface properties] expected: FAIL diff --git a/tests/wpt/metadata/css/css-ui/text-overflow-023.html.ini b/tests/wpt/metadata/css/css-ui/text-overflow-023.html.ini index a8c8c4e9460..c712fc94363 100644 --- a/tests/wpt/metadata/css/css-ui/text-overflow-023.html.ini +++ b/tests/wpt/metadata/css/css-ui/text-overflow-023.html.ini @@ -1,4 +1,5 @@ [text-overflow-023.html] + expected: ERROR [Checks hit testing on the ellipsis] expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-handleEvent.html.ini b/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-handleEvent.html.ini index 7b7f0e1bdf6..9997350495a 100644 --- a/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-handleEvent.html.ini +++ b/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-handleEvent.html.ini @@ -9,6 +9,3 @@ [throws if handleEvent is thruthy and not callable] expected: NOTRUN - [doesn't look up handleEvent method on callable event listeners] - expected: FAIL - diff --git a/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini b/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini index 7fe95a6c291..628b1fab770 100644 --- a/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini +++ b/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini @@ -2,6 +2,3 @@ [listeners are called when <iframe> is resized] expected: FAIL - [listener that was added twice is called only once] - expected: FAIL - diff --git a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-shadowroot.html.ini b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-shadowroot.html.ini index 1a43f8602aa..3cc5f4ef8dc 100644 --- a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-shadowroot.html.ini +++ b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-shadowroot.html.ini @@ -1,4 +1,5 @@ [elementsFromPoint-shadowroot.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/getBoundingClientRect-empty-inline.html.ini b/tests/wpt/metadata/css/cssom-view/getBoundingClientRect-empty-inline.html.ini index 6042e6fb0d9..41496263048 100644 --- a/tests/wpt/metadata/css/cssom-view/getBoundingClientRect-empty-inline.html.ini +++ b/tests/wpt/metadata/css/cssom-view/getBoundingClientRect-empty-inline.html.ini @@ -1,4 +1,5 @@ [getBoundingClientRect-empty-inline.html] + expected: ERROR [getBoundingClientRect-empty-inline] 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 deleted file mode 100644 index e6e1f29e274..00000000000 --- a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[matchMedia-display-none-iframe.html] - expected: ERROR diff --git a/tests/wpt/metadata/css/cssom-view/scroll-behavior-default-css.html.ini b/tests/wpt/metadata/css/cssom-view/scroll-behavior-default-css.html.ini index 25fa33a4445..d7c4db59af4 100644 --- a/tests/wpt/metadata/css/cssom-view/scroll-behavior-default-css.html.ini +++ b/tests/wpt/metadata/css/cssom-view/scroll-behavior-default-css.html.ini @@ -1,4 +1,5 @@ [scroll-behavior-default-css.html] + expected: ERROR [Testing default value of scroll-behavior] expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/scroll-behavior-element.html.ini b/tests/wpt/metadata/css/cssom-view/scroll-behavior-element.html.ini index 12d8a3aacc0..8b4fc5d7182 100644 --- a/tests/wpt/metadata/css/cssom-view/scroll-behavior-element.html.ini +++ b/tests/wpt/metadata/css/cssom-view/scroll-behavior-element.html.ini @@ -1,4 +1,5 @@ [scroll-behavior-element.html] + expected: ERROR [Testing scrollOptions' behavior for Element.scroll* and scroll-behavior on an element] expected: FAIL diff --git a/tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable.html.ini b/tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable.html.ini index de84b9ffb05..2522fbd811f 100644 --- a/tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable.html.ini +++ b/tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable.html.ini @@ -1,4 +1,5 @@ [CSSStyleSheet-constructable.html] + expected: ERROR [CSSStyleSheet constructor and adoptedStyleSheets] expected: FAIL diff --git a/tests/wpt/metadata/css/cssom/computed-style-003.html.ini b/tests/wpt/metadata/css/cssom/computed-style-003.html.ini index 380a8e3071c..31e762a1b14 100644 --- a/tests/wpt/metadata/css/cssom/computed-style-003.html.ini +++ b/tests/wpt/metadata/css/cssom/computed-style-003.html.ini @@ -1,4 +1,5 @@ [computed-style-003.html] + expected: ERROR [CSS Test: getComputedStyle - resolved width in iframe dynamic display] expected: FAIL diff --git a/tests/wpt/metadata/css/cssom/computed-style-004.html.ini b/tests/wpt/metadata/css/cssom/computed-style-004.html.ini index 9c24cfd9cc9..4fd7fd29e54 100644 --- a/tests/wpt/metadata/css/cssom/computed-style-004.html.ini +++ b/tests/wpt/metadata/css/cssom/computed-style-004.html.ini @@ -1,4 +1,5 @@ [computed-style-004.html] + expected: ERROR [CSS Test: getComputedStyle - resolved width in nested iframes dynamic width] expected: FAIL diff --git a/tests/wpt/metadata/css/cssom/selectorText-modification-restyle-002.html.ini b/tests/wpt/metadata/css/cssom/selectorText-modification-restyle-002.html.ini index d9572003e6e..137085e3a5a 100644 --- a/tests/wpt/metadata/css/cssom/selectorText-modification-restyle-002.html.ini +++ b/tests/wpt/metadata/css/cssom/selectorText-modification-restyle-002.html.ini @@ -1,4 +1,5 @@ [selectorText-modification-restyle-002.html] + expected: ERROR [CSSOM: Modify selectorText in a shadow tree stylesheet] expected: FAIL diff --git a/tests/wpt/metadata/css/cssom/serialize-media-rule.html.ini b/tests/wpt/metadata/css/cssom/serialize-media-rule.html.ini new file mode 100644 index 00000000000..913fbe04c31 --- /dev/null +++ b/tests/wpt/metadata/css/cssom/serialize-media-rule.html.ini @@ -0,0 +1,16 @@ +[serialize-media-rule.html] + [features - character case normalization] + expected: FAIL + + [features - lexicographical sorting] + expected: FAIL + + [type - omission of all] + expected: FAIL + + [media query list] + expected: FAIL + + [type - inclusion of negated all] + expected: FAIL + diff --git a/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-001.html.ini b/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-001.html.ini index 5d7f8796d97..cb2f1b0b706 100644 --- a/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-001.html.ini +++ b/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-001.html.ini @@ -1,4 +1,5 @@ [backdrop-filter-interpolation-001.html] + expected: ERROR [Animation between "hue-rotate(0deg) blur(6px)" and "hue-rotate(180deg) blur(10px)" at progress -0.5] expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-002.html.ini b/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-002.html.ini index f577004565d..5bcb8d12b43 100644 --- a/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-002.html.ini +++ b/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-002.html.ini @@ -1,4 +1,5 @@ [backdrop-filter-interpolation-002.html] + expected: ERROR [Animation between "grayscale(0) blur(0px)" and "blur(10px)" at progress -1] expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-003.html.ini b/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-003.html.ini index eabb55d0bca..d471737879d 100644 --- a/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-003.html.ini +++ b/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-003.html.ini @@ -1,4 +1,5 @@ [backdrop-filter-interpolation-003.html] + expected: ERROR [Animation between "url("#svgfilter")" and "none" at progress 0.4] expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-004.html.ini b/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-004.html.ini index 564c9372100..77849b1233b 100644 --- a/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-004.html.ini +++ b/tests/wpt/metadata/css/filter-effects/animation/backdrop-filter-interpolation-004.html.ini @@ -1,4 +1,5 @@ [backdrop-filter-interpolation-004.html] + expected: ERROR ["hue-rotate()" and "hue-rotate(360deg)" are valid backdrop-filter values] expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-001.html.ini b/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-001.html.ini index 2f20c669201..a6dbfa24368 100644 --- a/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-001.html.ini +++ b/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-001.html.ini @@ -1,4 +1,5 @@ [filter-interpolation-001.html] + expected: ERROR [Animation between "hue-rotate(0deg) blur(6px)" and "hue-rotate(180deg) blur(10px)" at progress -0.5] expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-002.html.ini b/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-002.html.ini index e931a047283..4ea39f01976 100644 --- a/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-002.html.ini +++ b/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-002.html.ini @@ -1,4 +1,5 @@ [filter-interpolation-002.html] + expected: ERROR [Animation between "grayscale(0) blur(0px)" and "blur(10px)" at progress -1] expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-003.html.ini b/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-003.html.ini index f31c629dda3..8574d390afe 100644 --- a/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-003.html.ini +++ b/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-003.html.ini @@ -1,4 +1,5 @@ [filter-interpolation-003.html] + expected: ERROR [Animation between "url("#svgfilter")" and "none" at progress 0.4] expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-004.html.ini b/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-004.html.ini index f3f3d56398b..5739f28b2f0 100644 --- a/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-004.html.ini +++ b/tests/wpt/metadata/css/filter-effects/animation/filter-interpolation-004.html.ini @@ -1,4 +1,5 @@ [filter-interpolation-004.html] + expected: ERROR [Animation between "saturate(0)" and "saturate()" at progress 1] expected: FAIL diff --git a/tests/wpt/metadata/css/selectors/scope-selector.html.ini b/tests/wpt/metadata/css/selectors/scope-selector.html.ini index b7531ec39c3..fd84efe25e9 100644 --- a/tests/wpt/metadata/css/selectors/scope-selector.html.ini +++ b/tests/wpt/metadata/css/selectors/scope-selector.html.ini @@ -1,4 +1,5 @@ [scope-selector.html] + expected: ERROR [scope-selector] expected: FAIL diff --git a/tests/wpt/metadata/css/selectors/selectors-case-sensitive-001.html.ini b/tests/wpt/metadata/css/selectors/selectors-case-sensitive-001.html.ini index 74a463596ec..809a1d9ef46 100644 --- a/tests/wpt/metadata/css/selectors/selectors-case-sensitive-001.html.ini +++ b/tests/wpt/metadata/css/selectors/selectors-case-sensitive-001.html.ini @@ -1,4 +1,5 @@ [selectors-case-sensitive-001.html] + expected: ERROR [Test element names are case-insensitive only in ASCII range] expected: FAIL diff --git a/tests/wpt/metadata/custom-elements/CustomElementRegistry.html.ini b/tests/wpt/metadata/custom-elements/CustomElementRegistry.html.ini index a7e5de384be..4ed40c47a80 100644 --- a/tests/wpt/metadata/custom-elements/CustomElementRegistry.html.ini +++ b/tests/wpt/metadata/custom-elements/CustomElementRegistry.html.ini @@ -27,3 +27,9 @@ [customElements.define must get four additional callbacks on the prototype if formAssociated is converted to true] expected: FAIL + [customElements.define must get "prototype", "disabledFeatures", and "formAssociated" property of the constructor] + expected: FAIL + + [customElements.define must not throw when defining another custom element in a different global object during Get(constructor, "prototype")] + expected: FAIL + diff --git a/tests/wpt/metadata/custom-elements/form-associated/ElementInternals-accessibility.html.ini b/tests/wpt/metadata/custom-elements/form-associated/ElementInternals-accessibility.html.ini index 7a345843157..4e156a3bee5 100644 --- a/tests/wpt/metadata/custom-elements/form-associated/ElementInternals-accessibility.html.ini +++ b/tests/wpt/metadata/custom-elements/form-associated/ElementInternals-accessibility.html.ini @@ -1,4 +1,5 @@ [ElementInternals-accessibility.html] + expected: ERROR [ElementInternals-accessibility] expected: FAIL diff --git a/tests/wpt/metadata/custom-elements/form-associated/form-associated-callback.html.ini b/tests/wpt/metadata/custom-elements/form-associated/form-associated-callback.html.ini index 1212937cf2c..b8cdaa655eb 100644 --- a/tests/wpt/metadata/custom-elements/form-associated/form-associated-callback.html.ini +++ b/tests/wpt/metadata/custom-elements/form-associated/form-associated-callback.html.ini @@ -1,4 +1,5 @@ [form-associated-callback.html] + expected: ERROR [formAssociatedCallback, and form IDL attribute of ElementInternals] expected: FAIL diff --git a/tests/wpt/metadata/custom-elements/pseudo-class-defined.html.ini b/tests/wpt/metadata/custom-elements/pseudo-class-defined.html.ini index 5b454f6f731..1739e94c1d0 100644 --- a/tests/wpt/metadata/custom-elements/pseudo-class-defined.html.ini +++ b/tests/wpt/metadata/custom-elements/pseudo-class-defined.html.ini @@ -1,4 +1,5 @@ [pseudo-class-defined.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/custom-elements/reactions/HTMLSlotElement.html.ini b/tests/wpt/metadata/custom-elements/reactions/HTMLSlotElement.html.ini index 45e29f22add..afa63b5fc2e 100644 --- a/tests/wpt/metadata/custom-elements/reactions/HTMLSlotElement.html.ini +++ b/tests/wpt/metadata/custom-elements/reactions/HTMLSlotElement.html.ini @@ -1,4 +1,5 @@ [HTMLSlotElement.html] + expected: ERROR [Custom Elements: CEReactions on HTMLSlotElement interface] expected: FAIL diff --git a/tests/wpt/metadata/dom/events/relatedTarget.window.js.ini b/tests/wpt/metadata/dom/events/relatedTarget.window.js.ini index 23f0c5a1de7..128a3ace13b 100644 --- a/tests/wpt/metadata/dom/events/relatedTarget.window.js.ini +++ b/tests/wpt/metadata/dom/events/relatedTarget.window.js.ini @@ -1,4 +1,5 @@ [relatedTarget.window.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/dom/events/shadow-relatedTarget.html.ini b/tests/wpt/metadata/dom/events/shadow-relatedTarget.html.ini index 464494a62d5..5df95591a62 100644 --- a/tests/wpt/metadata/dom/events/shadow-relatedTarget.html.ini +++ b/tests/wpt/metadata/dom/events/shadow-relatedTarget.html.ini @@ -1,4 +1,5 @@ [shadow-relatedTarget.html] + expected: ERROR [shadow-relatedTarget] expected: FAIL diff --git a/tests/wpt/metadata/dom/idlharness.any.js.ini b/tests/wpt/metadata/dom/idlharness.any.js.ini index feb1adea725..f57baac9c25 100644 --- a/tests/wpt/metadata/dom/idlharness.any.js.ini +++ b/tests/wpt/metadata/dom/idlharness.any.js.ini @@ -112,11 +112,13 @@ [idlharness.any.sharedworker.html] + expected: ERROR [idlharness] expected: FAIL [idlharness.any.serviceworker.html] + expected: ERROR [idlharness] expected: FAIL diff --git a/tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini b/tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini deleted file mode 100644 index c3916f8555d..00000000000 --- a/tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[contenttype_txt.html] - expected: CRASH diff --git a/tests/wpt/metadata/dom/nodes/aria-element-reflection.tentative.html.ini b/tests/wpt/metadata/dom/nodes/aria-element-reflection.tentative.html.ini index a1844eee9e0..aac403287a5 100644 --- a/tests/wpt/metadata/dom/nodes/aria-element-reflection.tentative.html.ini +++ b/tests/wpt/metadata/dom/nodes/aria-element-reflection.tentative.html.ini @@ -44,3 +44,9 @@ [aria-describedby.] expected: FAIL + [Moving explicitly set elements around within the same scope, and removing from the DOM.] + expected: FAIL + + [Moving explicitly set elements across shadow DOM boundaries.] + expected: FAIL + diff --git a/tests/wpt/metadata/encoding/idlharness.any.js.ini b/tests/wpt/metadata/encoding/idlharness.any.js.ini index 33154a7b0ab..7675a1f79f0 100644 --- a/tests/wpt/metadata/encoding/idlharness.any.js.ini +++ b/tests/wpt/metadata/encoding/idlharness.any.js.ini @@ -1,4 +1,5 @@ [idlharness.any.sharedworker.html] + expected: ERROR [Untitled] expected: FAIL @@ -161,6 +162,7 @@ [idlharness.any.serviceworker.html] + expected: ERROR [idlharness] expected: FAIL diff --git a/tests/wpt/metadata/encoding/streams/backpressure.any.js.ini b/tests/wpt/metadata/encoding/streams/backpressure.any.js.ini index e1b71d7aeb4..b51399b7066 100644 --- a/tests/wpt/metadata/encoding/streams/backpressure.any.js.ini +++ b/tests/wpt/metadata/encoding/streams/backpressure.any.js.ini @@ -1,9 +1,11 @@ [backpressure.any.serviceworker.html] + expected: ERROR [backpressure] expected: FAIL [backpressure.any.sharedworker.html] + expected: ERROR [backpressure] expected: FAIL diff --git a/tests/wpt/metadata/encoding/streams/decode-attributes.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-attributes.any.js.ini index 76a665146c5..9800e08b7fe 100644 --- a/tests/wpt/metadata/encoding/streams/decode-attributes.any.js.ini +++ b/tests/wpt/metadata/encoding/streams/decode-attributes.any.js.ini @@ -1,7 +1,9 @@ [decode-attributes.any.serviceworker.html] + expected: ERROR [decode-attributes] expected: FAIL + [decode-attributes.any.worker.html] [a throwing fatal member should cause the constructor to throw] expected: FAIL @@ -89,6 +91,7 @@ [decode-attributes.any.sharedworker.html] + expected: ERROR [decode-attributes] expected: FAIL @@ -177,3 +180,4 @@ [encoding attribute should have correct value for 'ascii'] expected: FAIL + diff --git a/tests/wpt/metadata/encoding/streams/decode-bad-chunks.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-bad-chunks.any.js.ini index 935cc74fc1a..4a41d7010bd 100644 --- a/tests/wpt/metadata/encoding/streams/decode-bad-chunks.any.js.ini +++ b/tests/wpt/metadata/encoding/streams/decode-bad-chunks.any.js.ini @@ -51,11 +51,13 @@ [decode-bad-chunks.any.serviceworker.html] + expected: ERROR [decode-bad-chunks] expected: FAIL [decode-bad-chunks.any.sharedworker.html] + expected: ERROR [decode-bad-chunks] expected: FAIL diff --git a/tests/wpt/metadata/encoding/streams/decode-ignore-bom.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-ignore-bom.any.js.ini index 48d11586b1e..0d862d2cbdc 100644 --- a/tests/wpt/metadata/encoding/streams/decode-ignore-bom.any.js.ini +++ b/tests/wpt/metadata/encoding/streams/decode-ignore-bom.any.js.ini @@ -35,11 +35,15 @@ [ignoreBOM should work for encoding utf-16le, split at character 0] expected: FAIL + [decode-ignore-bom.any.serviceworker.html] + expected: ERROR [decode-ignore-bom] expected: FAIL + [decode-ignore-bom.any.sharedworker.html] + expected: ERROR [decode-ignore-bom] expected: FAIL diff --git a/tests/wpt/metadata/encoding/streams/decode-incomplete-input.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-incomplete-input.any.js.ini index aca41802b4d..bdab31f0bdf 100644 --- a/tests/wpt/metadata/encoding/streams/decode-incomplete-input.any.js.ini +++ b/tests/wpt/metadata/encoding/streams/decode-incomplete-input.any.js.ini @@ -1,8 +1,11 @@ [decode-incomplete-input.any.serviceworker.html] + expected: ERROR [decode-incomplete-input] expected: FAIL + [decode-incomplete-input.any.sharedworker.html] + expected: ERROR [decode-incomplete-input] expected: FAIL diff --git a/tests/wpt/metadata/encoding/streams/decode-non-utf8.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-non-utf8.any.js.ini index 137cf1c54a2..0ba9f98e771 100644 --- a/tests/wpt/metadata/encoding/streams/decode-non-utf8.any.js.ini +++ b/tests/wpt/metadata/encoding/streams/decode-non-utf8.any.js.ini @@ -1,4 +1,5 @@ [decode-non-utf8.any.sharedworker.html] + expected: ERROR [decode-non-utf8] expected: FAIL @@ -68,5 +69,7 @@ [decode-non-utf8.any.serviceworker.html] + expected: ERROR [decode-non-utf8] expected: FAIL + diff --git a/tests/wpt/metadata/encoding/streams/decode-split-character.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-split-character.any.js.ini index 4748271bcaf..b61e013d0e5 100644 --- a/tests/wpt/metadata/encoding/streams/decode-split-character.any.js.ini +++ b/tests/wpt/metadata/encoding/streams/decode-split-character.any.js.ini @@ -1,8 +1,11 @@ [decode-split-character.any.serviceworker.html] + expected: ERROR [decode-split-character] expected: FAIL + [decode-split-character.any.sharedworker.html] + expected: ERROR [decode-split-character] expected: FAIL diff --git a/tests/wpt/metadata/encoding/streams/decode-utf8.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-utf8.any.js.ini index 1af8cbfba5f..0d9fcc85b7b 100644 --- a/tests/wpt/metadata/encoding/streams/decode-utf8.any.js.ini +++ b/tests/wpt/metadata/encoding/streams/decode-utf8.any.js.ini @@ -1,9 +1,11 @@ [decode-utf8.any.serviceworker.html] + expected: ERROR [decode-utf8] expected: FAIL [decode-utf8.any.sharedworker.html] + expected: ERROR [decode-utf8] expected: FAIL diff --git a/tests/wpt/metadata/encoding/streams/encode-bad-chunks.any.js.ini b/tests/wpt/metadata/encoding/streams/encode-bad-chunks.any.js.ini index 436dec1a125..6d4b935e616 100644 --- a/tests/wpt/metadata/encoding/streams/encode-bad-chunks.any.js.ini +++ b/tests/wpt/metadata/encoding/streams/encode-bad-chunks.any.js.ini @@ -39,9 +39,13 @@ [encode-bad-chunks.any.sharedworker.html] + expected: ERROR [encode-bad-chunks] expected: FAIL + [encode-bad-chunks.any.serviceworker.html] + expected: ERROR [encode-bad-chunks] expected: FAIL + diff --git a/tests/wpt/metadata/encoding/streams/encode-utf8.any.js.ini b/tests/wpt/metadata/encoding/streams/encode-utf8.any.js.ini index dde8e15080f..0217ff3921c 100644 --- a/tests/wpt/metadata/encoding/streams/encode-utf8.any.js.ini +++ b/tests/wpt/metadata/encoding/streams/encode-utf8.any.js.ini @@ -117,9 +117,13 @@ [encode-utf8.any.sharedworker.html] + expected: ERROR [encode-utf8] expected: FAIL + [encode-utf8.any.serviceworker.html] + expected: ERROR [encode-utf8] expected: FAIL + diff --git a/tests/wpt/metadata/encoding/streams/readable-writable-properties.any.js.ini b/tests/wpt/metadata/encoding/streams/readable-writable-properties.any.js.ini index 2862a708a06..9a34cc5f946 100644 --- a/tests/wpt/metadata/encoding/streams/readable-writable-properties.any.js.ini +++ b/tests/wpt/metadata/encoding/streams/readable-writable-properties.any.js.ini @@ -13,11 +13,15 @@ [TextEncoderStream readable and writable properties must pass brand checks] expected: FAIL + [readable-writable-properties.any.serviceworker.html] + expected: ERROR [readable-writable-properties] expected: FAIL + [readable-writable-properties.any.sharedworker.html] + expected: ERROR [readable-writable-properties] expected: FAIL diff --git a/tests/wpt/metadata/eventsource/eventsource-constructor-url-bogus.any.js.ini b/tests/wpt/metadata/eventsource/eventsource-constructor-url-bogus.any.js.ini index 471546323cc..9f12870adc2 100644 --- a/tests/wpt/metadata/eventsource/eventsource-constructor-url-bogus.any.js.ini +++ b/tests/wpt/metadata/eventsource/eventsource-constructor-url-bogus.any.js.ini @@ -1,4 +1,5 @@ [eventsource-constructor-url-bogus.any.sharedworker.html] + expected: ERROR [EventSource: constructor (invalid URL)] expected: FAIL @@ -6,6 +7,7 @@ [eventsource-constructor-url-bogus.any.html] [eventsource-constructor-url-bogus.any.serviceworker.html] + expected: ERROR [EventSource: constructor (invalid URL)] expected: FAIL diff --git a/tests/wpt/metadata/fetch/api/abort/destroyed-context.html.ini b/tests/wpt/metadata/fetch/api/abort/destroyed-context.html.ini index 34220250b69..88d469f589b 100644 --- a/tests/wpt/metadata/fetch/api/abort/destroyed-context.html.ini +++ b/tests/wpt/metadata/fetch/api/abort/destroyed-context.html.ini @@ -1,4 +1,5 @@ [destroyed-context.html] + expected: ERROR [destroyed-context] expected: FAIL diff --git a/tests/wpt/metadata/fetch/api/abort/general.any.js.ini b/tests/wpt/metadata/fetch/api/abort/general.any.js.ini index 10e4a5a2ec6..69e5d893134 100644 --- a/tests/wpt/metadata/fetch/api/abort/general.any.js.ini +++ b/tests/wpt/metadata/fetch/api/abort/general.any.js.ini @@ -5,104 +5,152 @@ [general] expected: FAIL + [Aborting rejects with AbortError] expected: FAIL + [Aborting rejects with AbortError - no-cors] expected: FAIL + [TypeError from request constructor takes priority - RequestInit's window is not null] expected: FAIL + [TypeError from request constructor takes priority - Input URL is not valid] expected: FAIL + [TypeError from request constructor takes priority - Input URL has credentials] expected: FAIL + [TypeError from request constructor takes priority - RequestInit's mode is navigate] expected: FAIL + [TypeError from request constructor takes priority - RequestInit's referrer is invalid] expected: FAIL + [TypeError from request constructor takes priority - RequestInit's method is forbidden] expected: FAIL + [TypeError from request constructor takes priority - RequestInit's mode is no-cors and method is not simple] expected: FAIL + [TypeError from request constructor takes priority - RequestInit's cache mode is only-if-cached and mode is not same-origin] expected: FAIL + [TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode cors] expected: FAIL + [TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode no-cors] expected: FAIL + [TypeError from request constructor takes priority - Bad referrerPolicy init parameter value] expected: FAIL + [TypeError from request constructor takes priority - Bad mode init parameter value] expected: FAIL + [TypeError from request constructor takes priority - Bad credentials init parameter value] expected: FAIL + [TypeError from request constructor takes priority - Bad cache init parameter value] expected: FAIL + [TypeError from request constructor takes priority - Bad redirect init parameter value] expected: FAIL + [Request objects have a signal property] expected: FAIL + [Signal on request object] expected: FAIL + [Signal on request object created from request object] expected: FAIL + [Signal on request object created from request object, with signal on second request] expected: FAIL + [Signal on request object created from request object, with signal on second request overriding another] expected: FAIL + [Signal retained after unrelated properties are overridden by fetch] expected: FAIL + [Signal removed by setting to null] expected: FAIL + [Already aborted signal rejects immediately] expected: FAIL + [Request is still 'used' if signal is aborted before fetching] expected: FAIL + [response.arrayBuffer() rejects if already aborted] expected: FAIL + [response.blob() rejects if already aborted] expected: FAIL + [response.formData() rejects if already aborted] expected: FAIL + [response.json() rejects if already aborted] expected: FAIL + [response.text() rejects if already aborted] expected: FAIL + [Already aborted signal does not make request] expected: FAIL + [Already aborted signal can be used for many fetches] expected: FAIL + [Signal can be used to abort other fetches, even if another fetch succeeded before aborting] expected: FAIL + [Underlying connection is closed when aborting after receiving response] expected: FAIL + [Underlying connection is closed when aborting after receiving response - no-cors] expected: FAIL + [Fetch aborted & connection closed when aborted after calling response.arrayBuffer()] expected: FAIL + [Fetch aborted & connection closed when aborted after calling response.blob()] expected: FAIL + [Fetch aborted & connection closed when aborted after calling response.formData()] expected: FAIL + [Fetch aborted & connection closed when aborted after calling response.json()] expected: FAIL + [Fetch aborted & connection closed when aborted after calling response.text()] expected: FAIL + [Stream errors once aborted. Underlying connection closed.] expected: FAIL + [Stream errors once aborted, after reading. Underlying connection closed.] expected: FAIL + [Stream will not error if body is empty. It's closed with an empty queue before it errors.] expected: FAIL + [Readable stream synchronously cancels with AbortError if aborted before reading] expected: FAIL + [Signal state is cloned] expected: FAIL + [Clone aborts with original controller] expected: FAIL [TypeError from request constructor takes priority - RequestInit's method is invalid] expected: FAIL + [general.any.html] type: testharness [Untitled] @@ -110,107 +158,158 @@ [general] expected: FAIL + [Aborting rejects with AbortError] expected: FAIL + [Aborting rejects with AbortError - no-cors] expected: FAIL + [TypeError from request constructor takes priority - RequestInit's window is not null] expected: FAIL + [TypeError from request constructor takes priority - Input URL is not valid] expected: FAIL + [TypeError from request constructor takes priority - Input URL has credentials] expected: FAIL + [TypeError from request constructor takes priority - RequestInit's mode is navigate] expected: FAIL + [TypeError from request constructor takes priority - RequestInit's referrer is invalid] expected: FAIL + [TypeError from request constructor takes priority - RequestInit's method is forbidden] expected: FAIL + [TypeError from request constructor takes priority - RequestInit's mode is no-cors and method is not simple] expected: FAIL + [TypeError from request constructor takes priority - RequestInit's cache mode is only-if-cached and mode is not same-origin] expected: FAIL + [TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode cors] expected: FAIL + [TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode no-cors] expected: FAIL + [TypeError from request constructor takes priority - Bad referrerPolicy init parameter value] expected: FAIL + [TypeError from request constructor takes priority - Bad mode init parameter value] expected: FAIL + [TypeError from request constructor takes priority - Bad credentials init parameter value] expected: FAIL + [TypeError from request constructor takes priority - Bad cache init parameter value] expected: FAIL + [TypeError from request constructor takes priority - Bad redirect init parameter value] expected: FAIL + [TypeError from request constructor takes priority - RequestInit's method is invalid] expected: FAIL + [Request objects have a signal property] expected: FAIL + [Signal on request object] expected: FAIL + [Signal on request object created from request object] expected: FAIL + [Signal on request object created from request object, with signal on second request] expected: FAIL + [Signal on request object created from request object, with signal on second request overriding another] expected: FAIL + [Signal retained after unrelated properties are overridden by fetch] expected: FAIL + [Signal removed by setting to null] expected: FAIL + [Already aborted signal rejects immediately] expected: FAIL + [Request is still 'used' if signal is aborted before fetching] expected: FAIL + [response.arrayBuffer() rejects if already aborted] expected: FAIL + [response.blob() rejects if already aborted] expected: FAIL + [response.formData() rejects if already aborted] expected: FAIL + [response.json() rejects if already aborted] expected: FAIL + [response.text() rejects if already aborted] expected: FAIL + [Already aborted signal does not make request] expected: FAIL + [Already aborted signal can be used for many fetches] expected: FAIL + [Signal can be used to abort other fetches, even if another fetch succeeded before aborting] expected: FAIL + [Underlying connection is closed when aborting after receiving response] expected: FAIL + [Underlying connection is closed when aborting after receiving response - no-cors] expected: FAIL + [Fetch aborted & connection closed when aborted after calling response.arrayBuffer()] expected: FAIL + [Fetch aborted & connection closed when aborted after calling response.blob()] expected: FAIL + [Fetch aborted & connection closed when aborted after calling response.formData()] expected: FAIL + [Fetch aborted & connection closed when aborted after calling response.json()] expected: FAIL + [Fetch aborted & connection closed when aborted after calling response.text()] expected: FAIL + [Stream errors once aborted. Underlying connection closed.] expected: FAIL + [Stream errors once aborted, after reading. Underlying connection closed.] expected: FAIL + [Stream will not error if body is empty. It's closed with an empty queue before it errors.] expected: FAIL + [Readable stream synchronously cancels with AbortError if aborted before reading] expected: FAIL + [Signal state is cloned] expected: FAIL + [Clone aborts with original controller] expected: FAIL + [general.any.serviceworker.html] + expected: ERROR [general] expected: FAIL + [general.https.any.serviceworker.html] expected: TIMEOUT [Untitled] @@ -221,10 +320,10 @@ [general.any.sharedworker.html] + expected: ERROR [Untitled] expected: FAIL [general] expected: FAIL - diff --git a/tests/wpt/metadata/fetch/api/abort/keepalive.html.ini b/tests/wpt/metadata/fetch/api/abort/keepalive.html.ini index 6c374cbc54f..31d9009742b 100644 --- a/tests/wpt/metadata/fetch/api/abort/keepalive.html.ini +++ b/tests/wpt/metadata/fetch/api/abort/keepalive.html.ini @@ -1,4 +1,5 @@ [keepalive.html] + expected: ERROR [keepalive] expected: FAIL diff --git a/tests/wpt/metadata/fetch/api/basic/header-value-combining.any.js.ini b/tests/wpt/metadata/fetch/api/basic/header-value-combining.any.js.ini index c260ef66571..56f05fbdaa5 100644 --- a/tests/wpt/metadata/fetch/api/basic/header-value-combining.any.js.ini +++ b/tests/wpt/metadata/fetch/api/basic/header-value-combining.any.js.ini @@ -51,11 +51,13 @@ [header-value-combining.any.serviceworker.html] + expected: ERROR [header-value-combining] expected: FAIL [header-value-combining.any.sharedworker.html] + expected: ERROR [header-value-combining] expected: FAIL diff --git a/tests/wpt/metadata/fetch/api/basic/header-value-null-byte.any.js.ini b/tests/wpt/metadata/fetch/api/basic/header-value-null-byte.any.js.ini index e065e3b8d06..7bdd2fc562c 100644 --- a/tests/wpt/metadata/fetch/api/basic/header-value-null-byte.any.js.ini +++ b/tests/wpt/metadata/fetch/api/basic/header-value-null-byte.any.js.ini @@ -1,6 +1,7 @@ [header-value-null-byte.any.html] [header-value-null-byte.any.sharedworker.html] + expected: ERROR [header-value-null-byte] expected: FAIL @@ -8,5 +9,7 @@ [header-value-null-byte.any.worker.html] [header-value-null-byte.any.serviceworker.html] + expected: ERROR [header-value-null-byte] expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/basic/integrity.sub.any.js.ini b/tests/wpt/metadata/fetch/api/basic/integrity.sub.any.js.ini index fa99bafd6cc..a68b5430141 100644 --- a/tests/wpt/metadata/fetch/api/basic/integrity.sub.any.js.ini +++ b/tests/wpt/metadata/fetch/api/basic/integrity.sub.any.js.ini @@ -1,4 +1,5 @@ [integrity.sub.any.sharedworker.html] + expected: ERROR [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/fetch/api/basic/stream-safe-creation.any.js.ini b/tests/wpt/metadata/fetch/api/basic/stream-safe-creation.any.js.ini index 45e02e88567..5bd92400715 100644 --- a/tests/wpt/metadata/fetch/api/basic/stream-safe-creation.any.js.ini +++ b/tests/wpt/metadata/fetch/api/basic/stream-safe-creation.any.js.ini @@ -1,8 +1,11 @@ [stream-safe-creation.any.serviceworker.html] + expected: ERROR [stream-safe-creation] expected: FAIL + [stream-safe-creation.any.sharedworker.html] + expected: ERROR [stream-safe-creation] expected: FAIL diff --git a/tests/wpt/metadata/fetch/api/idlharness.any.js.ini b/tests/wpt/metadata/fetch/api/idlharness.any.js.ini index 60fcabdf732..7e1ca25d680 100644 --- a/tests/wpt/metadata/fetch/api/idlharness.any.js.ini +++ b/tests/wpt/metadata/fetch/api/idlharness.any.js.ini @@ -1,4 +1,5 @@ [idlharness.any.serviceworker.html] + expected: ERROR [idlharness] expected: FAIL @@ -164,6 +165,7 @@ [idlharness.any.sharedworker.html] + expected: ERROR [idlharness] expected: FAIL diff --git a/tests/wpt/metadata/fetch/api/request/destination/fetch-destination-frame.https.html.ini b/tests/wpt/metadata/fetch/api/request/destination/fetch-destination-frame.https.html.ini new file mode 100644 index 00000000000..4f632c71918 --- /dev/null +++ b/tests/wpt/metadata/fetch/api/request/destination/fetch-destination-frame.https.html.ini @@ -0,0 +1,7 @@ +[fetch-destination-frame.https.html] + [frame fetches with a "frame" Request.destination] + expected: FAIL + + [Initialize global state] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/request/destination/fetch-destination-iframe.https.html.ini b/tests/wpt/metadata/fetch/api/request/destination/fetch-destination-iframe.https.html.ini index f7d97cc9957..feb3f79c1ec 100644 --- a/tests/wpt/metadata/fetch/api/request/destination/fetch-destination-iframe.https.html.ini +++ b/tests/wpt/metadata/fetch/api/request/destination/fetch-destination-iframe.https.html.ini @@ -1,7 +1,13 @@ [fetch-destination-iframe.https.html] [Fetch destination tests for resources with no load event] expected: FAIL + [Initialize global state] expected: FAIL + [iframe fetches with a "document" Request.destination] expected: FAIL + + [iframe fetches with a "iframe" Request.destination] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/request/request-init-stream.any.js.ini b/tests/wpt/metadata/fetch/api/request/request-init-stream.any.js.ini index 433acff7b54..9548739f4e7 100644 --- a/tests/wpt/metadata/fetch/api/request/request-init-stream.any.js.ini +++ b/tests/wpt/metadata/fetch/api/request/request-init-stream.any.js.ini @@ -19,6 +19,7 @@ [request-init-stream.any.sharedworker.html] + expected: ERROR [request-init-stream] expected: FAIL @@ -44,5 +45,7 @@ [request-init-stream.any.serviceworker.html] + expected: ERROR [request-init-stream] expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/response/response-consume.html.ini b/tests/wpt/metadata/fetch/api/response/response-consume.html.ini index 94ca58262d7..e21f3886737 100644 --- a/tests/wpt/metadata/fetch/api/response/response-consume.html.ini +++ b/tests/wpt/metadata/fetch/api/response/response-consume.html.ini @@ -73,3 +73,6 @@ [Consume response's body: from multipart form data blob to formData] expected: FAIL + [Consume response's body: from text with correct multipart type to formData with BOM] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/response/response-from-stream.any.js.ini b/tests/wpt/metadata/fetch/api/response/response-from-stream.any.js.ini index d55a9df46a1..ada02e692de 100644 --- a/tests/wpt/metadata/fetch/api/response/response-from-stream.any.js.ini +++ b/tests/wpt/metadata/fetch/api/response/response-from-stream.any.js.ini @@ -1,4 +1,5 @@ [response-from-stream.any.sharedworker.html] + expected: ERROR [response-from-stream] expected: FAIL @@ -27,6 +28,9 @@ [Constructing a Response with a stream on which read() is called] expected: FAIL + [response-from-stream.any.serviceworker.html] + expected: ERROR [response-from-stream] 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 8f3c2aded90..de468ea0db0 100644 --- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini @@ -312,21 +312,21 @@ [<iframe>: separate response Content-Type: */* text/html] expected: FAIL - [<iframe>: combined response Content-Type: text/html;" text/plain] + [<iframe>: combined response Content-Type: */* text/html] expected: FAIL - [<iframe>: combined response Content-Type: */* text/html] + [<iframe>: separate response Content-Type: text/html;x=" text/plain] expected: FAIL - [<iframe>: combined response Content-Type: text/html */*] + [<iframe>: separate response Content-Type: text/html;" text/plain] expected: FAIL - [<iframe>: combined response Content-Type: text/html */*;charset=gbk] + [<iframe>: separate response Content-Type: text/html */*;charset=gbk] expected: FAIL - [<iframe>: separate response Content-Type: text/html;x=" text/plain] + [<iframe>: separate response Content-Type: text/plain */*] expected: FAIL - [<iframe>: combined response Content-Type: text/html;" \\" text/plain] + [<iframe>: separate response Content-Type: text/html;" \\" 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 c7413d589dc..279734168dc 100644 --- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini @@ -56,9 +56,6 @@ [separate text/javascript x/x] expected: FAIL - [separate text/javascript;charset=windows-1252 error text/javascript] - expected: FAIL - [separate text/javascript;charset=windows-1252 text/javascript] expected: FAIL diff --git a/tests/wpt/metadata/fetch/cors-rfc1918/idlharness.tentative.any.js.ini b/tests/wpt/metadata/fetch/cors-rfc1918/idlharness.tentative.any.js.ini index 7141075785f..2f1c340daf3 100644 --- a/tests/wpt/metadata/fetch/cors-rfc1918/idlharness.tentative.any.js.ini +++ b/tests/wpt/metadata/fetch/cors-rfc1918/idlharness.tentative.any.js.ini @@ -19,13 +19,18 @@ [WorkerGlobalScope interface: self must inherit property "addressSpace" with the proper type] expected: FAIL + [idlharness.tentative.any.serviceworker.html] + expected: ERROR [idlharness] expected: FAIL + [idlharness.tentative.https.any.serviceworker.html] expected: TIMEOUT [idlharness.tentative.any.sharedworker.html] + expected: ERROR [idlharness] expected: FAIL + diff --git a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.any.js.ini b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.any.js.ini index e3422dbdb00..55e4b8ec274 100644 --- a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.any.js.ini +++ b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.any.js.ini @@ -56,6 +56,7 @@ [fetch.any.sharedworker.html] + expected: ERROR [fetch] expected: FAIL diff --git a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.https.any.js.ini b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.https.any.js.ini index 2f44646bbb5..2c43b33a3a1 100644 --- a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.https.any.js.ini +++ b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.https.any.js.ini @@ -13,11 +13,13 @@ [fetch.https.any.serviceworker.html] + expected: ERROR [fetch] expected: FAIL [fetch.https.any.sharedworker.html] + expected: ERROR [fetch] expected: FAIL diff --git a/tests/wpt/metadata/fetch/metadata/font.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/metadata/font.tentative.https.sub.html.ini index 39b898e8564..c78ebab74f5 100644 --- a/tests/wpt/metadata/fetch/metadata/font.tentative.https.sub.html.ini +++ b/tests/wpt/metadata/fetch/metadata/font.tentative.https.sub.html.ini @@ -1,4 +1,5 @@ [font.tentative.https.sub.html] + expected: ERROR [font] expected: FAIL diff --git a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/font.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/font.tentative.https.sub.html.ini index 39b898e8564..c78ebab74f5 100644 --- a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/font.tentative.https.sub.html.ini +++ b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/font.tentative.https.sub.html.ini @@ -1,4 +1,5 @@ [font.tentative.https.sub.html] + expected: ERROR [font] expected: FAIL diff --git a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-https-downgrade-upgrade.tentative.sub.html.ini b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-https-downgrade-upgrade.tentative.sub.html.ini index 70f7e987b5c..3be5dd74add 100644 --- a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-https-downgrade-upgrade.tentative.sub.html.ini +++ b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-https-downgrade-upgrade.tentative.sub.html.ini @@ -1,4 +1,5 @@ [multiple-redirect-https-downgrade-upgrade.tentative.sub.html] + expected: ERROR [multiple-redirect-https-downgrade-upgrade] expected: FAIL diff --git a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-http-upgrade.tentative.sub.html.ini b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-http-upgrade.tentative.sub.html.ini index 90c6012f913..0378fd64538 100644 --- a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-http-upgrade.tentative.sub.html.ini +++ b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-http-upgrade.tentative.sub.html.ini @@ -1,4 +1,5 @@ [redirect-http-upgrade.tentative.sub.html] + expected: ERROR [redirect-http-upgrade] expected: FAIL diff --git a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-https-downgrade.tentative.sub.html.ini b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-https-downgrade.tentative.sub.html.ini index 6b117e1204f..2a9b3161b0f 100644 --- a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-https-downgrade.tentative.sub.html.ini +++ b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/redirect/redirect-https-downgrade.tentative.sub.html.ini @@ -1,4 +1,5 @@ [redirect-https-downgrade.tentative.sub.html] + expected: ERROR [redirect-https-downgrade] expected: FAIL diff --git a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/sharedworker.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/sharedworker.tentative.https.sub.html.ini index 9aa11216376..9f6f794ddac 100644 --- a/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/sharedworker.tentative.https.sub.html.ini +++ b/tests/wpt/metadata/fetch/metadata/sec-fetch-dest/sharedworker.tentative.https.sub.html.ini @@ -1,4 +1,5 @@ [sharedworker.tentative.https.sub.html] + expected: ERROR [sharedworker] expected: FAIL diff --git a/tests/wpt/metadata/fetch/metadata/sharedworker.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/metadata/sharedworker.tentative.https.sub.html.ini index 9aa11216376..9f6f794ddac 100644 --- a/tests/wpt/metadata/fetch/metadata/sharedworker.tentative.https.sub.html.ini +++ b/tests/wpt/metadata/fetch/metadata/sharedworker.tentative.https.sub.html.ini @@ -1,4 +1,5 @@ [sharedworker.tentative.https.sub.html] + expected: ERROR [sharedworker] 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 a2a0c8f8200..536384f36e1 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 - - [X-Content-Type-Options%3A%20%22nosniFF%22] + [X-Content-Type-Options%3A%20%2Cnosniff] expected: FAIL diff --git a/tests/wpt/metadata/hr-time/idlharness.any.js.ini b/tests/wpt/metadata/hr-time/idlharness.any.js.ini index 154f6beb894..4f414a6521b 100644 --- a/tests/wpt/metadata/hr-time/idlharness.any.js.ini +++ b/tests/wpt/metadata/hr-time/idlharness.any.js.ini @@ -1,9 +1,11 @@ [idlharness.any.serviceworker.html] + expected: ERROR [idlharness] expected: FAIL [idlharness.any.sharedworker.html] + expected: ERROR [idlharness] expected: FAIL @@ -13,3 +15,7 @@ [idlharness] expected: FAIL + +[idlharness.any.html] + +[idlharness.any.worker.html] diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini new file mode 100644 index 00000000000..87b07c3e670 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini @@ -0,0 +1,4 @@ +[traverse_the_history_1.html] + [Multiple history traversals from the same task] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini index 51f8272a6de..dc2e45516de 100644 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini @@ -1,4 +1,4 @@ -[traverse_the_history_3.html] +[traverse_the_history_5.html] [Multiple history traversals, last would be aborted] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini b/tests/wpt/metadata/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini index 83d36d0a1ab..e4f94846eb9 100644 --- a/tests/wpt/metadata/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini +++ b/tests/wpt/metadata/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini @@ -13,7 +13,7 @@ expected: NOTRUN [Access not allowed if different-origin with no 'document.domain' modification. (Sanity check)] - expected: FAIL + expected: TIMEOUT [Access disallowed again if same-origin, both set document-domain to existing value, then one sets to parent.] expected: NOTRUN @@ -22,13 +22,13 @@ expected: NOTRUN [Access allowed if same-origin and both set document.domain to existing value.] - expected: TIMEOUT + expected: NOTRUN [Access is not revoked to Document object when we stop being same effective script origin due to document.domain.] expected: NOTRUN [Access disallowed if same-origin but only one sets document.domain.] - expected: FAIL + expected: NOTRUN [Access evolves correctly for cross-origin objects when we join up via document.domain and then diverge again.] expected: NOTRUN 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 deleted file mode 100644 index 16fa2c5cfc1..00000000000 --- 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 +++ /dev/null @@ -1,4 +0,0 @@ -[creating_browsing_context_test_01.html] - [first argument: absolute url] - expected: FAIL - diff --git a/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini b/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini index fd369192a02..c757b400205 100644 --- a/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini +++ b/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini @@ -1,5 +1,5 @@ [embedded-opener-remove-frame.html] - expected: TIMEOUT + expected: CRASH [opener and "removed" embedded documents] expected: FAIL diff --git a/tests/wpt/metadata/html/dom/usvstring-reflection.html.ini b/tests/wpt/metadata/html/dom/usvstring-reflection.https.html.ini index b69fefe57b4..8036ce5d6a6 100644 --- a/tests/wpt/metadata/html/dom/usvstring-reflection.html.ini +++ b/tests/wpt/metadata/html/dom/usvstring-reflection.https.html.ini @@ -1,31 +1,28 @@ -[usvstring-reflection.html] - [anchor : unpaired surrogate codepoint should be replaced with U+FFFD] +[usvstring-reflection.https.html] + [source : unpaired surrogate codepoint should be replaced with U+FFFD] expected: FAIL - [area : unpaired surrogate codepoint should be replaced with U+FFFD] + [sendBeacon URL: unpaired surrogate codepoint should not make any exceptions.] expected: FAIL - [frame : unpaired surrogate codepoint should be replaced with U+FFFD] + [anchor : unpaired surrogate codepoint should be replaced with U+FFFD] expected: FAIL [iframe : unpaired surrogate codepoint should be replaced with U+FFFD] expected: FAIL - [source : unpaired surrogate codepoint should be replaced with U+FFFD] + [UnregisterPtotocolHandler URL: unpaired surrogate codepoint should not make any exceptions.] expected: FAIL - [sendBeacon URL: unpaired surrogate codepoint should not make any exceptions.] + [frame : unpaired surrogate codepoint should be replaced with U+FFFD] expected: FAIL [RTCDataChannel.send: unpaired surrogate codepoint should be replaced with U+FFFD.] expected: FAIL - [RegisterPtotocolHandler URL: unpaired surrogate codepoint should not make any exceptions.] - expected: FAIL - - [USVString test relate to url] + [area : unpaired surrogate codepoint should be replaced with U+FFFD] expected: FAIL - [UnregisterPtotocolHandler URL: unpaired surrogate codepoint should not make any exceptions.] + [RegisterPtotocolHandler URL: unpaired surrogate codepoint should not make any exceptions.] expected: FAIL diff --git a/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https.html.ini b/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https.html.ini index ae5d111a16c..f268c29af5a 100644 --- a/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https.html.ini +++ b/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https.html.ini @@ -1,4 +1,5 @@ [nested-sharedworker-success.https.html] + expected: ERROR [nested-sharedworker-success] expected: FAIL diff --git a/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.https.html.ini b/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.https.html.ini index 16464a698ff..d0ba2949658 100644 --- a/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.https.html.ini +++ b/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.https.html.ini @@ -2,3 +2,6 @@ [postMessaging to a dedicated sub-worker allows them to see each others' modifications] expected: FAIL + [Bonus: self.crossOriginIsolated] + expected: FAIL + diff --git a/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js.ini b/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js.ini index 3b954375b4c..dce40214302 100644 --- a/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js.ini +++ b/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js.ini @@ -2,8 +2,14 @@ [SharedArrayBuffer over BroadcastChannel without COOP+COEP] expected: FAIL + [Bonus: self.crossOriginIsolated] + expected: FAIL + [no-coop-coep.https.any.html] [SharedArrayBuffer over BroadcastChannel without COOP+COEP] expected: FAIL + [Bonus: self.crossOriginIsolated] + expected: FAIL + diff --git a/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/structured_clone_bigint.html.ini b/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/structured_clone_bigint.html.ini index c3a5aed5e44..ecb3e9b06e2 100644 --- a/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/structured_clone_bigint.html.ini +++ b/tests/wpt/metadata/html/infrastructure/safe-passing-of-structured-data/structured_clone_bigint.html.ini @@ -1,4 +1,5 @@ [structured_clone_bigint.html] + expected: ERROR [2.7 Safe passing of structured data] expected: FAIL diff --git a/tests/wpt/metadata/html/interaction/focus/sequential-focus-navigation-and-the-tabindex-attribute/tabindex-getter.html.ini b/tests/wpt/metadata/html/interaction/focus/sequential-focus-navigation-and-the-tabindex-attribute/tabindex-getter.html.ini index 56f24be109c..b020225a676 100644 --- a/tests/wpt/metadata/html/interaction/focus/sequential-focus-navigation-and-the-tabindex-attribute/tabindex-getter.html.ini +++ b/tests/wpt/metadata/html/interaction/focus/sequential-focus-navigation-and-the-tabindex-attribute/tabindex-getter.html.ini @@ -1,4 +1,5 @@ [tabindex-getter.html] + expected: ERROR [HTML Test: tabIndex getter return value] expected: FAIL diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/form-controls/resets.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/form-controls/resets.html.ini index 66eb9017221..d451152cf95 100644 --- a/tests/wpt/metadata/html/rendering/non-replaced-elements/form-controls/resets.html.ini +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/form-controls/resets.html.ini @@ -1,4 +1,5 @@ [resets.html] + expected: ERROR [default style resets] expected: FAIL diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/tables/form-in-tables.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/tables/form-in-tables.html.ini index c85144d858a..0e5df605971 100644 --- a/tests/wpt/metadata/html/rendering/non-replaced-elements/tables/form-in-tables.html.ini +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/tables/form-in-tables.html.ini @@ -1,4 +1,5 @@ [form-in-tables.html] + expected: ERROR [UA style for form in table elements] expected: FAIL diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html.ini index e76c8d1b88d..a5be7f5d25f 100644 --- a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html.ini +++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html.ini @@ -1,4 +1,5 @@ [fieldset-default-style.html] + expected: ERROR [fieldset default style] expected: FAIL diff --git a/tests/wpt/metadata/html/rendering/pixel-length-attributes.html.ini b/tests/wpt/metadata/html/rendering/pixel-length-attributes.html.ini index fb11c5b5972..2a803ae9937 100644 --- a/tests/wpt/metadata/html/rendering/pixel-length-attributes.html.ini +++ b/tests/wpt/metadata/html/rendering/pixel-length-attributes.html.ini @@ -1,4 +1,5 @@ [pixel-length-attributes.html] + expected: ERROR [<iframe marginheight="200%"> mapping to marginBottom] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini index fc37df7e3fa..2a166bb97b7 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini @@ -1,6 +1,6 @@ [iframe_sandbox_popups_escaping-1.html] type: testharness - expected: TIMEOUT + expected: CRASH [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini index 5f60c78e73c..f6a7aca3306 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini @@ -1,6 +1,5 @@ [iframe_sandbox_popups_escaping-3.html] type: testharness - expected: TIMEOUT [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini index 9df1ac56f2a..963d4cd20ef 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini @@ -1,6 +1,6 @@ [iframe_sandbox_popups_nonescaping-1.html] type: testharness - expected: TIMEOUT + expected: CRASH [Check that popups from a sandboxed iframe do not escape the sandbox] expected: NOTRUN diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini index e440b1e38c6..dc856a3d5a3 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini @@ -1,6 +1,5 @@ [iframe_sandbox_popups_nonescaping-3.html] type: testharness - expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html.ini index d2ab0585208..574e63e8e33 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html.ini @@ -9,3 +9,6 @@ [Adding `srcdoc` attribute triggers attributes processing] expected: TIMEOUT + [Setting `srcdoc` (via property) triggers attributes processing] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini new file mode 100644 index 00000000000..8cc42056d34 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini @@ -0,0 +1,10 @@ +[non-active-document.html] + [DOMParser] + expected: FAIL + + [createHTMLDocument] + expected: FAIL + + [<template>] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/the-button-element/button-submit-children.html.ini b/tests/wpt/metadata/html/semantics/forms/the-button-element/button-submit-children.html.ini deleted file mode 100644 index dbb4c200800..00000000000 --- a/tests/wpt/metadata/html/semantics/forms/the-button-element/button-submit-children.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[button-submit-children.html] - expected: TIMEOUT - [This test will pass if a form navigation successfully occurs when clicking a child element of a <button type=submit> element with a onclick event handler which prevents the default form submission and manually calls form.submit() instead.] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepdown.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepdown.html.ini index 46ddfb1b695..d500a0cc36d 100644 --- a/tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepdown.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepdown.html.ini @@ -1,5 +1,6 @@ [input-stepdown.html] type: testharness + expected: ERROR [Forms] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepup.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepup.html.ini index f0162971327..40487438cbf 100644 --- a/tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepup.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/the-input-element/input-stepup.html.ini @@ -1,5 +1,6 @@ [input-stepup.html] type: testharness + expected: ERROR [Forms] 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 new file mode 100644 index 00000000000..9e522297c94 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini @@ -0,0 +1,7 @@ +[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/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html.ini new file mode 100644 index 00000000000..0892d7e70a6 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html.ini @@ -0,0 +1,4 @@ +[dialog-autofocus-just-once.html] + [An autofocus element in a dialog element should not try to get focus twice.] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html.ini new file mode 100644 index 00000000000..ef83cced9b2 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html.ini @@ -0,0 +1,4 @@ +[dialog-focusing-steps-prevent-autofocus.html] + [After showing a dialog, non-dialog autofocus processing won't work.] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/084.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/084.html.ini index 6268eb738fb..d602b485be6 100644 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/084.html.ini +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/084.html.ini @@ -1,5 +1,6 @@ [084.html] type: testharness + expected: ERROR [ scheduler: event listener defined by script in a removed IFRAME] expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.js.ini b/tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.js.ini index f1a0f0f5a60..bc0b6e224ce 100644 --- a/tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.js.ini +++ b/tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.js.ini @@ -2,16 +2,20 @@ [It rethrows exceptions] expected: FAIL + [queue-microtask-exceptions.any.serviceworker.html] + expected: ERROR [queue-microtask-exceptions] expected: FAIL + [queue-microtask-exceptions.https.any.serviceworker.html] [queue-microtask-exceptions] expected: FAIL [queue-microtask-exceptions.any.sharedworker.html] + expected: ERROR [queue-microtask-exceptions] expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask.any.js.ini b/tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask.any.js.ini index 85d783a2a93..e9a886d8887 100644 --- a/tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask.any.js.ini +++ b/tests/wpt/metadata/html/webappapis/microtask-queuing/queue-microtask.any.js.ini @@ -14,11 +14,15 @@ [It interleaves with promises as expected] expected: FAIL + [queue-microtask.any.serviceworker.html] + expected: ERROR [queue-microtask] expected: FAIL + [queue-microtask.any.sharedworker.html] + expected: ERROR [queue-microtask] expected: FAIL @@ -44,3 +48,4 @@ [It interleaves with promises as expected] expected: FAIL + diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-failure.https.any.js.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-failure.https.any.js.ini index 44439df7a90..c4dc9ba7413 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-failure.https.any.js.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-failure.https.any.js.ini @@ -1,6 +1,7 @@ [requires-failure.https.any.html] [requires-failure.https.any.serviceworker.html] + expected: ERROR [requires-failure] expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.js.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.js.ini index f14929079d7..f3eb22d76b4 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.js.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.js.ini @@ -4,6 +4,7 @@ [requires-success.any.sharedworker.html] + expected: ERROR [requires-success] expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.sharedworker.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.sharedworker.html.ini index 133e69e9d07..82989a7b7ff 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.sharedworker.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.sharedworker.html.ini @@ -1,5 +1,6 @@ [promise-rejection-events.sharedworker.html] type: testharness + expected: ERROR [Promise rejection events tests: in a shared worker context] expected: FAIL diff --git a/tests/wpt/metadata/offscreen-canvas/filter/offscreencanvas.filter.w.html.ini b/tests/wpt/metadata/offscreen-canvas/filter/offscreencanvas.filter.w.html.ini index d230a9d8d17..ee22e1591de 100644 --- a/tests/wpt/metadata/offscreen-canvas/filter/offscreencanvas.filter.w.html.ini +++ b/tests/wpt/metadata/offscreen-canvas/filter/offscreencanvas.filter.w.html.ini @@ -1,4 +1,5 @@ [offscreencanvas.filter.w.html] + expected: ERROR [offscreencanvas] expected: FAIL diff --git a/tests/wpt/metadata/performance-timeline/idlharness.any.js.ini b/tests/wpt/metadata/performance-timeline/idlharness.any.js.ini index 98ad19e3cc8..00d9f1831b0 100644 --- a/tests/wpt/metadata/performance-timeline/idlharness.any.js.ini +++ b/tests/wpt/metadata/performance-timeline/idlharness.any.js.ini @@ -1,4 +1,5 @@ [idlharness.any.sharedworker.html] + expected: ERROR [Untitled] expected: FAIL @@ -69,6 +70,7 @@ [idlharness.any.serviceworker.html] + expected: ERROR [idlharness] expected: FAIL diff --git a/tests/wpt/metadata/permissions/nfc-permission.html.ini b/tests/wpt/metadata/permissions/nfc-permission.html.ini new file mode 100644 index 00000000000..1dbf477a869 --- /dev/null +++ b/tests/wpt/metadata/permissions/nfc-permission.html.ini @@ -0,0 +1,4 @@ +[nfc-permission.html] + [Test Web NFC Permission.] + expected: FAIL + diff --git a/tests/wpt/metadata/resource-timing/resource_timing_TAO_cross_origin_redirect.html.ini b/tests/wpt/metadata/resource-timing/resource_timing_TAO_cross_origin_redirect.html.ini index 3ce32f0f969..1ef0e5f2573 100644 --- a/tests/wpt/metadata/resource-timing/resource_timing_TAO_cross_origin_redirect.html.ini +++ b/tests/wpt/metadata/resource-timing/resource_timing_TAO_cross_origin_redirect.html.ini @@ -1,4 +1,5 @@ [resource_timing_TAO_cross_origin_redirect.html] + expected: ERROR [This test validates the values in resource timing for a timing allowed cross-origin redirect.] expected: FAIL diff --git a/tests/wpt/metadata/resource-timing/resource_timing_cross_origin_redirect.html.ini b/tests/wpt/metadata/resource-timing/resource_timing_cross_origin_redirect.html.ini index dbb2eb922f6..61626972fd2 100644 --- a/tests/wpt/metadata/resource-timing/resource_timing_cross_origin_redirect.html.ini +++ b/tests/wpt/metadata/resource-timing/resource_timing_cross_origin_redirect.html.ini @@ -1,4 +1,5 @@ [resource_timing_cross_origin_redirect.html] + expected: ERROR [This test validates the values in resource timing for a cross-origin redirect.] expected: FAIL diff --git a/tests/wpt/metadata/resource-timing/resource_timing_same_origin_redirect.html.ini b/tests/wpt/metadata/resource-timing/resource_timing_same_origin_redirect.html.ini index 8e839b27927..b9e678edbb7 100644 --- a/tests/wpt/metadata/resource-timing/resource_timing_same_origin_redirect.html.ini +++ b/tests/wpt/metadata/resource-timing/resource_timing_same_origin_redirect.html.ini @@ -1,4 +1,5 @@ [resource_timing_same_origin_redirect.html] + expected: ERROR [This test validates the values of the redirectStart/End in resource timing for a same-origin resource redirect.] expected: FAIL diff --git a/tests/wpt/metadata/touch-events/touch-retargeting.html.ini b/tests/wpt/metadata/touch-events/touch-retargeting.html.ini index 4fe791f6296..5974175fdf0 100644 --- a/tests/wpt/metadata/touch-events/touch-retargeting.html.ini +++ b/tests/wpt/metadata/touch-events/touch-retargeting.html.ini @@ -1,5 +1,6 @@ [touch-retargeting.html] type: testharness + expected: ERROR [TouchEvent Retargeting Tests] expected: FAIL diff --git a/tests/wpt/metadata/wasm/serialization/module/nested-worker-success.any.js.ini b/tests/wpt/metadata/wasm/serialization/module/nested-worker-success.any.js.ini index c5630c0fce9..d92318b2c32 100644 --- a/tests/wpt/metadata/wasm/serialization/module/nested-worker-success.any.js.ini +++ b/tests/wpt/metadata/wasm/serialization/module/nested-worker-success.any.js.ini @@ -1,4 +1,5 @@ [nested-worker-success.any.sharedworker.html] + expected: ERROR [nested-worker-success] expected: FAIL diff --git a/tests/wpt/metadata/wasm/webapi/body.any.js.ini b/tests/wpt/metadata/wasm/webapi/body.any.js.ini index 57154b6e717..26214cdd87a 100644 --- a/tests/wpt/metadata/wasm/webapi/body.any.js.ini +++ b/tests/wpt/metadata/wasm/webapi/body.any.js.ini @@ -27,11 +27,13 @@ [body.any.serviceworker.html] + expected: ERROR [body] expected: FAIL [body.any.sharedworker.html] + expected: ERROR [body] expected: FAIL diff --git a/tests/wpt/metadata/wasm/webapi/contenttype.any.js.ini b/tests/wpt/metadata/wasm/webapi/contenttype.any.js.ini index 2f8935cc001..4c4d0a3d18b 100644 --- a/tests/wpt/metadata/wasm/webapi/contenttype.any.js.ini +++ b/tests/wpt/metadata/wasm/webapi/contenttype.any.js.ini @@ -61,6 +61,7 @@ [contenttype.any.sharedworker.html] + expected: ERROR [contenttype] expected: FAIL @@ -128,6 +129,7 @@ [contenttype.any.serviceworker.html] + expected: ERROR [contenttype] expected: FAIL diff --git a/tests/wpt/metadata/wasm/webapi/empty-body.any.js.ini b/tests/wpt/metadata/wasm/webapi/empty-body.any.js.ini index b28e1071f90..95576eeac19 100644 --- a/tests/wpt/metadata/wasm/webapi/empty-body.any.js.ini +++ b/tests/wpt/metadata/wasm/webapi/empty-body.any.js.ini @@ -25,6 +25,7 @@ [empty-body.any.sharedworker.html] + expected: ERROR [empty-body] expected: FAIL @@ -56,6 +57,7 @@ [empty-body.any.serviceworker.html] + expected: ERROR [empty-body] expected: FAIL diff --git a/tests/wpt/metadata/wasm/webapi/instantiateStreaming-bad-imports.any.js.ini b/tests/wpt/metadata/wasm/webapi/instantiateStreaming-bad-imports.any.js.ini index d8787f016aa..364f9f57c4e 100644 --- a/tests/wpt/metadata/wasm/webapi/instantiateStreaming-bad-imports.any.js.ini +++ b/tests/wpt/metadata/wasm/webapi/instantiateStreaming-bad-imports.any.js.ini @@ -1,4 +1,5 @@ [instantiateStreaming-bad-imports.any.serviceworker.html] + expected: ERROR [instantiateStreaming-bad-imports] expected: FAIL @@ -380,6 +381,7 @@ [instantiateStreaming-bad-imports.any.sharedworker.html] + expected: ERROR [instantiateStreaming-bad-imports] expected: FAIL diff --git a/tests/wpt/metadata/wasm/webapi/instantiateStreaming.any.js.ini b/tests/wpt/metadata/wasm/webapi/instantiateStreaming.any.js.ini index 112f5872ec6..5f21c19600f 100644 --- a/tests/wpt/metadata/wasm/webapi/instantiateStreaming.any.js.ini +++ b/tests/wpt/metadata/wasm/webapi/instantiateStreaming.any.js.ini @@ -28,11 +28,13 @@ [instantiateStreaming.any.serviceworker.html] + expected: ERROR [instantiateStreaming] expected: FAIL [instantiateStreaming.any.sharedworker.html] + expected: ERROR [instantiateStreaming] expected: FAIL diff --git a/tests/wpt/metadata/wasm/webapi/invalid-args.any.js.ini b/tests/wpt/metadata/wasm/webapi/invalid-args.any.js.ini index 6cfc3265ac1..c6dd3591e4b 100644 --- a/tests/wpt/metadata/wasm/webapi/invalid-args.any.js.ini +++ b/tests/wpt/metadata/wasm/webapi/invalid-args.any.js.ini @@ -1,9 +1,11 @@ [invalid-args.any.serviceworker.html] + expected: ERROR [invalid-args] expected: FAIL [invalid-args.any.sharedworker.html] + expected: ERROR [invalid-args] expected: FAIL diff --git a/tests/wpt/metadata/wasm/webapi/invalid-code.any.js.ini b/tests/wpt/metadata/wasm/webapi/invalid-code.any.js.ini index e86cbf84cb1..5eb0c5ef0f4 100644 --- a/tests/wpt/metadata/wasm/webapi/invalid-code.any.js.ini +++ b/tests/wpt/metadata/wasm/webapi/invalid-code.any.js.ini @@ -1,4 +1,5 @@ [invalid-code.any.sharedworker.html] + expected: ERROR [invalid-code] expected: FAIL @@ -12,6 +13,7 @@ [invalid-code.any.serviceworker.html] + expected: ERROR [invalid-code] expected: FAIL diff --git a/tests/wpt/metadata/wasm/webapi/origin.sub.any.js.ini b/tests/wpt/metadata/wasm/webapi/origin.sub.any.js.ini index f3f8d8dba63..9382317596e 100644 --- a/tests/wpt/metadata/wasm/webapi/origin.sub.any.js.ini +++ b/tests/wpt/metadata/wasm/webapi/origin.sub.any.js.ini @@ -1,4 +1,5 @@ [origin.sub.any.sharedworker.html] + expected: ERROR [origin] expected: FAIL @@ -32,6 +33,7 @@ [origin.sub.any.serviceworker.html] + expected: ERROR [origin] expected: FAIL diff --git a/tests/wpt/metadata/wasm/webapi/rejected-arg.any.js.ini b/tests/wpt/metadata/wasm/webapi/rejected-arg.any.js.ini index b320dbfd596..6130d73831d 100644 --- a/tests/wpt/metadata/wasm/webapi/rejected-arg.any.js.ini +++ b/tests/wpt/metadata/wasm/webapi/rejected-arg.any.js.ini @@ -1,4 +1,5 @@ [rejected-arg.any.sharedworker.html] + expected: ERROR [rejected-arg] expected: FAIL @@ -12,6 +13,7 @@ [rejected-arg.any.serviceworker.html] + expected: ERROR [rejected-arg] expected: FAIL diff --git a/tests/wpt/metadata/wasm/webapi/status.any.js.ini b/tests/wpt/metadata/wasm/webapi/status.any.js.ini index da0cf6592e5..f0cd9279b42 100644 --- a/tests/wpt/metadata/wasm/webapi/status.any.js.ini +++ b/tests/wpt/metadata/wasm/webapi/status.any.js.ini @@ -49,11 +49,13 @@ [status.any.serviceworker.html] + expected: ERROR [status] expected: FAIL [status.any.sharedworker.html] + expected: ERROR [status] expected: FAIL diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-messageport.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-messageport.https.html.ini index b43548d64fe..9326151180f 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-messageport.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-messageport.https.html.ini @@ -1,4 +1,5 @@ [audioworklet-messageport.https.html] + expected: ERROR [\n Test MessagePort in AudioWorkletNode and AudioWorkletProcessor\n ] expected: FAIL diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-postmessage-sharedarraybuffer.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-postmessage-sharedarraybuffer.https.html.ini index 476a2e87036..61640dcdaa9 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-postmessage-sharedarraybuffer.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-postmessage-sharedarraybuffer.https.html.ini @@ -1,4 +1,5 @@ [audioworklet-postmessage-sharedarraybuffer.https.html] + expected: ERROR [\n Test passing SharedArrayBuffer to an AudioWorklet\n ] expected: FAIL diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-sample-rate.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-sample-rate.https.html.ini index 303611ce2b7..2fb53d16266 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-sample-rate.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-sample-rate.https.html.ini @@ -1,4 +1,5 @@ [audioworkletglobalscope-sample-rate.https.html] + expected: ERROR [\n Test sampleRate in AudioWorkletGlobalScope\n ] expected: FAIL diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-timing-info.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-timing-info.https.html.ini index f11ad0f4626..5caa2af62cf 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-timing-info.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-timing-info.https.html.ini @@ -1,4 +1,5 @@ [audioworkletglobalscope-timing-info.https.html] + expected: ERROR [\n Test currentTime and currentFrame in AudioWorkletGlobalScope\n ] expected: FAIL diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html.ini index f3faec26c7d..bf50e77e178 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html.ini @@ -1,4 +1,5 @@ [audioworkletnode-onerror.https.html] + expected: ERROR [\n Test onprocessorerror handler in AudioWorkletNode\n ] expected: FAIL diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html.ini index d5a0839d5dd..eef61814986 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html.ini @@ -1,3 +1,5 @@ [audioworkletnode-output-channel-count.https.html] + expected: ERROR [\n Test the construction of AudioWorkletNode with real-time context\n ] expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/cors-check.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/cors-check.https.html.ini index 7e7af0a06f4..194986e2416 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/cors-check.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/cors-check.https.html.ini @@ -1,4 +1,5 @@ [cors-check.https.html] + expected: ERROR [\n Test if MediaElementAudioSourceNode works for cross-origin redirects with\n "cors" request mode.\n ] expected: FAIL diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/no-cors.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/no-cors.https.html.ini index 7d508e62fbe..7c733edc836 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/no-cors.https.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/no-cors.https.html.ini @@ -1,4 +1,5 @@ [no-cors.https.html] + expected: ERROR [\n Test if MediaElementAudioSourceNode works for cross-origin redirects with\n "no-cors" request mode.\n ] expected: FAIL diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-ctor.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-ctor.html.ini index 581273c3391..701f6dc4718 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-ctor.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-ctor.html.ini @@ -1,4 +1,5 @@ [mediastreamaudiosourcenode-ctor.html] + expected: ERROR [MediaStreamAudioSourceNode] expected: FAIL diff --git a/tests/wpt/metadata/webmessaging/with-ports/018.html.ini b/tests/wpt/metadata/webmessaging/with-ports/018.html.ini deleted file mode 100644 index 663a1f8fa30..00000000000 --- a/tests/wpt/metadata/webmessaging/with-ports/018.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[018.html] - expected: TIMEOUT - [origin of the script that invoked the method, javascript:] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/webmessaging/without-ports/017.html.ini b/tests/wpt/metadata/webmessaging/without-ports/017.html.ini deleted file mode 100644 index 064cf47545b..00000000000 --- a/tests/wpt/metadata/webmessaging/without-ports/017.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[017.html] - expected: TIMEOUT - [origin of the script that invoked the method, about:blank] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/websockets/basic-auth.any.js.ini b/tests/wpt/metadata/websockets/basic-auth.any.js.ini index d6f36dd4c7d..da555fb8fe8 100644 --- a/tests/wpt/metadata/websockets/basic-auth.any.js.ini +++ b/tests/wpt/metadata/websockets/basic-auth.any.js.ini @@ -6,7 +6,9 @@ [basic-auth] expected: FAIL + [basic-auth.any.serviceworker.html] + expected: ERROR [Untitled] expected: FAIL @@ -15,8 +17,14 @@ [basic-auth.any.sharedworker.html] + expected: ERROR [Untitled] expected: FAIL [basic-auth] expected: FAIL + + +[basic-auth.any.worker.html] + +[basic-auth.any.html] diff --git a/tests/wpt/metadata/websockets/bufferedAmount-unchanged-by-sync-xhr.any.js.ini b/tests/wpt/metadata/websockets/bufferedAmount-unchanged-by-sync-xhr.any.js.ini index 729d6ea4fdc..8d171599c15 100644 --- a/tests/wpt/metadata/websockets/bufferedAmount-unchanged-by-sync-xhr.any.js.ini +++ b/tests/wpt/metadata/websockets/bufferedAmount-unchanged-by-sync-xhr.any.js.ini @@ -3,6 +3,7 @@ [bufferedAmount-unchanged-by-sync-xhr.any.worker.html] [bufferedAmount-unchanged-by-sync-xhr.any.sharedworker.html] + expected: ERROR [bufferedAmount-unchanged-by-sync-xhr] expected: FAIL diff --git a/tests/wpt/metadata/websockets/stream-tentative/abort.any.js.ini b/tests/wpt/metadata/websockets/stream-tentative/abort.any.js.ini index 216377372b0..9c526484c62 100644 --- a/tests/wpt/metadata/websockets/stream-tentative/abort.any.js.ini +++ b/tests/wpt/metadata/websockets/stream-tentative/abort.any.js.ini @@ -10,6 +10,7 @@ [abort.any.sharedworker.html] + expected: ERROR [abort] expected: FAIL @@ -26,6 +27,7 @@ [abort.any.serviceworker.html] + expected: ERROR [abort] expected: FAIL diff --git a/tests/wpt/metadata/websockets/stream-tentative/backpressure-receive.any.js.ini b/tests/wpt/metadata/websockets/stream-tentative/backpressure-receive.any.js.ini index ab6827de7bc..c76d95e42f1 100644 --- a/tests/wpt/metadata/websockets/stream-tentative/backpressure-receive.any.js.ini +++ b/tests/wpt/metadata/websockets/stream-tentative/backpressure-receive.any.js.ini @@ -9,11 +9,13 @@ [backpressure-receive.any.serviceworker.html] + expected: ERROR [backpressure-receive] expected: FAIL [backpressure-receive.any.sharedworker.html] + expected: ERROR [backpressure-receive] expected: FAIL diff --git a/tests/wpt/metadata/websockets/stream-tentative/backpressure-send.any.js.ini b/tests/wpt/metadata/websockets/stream-tentative/backpressure-send.any.js.ini index 21974da3f60..5171892af4d 100644 --- a/tests/wpt/metadata/websockets/stream-tentative/backpressure-send.any.js.ini +++ b/tests/wpt/metadata/websockets/stream-tentative/backpressure-send.any.js.ini @@ -1,9 +1,11 @@ [backpressure-send.any.serviceworker.html] + expected: ERROR [backpressure-send] expected: FAIL [backpressure-send.any.sharedworker.html] + expected: ERROR [backpressure-send] expected: FAIL diff --git a/tests/wpt/metadata/websockets/stream-tentative/close.any.js.ini b/tests/wpt/metadata/websockets/stream-tentative/close.any.js.ini index 111c90b4779..9dff4269d37 100644 --- a/tests/wpt/metadata/websockets/stream-tentative/close.any.js.ini +++ b/tests/wpt/metadata/websockets/stream-tentative/close.any.js.ini @@ -171,11 +171,13 @@ [close.any.serviceworker.html] + expected: ERROR [close] expected: FAIL [close.any.sharedworker.html] + expected: ERROR [close] expected: FAIL diff --git a/tests/wpt/metadata/websockets/stream-tentative/constructor.any.js.ini b/tests/wpt/metadata/websockets/stream-tentative/constructor.any.js.ini index 97e6ffb6ebc..1d88c46b1a6 100644 --- a/tests/wpt/metadata/websockets/stream-tentative/constructor.any.js.ini +++ b/tests/wpt/metadata/websockets/stream-tentative/constructor.any.js.ini @@ -25,6 +25,7 @@ [constructor.any.sharedworker.html] + expected: ERROR [constructor] expected: FAIL @@ -56,6 +57,7 @@ [constructor.any.serviceworker.html] + expected: ERROR [constructor] expected: FAIL diff --git a/tests/wpt/metadata/websockets/unload-a-document/002.html.ini b/tests/wpt/metadata/websockets/unload-a-document/002.html.ini deleted file mode 100644 index 32213b83293..00000000000 --- a/tests/wpt/metadata/websockets/unload-a-document/002.html.ini +++ /dev/null @@ -1,11 +0,0 @@ -[002.html] - type: testharness - [WebSockets: navigating top-level browsing context with closed websocket] - expected: FAIL - - -[002.html?wss] - type: testharness - [WebSockets: navigating top-level browsing context with closed websocket] - expected: FAIL - diff --git a/tests/wpt/metadata/websockets/unload-a-document/004.html.ini b/tests/wpt/metadata/websockets/unload-a-document/004.html.ini deleted file mode 100644 index 66180a29004..00000000000 --- a/tests/wpt/metadata/websockets/unload-a-document/004.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[004.html] - type: testharness - [WebSockets: navigating nested browsing context with closed websocket] - expected: FAIL - diff --git a/tests/wpt/metadata/workers/SharedWorker-MessageEvent-source.any.js.ini b/tests/wpt/metadata/workers/SharedWorker-MessageEvent-source.any.js.ini index 772cdfbaf3b..d4097d8fced 100644 --- a/tests/wpt/metadata/workers/SharedWorker-MessageEvent-source.any.js.ini +++ b/tests/wpt/metadata/workers/SharedWorker-MessageEvent-source.any.js.ini @@ -1,4 +1,5 @@ [SharedWorker-MessageEvent-source.any.sharedworker.html] + expected: ERROR [SharedWorker-MessageEvent-source] expected: FAIL diff --git a/tests/wpt/metadata/workers/SharedWorker-replace-EventHandler.any.js.ini b/tests/wpt/metadata/workers/SharedWorker-replace-EventHandler.any.js.ini index fe70242a9f8..7f83ac5a8d6 100644 --- a/tests/wpt/metadata/workers/SharedWorker-replace-EventHandler.any.js.ini +++ b/tests/wpt/metadata/workers/SharedWorker-replace-EventHandler.any.js.ini @@ -1,4 +1,5 @@ [SharedWorker-replace-EventHandler.any.sharedworker.html] + expected: ERROR [SharedWorker-replace-EventHandler] expected: FAIL diff --git a/tests/wpt/metadata/workers/Worker-base64.any.js.ini b/tests/wpt/metadata/workers/Worker-base64.any.js.ini index 24bfcb85a47..461a24a085e 100644 --- a/tests/wpt/metadata/workers/Worker-base64.any.js.ini +++ b/tests/wpt/metadata/workers/Worker-base64.any.js.ini @@ -1,11 +1,13 @@ [Worker-base64.any.worker.html] [Worker-base64.any.serviceworker.html] + expected: ERROR [Worker-base64] expected: FAIL [Worker-base64.any.sharedworker.html] + expected: ERROR [Worker-base64] expected: FAIL diff --git a/tests/wpt/metadata/workers/Worker-constructor-proto.any.js.ini b/tests/wpt/metadata/workers/Worker-constructor-proto.any.js.ini index 5ad0eeec097..679b0b60c8b 100644 --- a/tests/wpt/metadata/workers/Worker-constructor-proto.any.js.ini +++ b/tests/wpt/metadata/workers/Worker-constructor-proto.any.js.ini @@ -1,4 +1,5 @@ [Worker-constructor-proto.any.sharedworker.html] + expected: ERROR [Worker-constructor-proto] expected: FAIL @@ -9,6 +10,7 @@ [Worker-constructor-proto.any.serviceworker.html] + expected: ERROR [Worker-constructor-proto] expected: FAIL diff --git a/tests/wpt/metadata/workers/Worker-custom-event.any.js.ini b/tests/wpt/metadata/workers/Worker-custom-event.any.js.ini index c9c023af197..1a006e79b25 100644 --- a/tests/wpt/metadata/workers/Worker-custom-event.any.js.ini +++ b/tests/wpt/metadata/workers/Worker-custom-event.any.js.ini @@ -1,11 +1,13 @@ [Worker-custom-event.any.worker.html] [Worker-custom-event.any.sharedworker.html] + expected: ERROR [Worker-custom-event] expected: FAIL [Worker-custom-event.any.serviceworker.html] + expected: ERROR [Worker-custom-event] expected: FAIL diff --git a/tests/wpt/metadata/workers/Worker-location.sub.any.js.ini b/tests/wpt/metadata/workers/Worker-location.sub.any.js.ini index d9d6a40c57d..f89806c9bdb 100644 --- a/tests/wpt/metadata/workers/Worker-location.sub.any.js.ini +++ b/tests/wpt/metadata/workers/Worker-location.sub.any.js.ini @@ -1,4 +1,5 @@ [Worker-location.sub.any.sharedworker.html] + expected: ERROR [Worker-location] expected: FAIL diff --git a/tests/wpt/metadata/workers/Worker-replace-event-handler.any.js.ini b/tests/wpt/metadata/workers/Worker-replace-event-handler.any.js.ini index 6775bf5e610..cc0af1dd87d 100644 --- a/tests/wpt/metadata/workers/Worker-replace-event-handler.any.js.ini +++ b/tests/wpt/metadata/workers/Worker-replace-event-handler.any.js.ini @@ -1,4 +1,5 @@ [Worker-replace-event-handler.any.sharedworker.html] + expected: ERROR [Worker-replace-event-handler] expected: FAIL @@ -6,6 +7,7 @@ [Worker-replace-event-handler.any.worker.html] [Worker-replace-event-handler.any.serviceworker.html] + expected: ERROR [Worker-replace-event-handler] expected: FAIL diff --git a/tests/wpt/metadata/workers/Worker-replace-global-constructor.any.js.ini b/tests/wpt/metadata/workers/Worker-replace-global-constructor.any.js.ini index 7a5e3ec6e9b..7fc7d7d1a58 100644 --- a/tests/wpt/metadata/workers/Worker-replace-global-constructor.any.js.ini +++ b/tests/wpt/metadata/workers/Worker-replace-global-constructor.any.js.ini @@ -1,9 +1,11 @@ [Worker-replace-global-constructor.any.serviceworker.html] + expected: ERROR [Worker-replace-global-constructor] expected: FAIL [Worker-replace-global-constructor.any.sharedworker.html] + expected: ERROR [Worker-replace-global-constructor] expected: FAIL diff --git a/tests/wpt/metadata/workers/Worker-replace-self.any.js.ini b/tests/wpt/metadata/workers/Worker-replace-self.any.js.ini index c86c0f32bbe..e68d5d861b0 100644 --- a/tests/wpt/metadata/workers/Worker-replace-self.any.js.ini +++ b/tests/wpt/metadata/workers/Worker-replace-self.any.js.ini @@ -1,4 +1,5 @@ [Worker-replace-self.any.sharedworker.html] + expected: ERROR [Worker-replace-self] expected: FAIL @@ -6,6 +7,7 @@ [Worker-replace-self.any.worker.html] [Worker-replace-self.any.serviceworker.html] + expected: ERROR [Worker-replace-self] expected: FAIL diff --git a/tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini b/tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini new file mode 100644 index 00000000000..fe8654e447c --- /dev/null +++ b/tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini @@ -0,0 +1,4 @@ +[WorkerGlobalScope-close.html] + [Test sending a message after closing.] + expected: FAIL + diff --git a/tests/wpt/metadata/workers/WorkerNavigator-hardware-concurrency.any.js.ini b/tests/wpt/metadata/workers/WorkerNavigator-hardware-concurrency.any.js.ini index 25d0a3f43b2..b7d71a85ff9 100644 --- a/tests/wpt/metadata/workers/WorkerNavigator-hardware-concurrency.any.js.ini +++ b/tests/wpt/metadata/workers/WorkerNavigator-hardware-concurrency.any.js.ini @@ -1,4 +1,5 @@ [WorkerNavigator-hardware-concurrency.any.sharedworker.html] + expected: ERROR [WorkerNavigator-hardware-concurrency] expected: FAIL @@ -9,6 +10,7 @@ [WorkerNavigator-hardware-concurrency.any.serviceworker.html] + expected: ERROR [WorkerNavigator-hardware-concurrency] expected: FAIL diff --git a/tests/wpt/metadata/workers/WorkerNavigator.any.js.ini b/tests/wpt/metadata/workers/WorkerNavigator.any.js.ini index 65fce8b8e92..631d36c5cdd 100644 --- a/tests/wpt/metadata/workers/WorkerNavigator.any.js.ini +++ b/tests/wpt/metadata/workers/WorkerNavigator.any.js.ini @@ -4,11 +4,13 @@ [WorkerNavigator.any.sharedworker.html] + expected: ERROR [WorkerNavigator] expected: FAIL [WorkerNavigator.any.serviceworker.html] + expected: ERROR [WorkerNavigator] expected: FAIL diff --git a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini index bf2a1d61bab..bfd4d6dd2d6 100644 --- a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini +++ b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini @@ -1,4 +1,5 @@ [import-in-moduleworker.html] + expected: ERROR [Base URL in module dedicated workers: import] expected: FAIL diff --git a/tests/wpt/metadata/workers/baseurl/alpha/importScripts-in-sharedworker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/importScripts-in-sharedworker.html.ini index 59ab9326269..6891972984c 100644 --- a/tests/wpt/metadata/workers/baseurl/alpha/importScripts-in-sharedworker.html.ini +++ b/tests/wpt/metadata/workers/baseurl/alpha/importScripts-in-sharedworker.html.ini @@ -1,4 +1,5 @@ [importScripts-in-sharedworker.html] + expected: ERROR [Base URL in classic shared workers: importScripts] expected: FAIL diff --git a/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini index 333edb3a26e..650c91da4a6 100644 --- a/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini +++ b/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini @@ -1,4 +1,5 @@ [sharedworker-in-worker.html] + expected: ERROR [Base URL in workers: new SharedWorker()] expected: FAIL diff --git a/tests/wpt/metadata/workers/baseurl/alpha/xhr-in-sharedworker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/xhr-in-sharedworker.html.ini index 0ef8c8de1a4..2025db5ee90 100644 --- a/tests/wpt/metadata/workers/baseurl/alpha/xhr-in-sharedworker.html.ini +++ b/tests/wpt/metadata/workers/baseurl/alpha/xhr-in-sharedworker.html.ini @@ -1,4 +1,5 @@ [xhr-in-sharedworker.html] + expected: ERROR [Base URL in classic shared workers: XHR] expected: FAIL diff --git a/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini b/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini new file mode 100644 index 00000000000..80f9a4f15b8 --- /dev/null +++ b/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini @@ -0,0 +1,2 @@ +[Worker-constructor.html] + expected: ERROR diff --git a/tests/wpt/metadata/workers/examples/general.any.js.ini b/tests/wpt/metadata/workers/examples/general.any.js.ini index 1287e5a3655..981c5011f45 100644 --- a/tests/wpt/metadata/workers/examples/general.any.js.ini +++ b/tests/wpt/metadata/workers/examples/general.any.js.ini @@ -1,9 +1,11 @@ [general.any.serviceworker.html] + expected: ERROR [general] expected: FAIL [general.any.sharedworker.html] + expected: ERROR [general] expected: FAIL diff --git a/tests/wpt/metadata/workers/examples/onconnect.any.js.ini b/tests/wpt/metadata/workers/examples/onconnect.any.js.ini index 759a398ef7e..751dae97da4 100644 --- a/tests/wpt/metadata/workers/examples/onconnect.any.js.ini +++ b/tests/wpt/metadata/workers/examples/onconnect.any.js.ini @@ -1,4 +1,5 @@ [onconnect.any.sharedworker.html] + expected: ERROR [onconnect] expected: FAIL diff --git a/tests/wpt/metadata/workers/importscripts_mime.any.js.ini b/tests/wpt/metadata/workers/importscripts_mime.any.js.ini index 0ee29aaad0b..8591f24ce27 100644 --- a/tests/wpt/metadata/workers/importscripts_mime.any.js.ini +++ b/tests/wpt/metadata/workers/importscripts_mime.any.js.ini @@ -37,11 +37,13 @@ [importscripts_mime.any.sharedworker.html] + expected: ERROR [importscripts_mime] expected: FAIL [importscripts_mime.any.serviceworker.html] + expected: ERROR [importscripts_mime] expected: FAIL diff --git a/tests/wpt/metadata/workers/interfaces/WorkerGlobalScope/location/redirect-sharedworker.html.ini b/tests/wpt/metadata/workers/interfaces/WorkerGlobalScope/location/redirect-sharedworker.html.ini index 3795f347c73..2ad0196c322 100644 --- a/tests/wpt/metadata/workers/interfaces/WorkerGlobalScope/location/redirect-sharedworker.html.ini +++ b/tests/wpt/metadata/workers/interfaces/WorkerGlobalScope/location/redirect-sharedworker.html.ini @@ -1,4 +1,5 @@ [redirect-sharedworker.html] + expected: ERROR [WorkerLocation with redirects: classic shared workers] 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 index 66d358167ba..bd64146590c 100644 --- a/tests/wpt/metadata/workers/semantics/interface-objects/003.any.js.ini +++ b/tests/wpt/metadata/workers/semantics/interface-objects/003.any.js.ini @@ -1,4 +1,5 @@ [003.any.sharedworker.html] + expected: ERROR [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 index 00de8ef15b1..21ac10e807d 100644 --- a/tests/wpt/metadata/workers/semantics/interface-objects/004.any.js.ini +++ b/tests/wpt/metadata/workers/semantics/interface-objects/004.any.js.ini @@ -1,4 +1,5 @@ [004.any.sharedworker.html] + expected: ERROR [004] expected: FAIL diff --git a/tests/wpt/metadata/xhr/idlharness.any.js.ini b/tests/wpt/metadata/xhr/idlharness.any.js.ini index 0093adff9e3..87688415694 100644 --- a/tests/wpt/metadata/xhr/idlharness.any.js.ini +++ b/tests/wpt/metadata/xhr/idlharness.any.js.ini @@ -1,4 +1,9 @@ [idlharness.any.sharedworker.html] + expected: ERROR [idlharness] expected: FAIL + +[idlharness.any.html] + +[idlharness.any.worker.html] diff --git a/tests/wpt/metadata/xhr/open-url-redirected-sharedworker-origin.htm.ini b/tests/wpt/metadata/xhr/open-url-redirected-sharedworker-origin.htm.ini index e9d15c79bf4..2b3d973b09d 100644 --- a/tests/wpt/metadata/xhr/open-url-redirected-sharedworker-origin.htm.ini +++ b/tests/wpt/metadata/xhr/open-url-redirected-sharedworker-origin.htm.ini @@ -1,4 +1,5 @@ [open-url-redirected-sharedworker-origin.htm] + expected: ERROR [XMLHttpRequest: redirected classic shared worker scripts, origin and referrer] expected: FAIL diff --git a/tests/wpt/metadata/xhr/responsexml-document-properties.htm.ini b/tests/wpt/metadata/xhr/responsexml-document-properties.htm.ini index 38c257cee08..7a64786c665 100644 --- a/tests/wpt/metadata/xhr/responsexml-document-properties.htm.ini +++ b/tests/wpt/metadata/xhr/responsexml-document-properties.htm.ini @@ -1,5 +1,6 @@ [responsexml-document-properties.htm] type: testharness + expected: ERROR [domain] expected: FAIL diff --git a/tests/wpt/metadata/xhr/send-data-readablestream.any.js.ini b/tests/wpt/metadata/xhr/send-data-readablestream.any.js.ini index 65a79f001ba..35b06661a34 100644 --- a/tests/wpt/metadata/xhr/send-data-readablestream.any.js.ini +++ b/tests/wpt/metadata/xhr/send-data-readablestream.any.js.ini @@ -21,6 +21,7 @@ [send-data-readablestream.any.sharedworker.html] + expected: ERROR [send-data-readablestream] expected: FAIL diff --git a/tests/wpt/metadata/xhr/sync-no-timeout.any.js.ini b/tests/wpt/metadata/xhr/sync-no-timeout.any.js.ini index ecff1270f56..43bbd78428a 100644 --- a/tests/wpt/metadata/xhr/sync-no-timeout.any.js.ini +++ b/tests/wpt/metadata/xhr/sync-no-timeout.any.js.ini @@ -1,7 +1,12 @@ [sync-no-timeout.any.sharedworker.html] + expected: ERROR [Untitled] expected: FAIL [sync-no-timeout] expected: FAIL + +[sync-no-timeout.any.html] + +[sync-no-timeout.any.worker.html] diff --git a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini b/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini new file mode 100644 index 00000000000..dbea4f293ad --- /dev/null +++ b/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini @@ -0,0 +1,2 @@ +[transition_calc_implicit.html] + expected: TIMEOUT diff --git a/tests/wpt/mozilla/meta/mozilla/animation-removed-node.html.ini b/tests/wpt/mozilla/meta/mozilla/animation-removed-node.html.ini index b320af24162..ec6cab9857c 100644 --- a/tests/wpt/mozilla/meta/mozilla/animation-removed-node.html.ini +++ b/tests/wpt/mozilla/meta/mozilla/animation-removed-node.html.ini @@ -1,5 +1,6 @@ [animation-removed-node.html] prefs: [css.animations.testing.enabled:true] + expected: ERROR [animation-removed-node] expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/inline-event-listener-panic.html.ini b/tests/wpt/mozilla/meta/mozilla/inline-event-listener-panic.html.ini new file mode 100644 index 00000000000..d2d530029d9 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/inline-event-listener-panic.html.ini @@ -0,0 +1,2 @@ +[inline-event-listener-panic.html] + expected: ERROR diff --git a/tests/wpt/mozilla/meta/mozilla/interfaces.html.ini b/tests/wpt/mozilla/meta/mozilla/interfaces.html.ini new file mode 100644 index 00000000000..378eade335e --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/interfaces.html.ini @@ -0,0 +1,4 @@ +[interfaces.html] + [Interfaces exposed on the window] + expected: FAIL + diff --git a/tests/wpt/mozilla/meta/mozilla/interfaces.worker.js.ini b/tests/wpt/mozilla/meta/mozilla/interfaces.worker.js.ini new file mode 100644 index 00000000000..701d363381a --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/interfaces.worker.js.ini @@ -0,0 +1,4 @@ +[interfaces.worker.html] + [interfaces] + expected: FAIL + diff --git a/tests/wpt/mozilla/meta/mozilla/window_requestAnimationFrame2.html.ini b/tests/wpt/mozilla/meta/mozilla/window_requestAnimationFrame2.html.ini index 380b6ae1998..be85f58c9b4 100644 --- a/tests/wpt/mozilla/meta/mozilla/window_requestAnimationFrame2.html.ini +++ b/tests/wpt/mozilla/meta/mozilla/window_requestAnimationFrame2.html.ini @@ -1,5 +1,6 @@ [window_requestAnimationFrame2.html] type: testharness + expected: ERROR [Test throwing an error inside requestAnimationFrame callback] expected: FAIL diff --git a/tests/wpt/web-platform-tests/CONTRIBUTING.md b/tests/wpt/web-platform-tests/CONTRIBUTING.md index baa208e30f4..54d963d7adb 100644 --- a/tests/wpt/web-platform-tests/CONTRIBUTING.md +++ b/tests/wpt/web-platform-tests/CONTRIBUTING.md @@ -1,4 +1,4 @@ -All contributions are licensed under the terms of the LICENSE.md file. +All contributions are licensed under the terms of the [3-Clause BSD License](LICENSE.md). Documentation ------------- diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbindex_reverse_cursor.any.js b/tests/wpt/web-platform-tests/IndexedDB/idbindex_reverse_cursor.any.js new file mode 100644 index 00000000000..0b3c767fee1 --- /dev/null +++ b/tests/wpt/web-platform-tests/IndexedDB/idbindex_reverse_cursor.any.js @@ -0,0 +1,60 @@ +// META: title=Reverse Cursor Validity +// META: script=support-promises.js + +async function iterateAndReturnAllCursorResult(testCase, cursor) { + return new Promise((resolve, reject) => { + let results = []; + cursor.onsuccess = testCase.step_func(function(e) { + let cursor = e.target.result; + if (!cursor) { + resolve(results); + return; + } + results.push(cursor.value); + cursor.continue(); + }); + cursor.onerror = reject; + }); +} + +promise_test(async testCase => { + const db = await createDatabase(testCase, db => { + db.createObjectStore('objectStore', {keyPath: 'key'}) + .createIndex('index', 'indexedOn'); + }); + const txn1 = db.transaction(['objectStore'], 'readwrite'); + txn1.objectStore('objectStore').add({'key': 'firstItem', 'indexedOn': 3}); + const txn2 = db.transaction(['objectStore'], 'readwrite'); + txn2.objectStore('objectStore').put({'key': 'firstItem', 'indexedOn': -1}); + const txn3= db.transaction(['objectStore'], 'readwrite'); + txn3.objectStore('objectStore').add({'key': 'secondItem', 'indexedOn': 2}); + + const txn4 = db.transaction(['objectStore'], 'readonly'); + cursor = txn4.objectStore('objectStore').index('index').openCursor(IDBKeyRange.bound(0, 10), "prev"); + let results = await iterateAndReturnAllCursorResult(testCase, cursor); + + assert_equals(results.length, 1); + + await promiseForTransaction(testCase, txn4); + db.close(); +}, 'Reverse cursor sees update from separate transactions.'); + +promise_test(async testCase => { + const db = await createDatabase(testCase, db => { + db.createObjectStore('objectStore', {keyPath: 'key'}) + .createIndex('index', 'indexedOn'); + }); + const txn = db.transaction(['objectStore'], 'readwrite'); + txn.objectStore('objectStore').add({'key': '1', 'indexedOn': 2}); + txn.objectStore('objectStore').put({'key': '1', 'indexedOn': -1}); + txn.objectStore('objectStore').add({'key': '2', 'indexedOn': 1}); + + const txn2 = db.transaction(['objectStore'], 'readonly'); + cursor = txn2.objectStore('objectStore').index('index').openCursor(IDBKeyRange.bound(0, 10), "prev"); + let results = await iterateAndReturnAllCursorResult(testCase, cursor); + + assert_equals(1, results.length); + + await promiseForTransaction(testCase, txn2); + db.close(); +}, 'Reverse cursor sees in-transaction update.'); diff --git a/tests/wpt/web-platform-tests/README.md b/tests/wpt/web-platform-tests/README.md index 320176c40ce..e3ee8551ff4 100644 --- a/tests/wpt/web-platform-tests/README.md +++ b/tests/wpt/web-platform-tests/README.md @@ -20,9 +20,9 @@ The most important sources of information and activity are: - [web-platform-tests.org](https://web-platform-tests.org): the documentation website; details how to set up the project, how to write tests, how to give and receive peer review, how to serve as an administrator, and more -- [web-platform-tests.live](http://web-platform-tests.live): a public - deployment of the test suite, allowing anyone to run the tests by visiting - from an Internet-enabled browser of their choice +- [wpt.live](http://wpt.live): a public deployment of the test suite, + allowing anyone to run the tests by visiting from an + Internet-enabled browser of their choice - [wpt.fyi](https://wpt.fyi): an archive of test results collected from an array of web browsers on a regular basis - [Real-time chat room](http://irc.w3.org/?channels=testing): the @@ -227,11 +227,9 @@ Contributing Save the Web, Write Some Tests! -Absolutely everyone is welcome (and even encouraged) to contribute to -test development, so long as you fulfill the contribution requirements -detailed in the [Contributing Guidelines][contributing]. No test is -too small or too simple, especially if it corresponds to something for -which you've noted an interoperability bug in a browser. +Absolutely everyone is welcome to contribute to test development. No +test is too small or too simple, especially if it corresponds to +something for which you've noted an interoperability bug in a browser. The way to contribute is just as usual: @@ -240,9 +238,9 @@ The way to contribute is just as usual: * Create a branch for your changes: `git checkout -b topic`. * Make your changes. -* Run the lint script described below. +* Run `./wpt lint` as described above. * Commit locally and push that to your repo. -* Send in a pull request based on the above. +* Create a pull request based on the above. Issues with web-platform-tests ------------------------------ diff --git a/tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.https.window.js b/tests/wpt/web-platform-tests/battery-status/idlharness.https.window.js index b33c82e426c..b33c82e426c 100644 --- a/tests/wpt/web-platform-tests/battery-status/battery-interface-idlharness.https.window.js +++ b/tests/wpt/web-platform-tests/battery-status/idlharness.https.window.js diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html new file mode 100644 index 00000000000..dff960d2870 --- /dev/null +++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html @@ -0,0 +1,33 @@ +<html> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/feature-policy-navigation.js"></script> +<script> +(async () => { + await test_frame( + "HTTPS_REMOTE_ORIGIN", + "device-memory=true&dpr=false&viewport-width=false", + "", + "Client hints loaded on cross-origin iframe request with feature policy."); + await test_frame( + "HTTPS_ORIGIN", + "device-memory=true&dpr=false&viewport-width=true", + "", + "Client hints loaded on same-origin iframe request with feature policy."); + await test_frame( + "HTTPS_REMOTE_ORIGIN", + "", + "", + "Iframe trying to set Accept-CH-Lifetime.", "/client-hints/resources/iframe-accept-ch-lifetime.html"); + await test_frame( + "HTTPS_REMOTE_ORIGIN", + "device-memory=true&dpr=false&viewport-width=false", + "", + "Client hints loaded on cross-origin iframe request with feature policy after attempting to set independently."); +})(); + +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html.headers b/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html.headers new file mode 100644 index 00000000000..f9595a794d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html.headers @@ -0,0 +1,3 @@ +Accept-CH: Device-Memory, DPR, Viewport-Width +Accept-CH-Lifetime: 1 +Feature-Policy: ch-device-memory *; ch-dpr 'none'; ch-viewport-width 'self'; ch-lang 'none' diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html new file mode 100644 index 00000000000..5fb6c22f508 --- /dev/null +++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html @@ -0,0 +1,24 @@ +<html> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/feature-policy-navigation.js"></script> +<script> +(async () => { + await test_frame( + "HTTPS_REMOTE_ORIGIN", + "device-memory=false&dpr=false&viewport-width=false", + "", + "Client hints not loaded on cross-origin iframe request with no feature policy."); + await test_frame( + "HTTPS_ORIGIN", + "device-memory=true&dpr=true&viewport-width=true", + "", + "Client hints loaded on same-origin iframe request with no feature policy."); +})(); + +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html.headers b/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html.headers new file mode 100644 index 00000000000..7eb28a000bd --- /dev/null +++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html.headers @@ -0,0 +1,2 @@ +Accept-CH: Device-Memory, DPR, Viewport-Width +Accept-CH-Lifetime: 1 diff --git a/tests/wpt/web-platform-tests/client-hints/resources/accept_ch_lifetime.html.headers b/tests/wpt/web-platform-tests/client-hints/resources/accept_ch_lifetime.html.headers index bd90f6eced0..370f9869226 100644 --- a/tests/wpt/web-platform-tests/client-hints/resources/accept_ch_lifetime.html.headers +++ b/tests/wpt/web-platform-tests/client-hints/resources/accept_ch_lifetime.html.headers @@ -1,3 +1,3 @@ -Accept-CH: device-memory +Accept-CH: device-memory, DPR Accept-CH-Lifetime: 1 Access-Control-Allow-Origin: * diff --git a/tests/wpt/web-platform-tests/client-hints/resources/expect-client-hints-headers-iframe.py b/tests/wpt/web-platform-tests/client-hints/resources/expect-client-hints-headers-iframe.py new file mode 100644 index 00000000000..e72d77c47d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/client-hints/resources/expect-client-hints-headers-iframe.py @@ -0,0 +1,21 @@ +def main(request, response): + """ + Simple handler that returns an HTML response that passes when the required + Client Hints are received as request headers. + """ + values = [ "Device-Memory", "DPR", "Viewport-Width" ] + + result = "PASS" + log = "" + for value in values: + should = (request.GET[value.lower()] == "true") + present = request.headers.get(value.lower()) or request.headers.get(value) + log += value + " " + str(should) + " " + str(present) +", " + if (should and not present) or (not should and present): + result = "FAIL " + value + " " + str(should) + " " + str(present) + break + + response.headers.append("Access-Control-Allow-Origin", "*") + body = "<script>console.log('" + log +"'); window.parent.postMessage('" + result + "', '*');</script>" + + response.content = body diff --git a/tests/wpt/web-platform-tests/client-hints/resources/feature-policy-navigation.js b/tests/wpt/web-platform-tests/client-hints/resources/feature-policy-navigation.js new file mode 100644 index 00000000000..4487d9a4473 --- /dev/null +++ b/tests/wpt/web-platform-tests/client-hints/resources/feature-policy-navigation.js @@ -0,0 +1,19 @@ +const test_frame = (origin, hints, allow, message, url = "/client-hints/resources/expect-client-hints-headers-iframe.py?") => { + promise_test(() => { + return new Promise((resolve, reject) => { + let frame = document.createElement('iframe'); + frame.src = get_host_info()[origin] + url + hints; + frame.allow = allow; + window.addEventListener('message', function(e) { + try { + assert_equals(typeof e.data, "string"); + assert_equals(e.data, "PASS"); + } catch { + reject(e.data); + } + resolve(); + }); + document.body.appendChild(frame); + }); + }, message); +} diff --git a/tests/wpt/web-platform-tests/client-hints/resources/iframe-accept-ch-lifetime.html b/tests/wpt/web-platform-tests/client-hints/resources/iframe-accept-ch-lifetime.html new file mode 100644 index 00000000000..693e4f94dcc --- /dev/null +++ b/tests/wpt/web-platform-tests/client-hints/resources/iframe-accept-ch-lifetime.html @@ -0,0 +1,3 @@ +<script> + window.parent.postMessage('PASS', '*'); +</script> diff --git a/tests/wpt/web-platform-tests/client-hints/resources/iframe-accept-ch-lifetime.html.headers b/tests/wpt/web-platform-tests/client-hints/resources/iframe-accept-ch-lifetime.html.headers new file mode 100644 index 00000000000..8e6dc72dda6 --- /dev/null +++ b/tests/wpt/web-platform-tests/client-hints/resources/iframe-accept-ch-lifetime.html.headers @@ -0,0 +1,4 @@ +Accept-CH: DPR +Accept-CH-Lifetime: 1 +Access-Control-Allow-Origin: * + diff --git a/tests/wpt/web-platform-tests/common/security-features/resources/common.sub.js b/tests/wpt/web-platform-tests/common/security-features/resources/common.sub.js index c974e83b960..b43417b417c 100644 --- a/tests/wpt/web-platform-tests/common/security-features/resources/common.sub.js +++ b/tests/wpt/web-platform-tests/common/security-features/resources/common.sub.js @@ -1,5 +1,5 @@ /** - * @fileoverview Utilities for mixed-content in Web Platform Tests. + * @fileoverview Utilities for mixed-content in web-platform-tests. * @author burnik@google.com (Kristijan Burnik) * Disclaimer: Some methods of other authors are annotated in the corresponding * method's JSDoc. @@ -314,19 +314,6 @@ function createRequestViaElement(tagName, attrs, parentNode) { return createElement(tagName, attrs, parentNode, true).eventPromise; } -/** - * Creates a new empty iframe and appends it to {@code document.body} . - * @param {string} name The name and ID of the new iframe. - * @param {boolean} doBindEvents Whether to bind load and error events. - * @return {DOMElement} The newly created iframe. - */ -function createHelperIframe(name, doBindEvents) { - return createElement("iframe", - {"name": name, "id": name}, - document.body, - doBindEvents); -} - function wrapResult(server_data) { if (typeof(server_data) === "string") { throw server_data; @@ -394,7 +381,7 @@ function wrapResult(server_data) { requestViaAudio 3 - Y - requestViaDedicatedWorker 2 Y Y Y requestViaFetch 2 Y Y - - requestViaForm 3 - Y - + requestViaForm 2 - Y - requestViaIframe 1 Y Y - requestViaImage 2 Y Y - requestViaLinkPrefetch 3 - Y - @@ -583,18 +570,29 @@ function requestViaWorklet(type, url) { } /** - * Sets the href attribute on a navigable DOM element and performs a navigation - * by clicking it. To avoid navigating away from the current execution - * context, a target attribute is set to point to a new helper iframe. - * @param {DOMElement} navigableElement The navigable DOMElement - * @param {string} url The href for the navigable element. + * Creates a navigable element with the name `navigableElementName` + * (<a>, <area>, or <form>) under `parentNode`, and + * performs a navigation by `trigger()` (e.g. clicking <a>). + * To avoid navigating away from the current execution context, + * a target attribute is set to point to a new helper iframe. + * @param {string} navigableElementName + * @param {object} additionalAttributes The attributes of the navigable element. + * @param {DOMElement} parentNode + * @param {function(DOMElement} trigger A callback called after the navigable + * element is inserted and should trigger navigation using the element. * @return {Promise} The promise for success/error events. */ -function requestViaNavigable(navigableElement, url) { - var iframe = createHelperIframe(guid(), false); - setAttributes(navigableElement, - {"href": url, - "target": iframe.name}); +function requestViaNavigable(navigableElementName, additionalAttributes, + parentNode, trigger) { + const name = guid(); + + const iframe = + createElement("iframe", {"name": name, "id": name}, parentNode, false); + + const navigable = createElement( + navigableElementName, + Object.assign({"target": name}, additionalAttributes), + parentNode, false); const promise = bindEvents2(window, "message", iframe, "error", window, "error") @@ -603,7 +601,7 @@ function requestViaNavigable(navigableElement, url) { return Promise.reject(new Error('Unexpected event.source')); return event.data; }); - navigableElement.click(); + trigger(navigable); return promise; } @@ -614,12 +612,11 @@ function requestViaNavigable(navigableElement, url) { * @return {Promise} The promise for success/error events. */ function requestViaAnchor(url, additionalAttributes) { - var a = createElement( + return requestViaNavigable( "a", - Object.assign({"innerHTML": "Link to resource"}, additionalAttributes), - document.body); - - return requestViaNavigable(a, url); + Object.assign({"href": url, "innerHTML": "Link to resource"}, + additionalAttributes), + document.body, a => a.click()); } /** @@ -629,13 +626,11 @@ function requestViaAnchor(url, additionalAttributes) { * @return {Promise} The promise for success/error events. */ function requestViaArea(url, additionalAttributes) { - var area = createElement( - "area", - Object.assign({}, additionalAttributes), - document.body); - // TODO(kristijanburnik): Append to map and add image. - return requestViaNavigable(area, url); + return requestViaNavigable( + "area", + Object.assign({"href": url}, additionalAttributes), + document.body, area => area.click()); } /** @@ -661,17 +656,11 @@ function requestViaScript(url, additionalAttributes) { * @param {string} url The URL to submit to. * @return {Promise} The promise for success/error events. */ -function requestViaForm(url) { - var iframe = createHelperIframe(guid()); - var form = createElement("form", - {"action": url, - "method": "POST", - "target": iframe.name}, - document.body); - bindEvents(iframe); - form.submit(); - - return iframe.eventPromise; +function requestViaForm(url, additionalAttributes) { + return requestViaNavigable( + "form", + Object.assign({"action": url, "method": "POST"}, additionalAttributes), + document.body, form => form.submit()); } /** @@ -866,7 +855,7 @@ const subresourceMap = { invoker: requestViaFetch, }, "form-tag": { - path: "/common/security-features/subresource/empty.py", + path: "/common/security-features/subresource/document.py", invoker: requestViaForm, }, "iframe-tag": { diff --git a/tests/wpt/web-platform-tests/compat/webkit-box-clamp-visibility-change-ref.html b/tests/wpt/web-platform-tests/compat/webkit-box-clamp-visibility-change-ref.html new file mode 100644 index 00000000000..20ec3bfaf8b --- /dev/null +++ b/tests/wpt/web-platform-tests/compat/webkit-box-clamp-visibility-change-ref.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<link rel="help" href="https://crbug.com/1015987"> +<style> + #wb { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 3; + overflow: hidden; + } +</style> +<p>Line-clamp should be respected after removing and changing visibility. +<div id="root" style="border: solid; width: 200px;"> + <div id="container"> + <p id="wb"> + text text text text + text text text text + text text text text + text text text text + text text text text + text text text text + text text text text + </p> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/compat/webkit-box-clamp-visibility-change.html b/tests/wpt/web-platform-tests/compat/webkit-box-clamp-visibility-change.html new file mode 100644 index 00000000000..115fa436652 --- /dev/null +++ b/tests/wpt/web-platform-tests/compat/webkit-box-clamp-visibility-change.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<link rel="help" href="https://crbug.com/1015987"> +<link rel="match" href="webkit-box-clamp-visibility-change-ref.html"> +<style> + #wb { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 3; + overflow: hidden; + } +</style> +<p>Line-clamp should be respected after removing and changing visibility. +<div id="root" style="border: solid; width: 200px;"> + <div id="container"> + <p id="wb"> + text text text text + text text text text + text text text text + text text text text + text text text text + text text text text + text text text text + </p> + </div> +</div> +<script> + const container = document.getElementById('container'); + const root = document.getElementById('root'); + container.remove(); + container.style.visibility = 'hidden'; + root.appendChild(container); + document.body.offsetTop; + container.style.visibility = ''; +</script> diff --git a/tests/wpt/web-platform-tests/contacts/contacts-select.https.window.js b/tests/wpt/web-platform-tests/contacts/contacts-select.https.window.js index 617dee8b7f8..c93d711ed52 100644 --- a/tests/wpt/web-platform-tests/contacts/contacts-select.https.window.js +++ b/tests/wpt/web-platform-tests/contacts/contacts-select.https.window.js @@ -64,13 +64,15 @@ contactsTestWithUserActivation(async (test, setSelectedContacts) => { city: 'Scranton', addressLine: ['Schrute Farms'], }; + const michaelIcons = [new Blob('image binary data'.split(''), {type: 'image/test'})]; + // Returns two contacts with all information available. setSelectedContacts([ { name: ['Dwight Schrute'], email: ['dwight@schrutefarmsbnb.com'], tel: ['000-0000'], address: [dwightAddress] }, - { name: ['Michael Scott', 'Prison Mike'], email: ['michael@dundermifflin.com'] }, + { name: ['Michael Scott', 'Prison Mike'], email: ['michael@dundermifflin.com'], icon: michaelIcons }, ]); - let results = await navigator.contacts.select(['name', 'email', 'tel', 'address'], { multiple: true }); + let results = await navigator.contacts.select(['name', 'email', 'icon', 'tel', 'address'], { multiple: true }); assert_equals(results.length, 2); results = results.sort((c1, c2) => JSON.stringify(c1) < JSON.stringify(c2) ? -1 : 1); @@ -81,11 +83,17 @@ contactsTestWithUserActivation(async (test, setSelectedContacts) => { assert_own_property(michael, 'email'); assert_own_property(michael, 'tel'); assert_own_property(michael, 'address'); + assert_own_property(michael, 'icon'); assert_array_equals(michael.name, ['Michael Scott', 'Prison Mike']); assert_array_equals(michael.email, ['michael@dundermifflin.com']); assert_array_equals(michael.tel, []); assert_array_equals(michael.address, []); + + assert_equals(michael.icon.length, michaelIcons.length); + assert_equals(michael.icon[0].type, michaelIcons[0].type); + assert_equals(michael.icon[0].size, michaelIcons[0].size); + assert_equals(await michael.icon[0].text(), await michaelIcons[0].text()); } { @@ -94,10 +102,12 @@ contactsTestWithUserActivation(async (test, setSelectedContacts) => { assert_own_property(dwight, 'email'); assert_own_property(dwight, 'tel'); assert_own_property(dwight, 'address'); + assert_own_property(dwight, 'icon'); assert_array_equals(dwight.name, ['Dwight Schrute']); assert_array_equals(dwight.email, ['dwight@schrutefarmsbnb.com']); assert_array_equals(dwight.tel, ['000-0000']); + assert_array_equals(dwight.icon, []); assert_equals(dwight.address.length, 1); const selectedAddress = dwight.address[0]; diff --git a/tests/wpt/web-platform-tests/content-security-policy/README.html b/tests/wpt/web-platform-tests/content-security-policy/README.html index 98fd5c4bf78..8986d736a0e 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/README.html +++ b/tests/wpt/web-platform-tests/content-security-policy/README.html @@ -46,7 +46,7 @@ <script> test(function() { - asset_unreached('Unsafe inline script ran.')}, + assert_unreached('Unsafe inline script ran.')}, 'Inline script in a script tag should not run without an unsafe-inline directive' ); </script> diff --git a/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document-meta.html b/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document-meta.html new file mode 100644 index 00000000000..f3750b1e7d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document-meta.html @@ -0,0 +1,54 @@ +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<html> +<body></body> +<script> + async_test(async test => { + // 1. Load an iframe (not blocked). + let iframe = document.createElement("iframe"); + { + iframe.name = "theiframe"; + iframe.src = + "http://www1.{{host}}/content-security-policy/support/frame.html#0"; + let iframeLoaded = new Promise(resolve => { iframe.onload = resolve; }); + document.body.appendChild(iframe); + await iframeLoaded; + } + + // 2. Start blocking iframes using CSP frame-src 'none'. + { + let meta = document.createElement('meta'); + meta.httpEquiv = "Content-Security-Policy"; + meta.content = "frame-src 'none'"; + document.getElementsByTagName('head')[0].appendChild(meta); + } + + // 3. Blocked same-document navigation using iframe.src. + { + let violation = new Promise(resolve => { + window.addEventListener('securitypolicyviolation', resolve); + }); + iframe.src = + "http://www1.{{host}}/content-security-policy/support/frame.html#1"; + await violation; + } + + // 4. Blocked same-document navigation using window.open. + { + let violation = new Promise(resolve => { + window.addEventListener('securitypolicyviolation', resolve); + }); + window.open( + "http://www1.{{host}}/content-security-policy/support/frame.html#2", + "theiframe"); + await violation; + } + + // 5. Regression test for https://crbug.com/1018385. The browser should + // not crash while displaying the error page. + await new Promise(resolve => window.setTimeout(resolve, 1000)); + + test.done(); + }, "Same-document navigations in an iframe blocked by CSP frame-src dynamically using the <meta> tag"); +</script> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document.html b/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document.html new file mode 100644 index 00000000000..398d0223bcb --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document.html @@ -0,0 +1,25 @@ +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<html> +<body></body> +<script> + let crossOriginUrl = + "http://www1.{{host}}/content-security-policy/support/frame.html"; + + async_test(async test => { + test.done(); + let iframe = document.createElement("iframe"); + document.body.appendChild(iframe); + + for(let hash of ["#0", "#1"]) { + let violation = new Promise(resolve => { + window.addEventListener('securitypolicyviolation', resolve); + }); + iframe.src = crossOriginUrl + hash; + await violation; + } + + test.done(); + }, "Same-document navigation in an iframe blocked by CSP frame-src"); +</script> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document.html.headers b/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document.html.headers new file mode 100644 index 00000000000..6502444407f --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/frame-src/frame-src-same-document.html.headers @@ -0,0 +1 @@ +Content-Security-Policy: frame-src 'none' diff --git a/tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_1-script-src.html b/tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_1-script-src.html index 35033c3899f..b374b8b88e9 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_1-script-src.html +++ b/tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_1-script-src.html @@ -2,7 +2,7 @@ <html> <head> <title>default-src should cascade to script-src directive</title> - <meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline'; report-uri ../support/report.py?op=put&reportID={{$id}}"> + <meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline';"> <script src='/resources/testharness.js'></script> <script src='/resources/testharnessreport.js'></script> <script src='../support/siblingPath.js'></script> diff --git a/tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_10.html b/tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_10.sub.html index 5dfd9d83c7f..d4f52d8b8d1 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_10.html +++ b/tests/wpt/web-platform-tests/content-security-policy/generic/generic-0_10.sub.html @@ -2,7 +2,7 @@ <html> <head> <title>test implicit port number matching (requires port 80)</title> - <meta http-equiv="Content-Security-Policy content="script-src 'self' www.{{host}} 'unsafe-inline';"> + <meta http-equiv="Content-Security-Policy content="script-src 'self' {{domains[www]}} 'unsafe-inline';"> <script src='/resources/testharness.js'></script> <script src='/resources/testharnessreport.js'></script> <script> @@ -12,7 +12,7 @@ var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); script.type = 'text/javascript'; - script.src = "http://www." + location.hostname + "/content-security-policy/generic/positiveTest.js"; + script.src = "http://{{domains[www]}}/content-security-policy/generic/positiveTest.js"; head.appendChild(script); </script> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-attachment-local/reftest.list b/tests/wpt/web-platform-tests/css/css-backgrounds/background-attachment-local/reftest.list deleted file mode 100644 index b1d23371e3e..00000000000 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/background-attachment-local/reftest.list +++ /dev/null @@ -1,20 +0,0 @@ -== attachment-scroll-positioning-1.html attachment-scroll-positioning-1-ref.html -== attachment-local-positioning-1.html attachment-local-positioning-1-ref.html -== attachment-local-positioning-2.html attachment-local-positioning-2-ref.html -== attachment-local-positioning-3.html attachment-local-positioning-3-ref.html -== attachment-local-positioning-4.html attachment-local-positioning-4-ref.html -== attachment-local-positioning-5.html attachment-local-positioning-5-ref.html - -== attachment-local-clipping-color-1.html attachment-local-clipping-color-1-ref.html -== attachment-local-clipping-color-2.html attachment-local-clipping-color-1-ref.html # Same ref as the previous test. -== attachment-local-clipping-color-3.html attachment-local-clipping-color-3-ref.html -== attachment-local-clipping-color-4.html attachment-local-clipping-color-4-ref.html -== attachment-local-clipping-color-5.html attachment-local-clipping-color-4-ref.html # Same ref as the previous test. -fuzzy(0-50,0-500) == attachment-local-clipping-color-6.html attachment-local-clipping-color-6-ref.html - -== attachment-local-clipping-image-1.html attachment-local-clipping-image-1-ref.html -== attachment-local-clipping-image-2.html attachment-local-clipping-image-1-ref.html # Same ref as the previous test. -== attachment-local-clipping-image-3.html attachment-local-clipping-image-3-ref.html -== attachment-local-clipping-image-4.html attachment-local-clipping-image-4-ref.html -== attachment-local-clipping-image-5.html attachment-local-clipping-image-4-ref.html # Same ref as the previous test. -fuzzy(0-80,0-500) == attachment-local-clipping-image-6.html attachment-local-clipping-image-6-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/vector/empty/reftest.list b/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/vector/empty/reftest.list deleted file mode 100644 index 8cacdc1e469..00000000000 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/vector/empty/reftest.list +++ /dev/null @@ -1,30 +0,0 @@ -== tall--contain--height.html ref-tall-empty.html -== tall--contain--width.html ref-tall-empty.html -== wide--contain--height.html ref-wide-empty.html -== wide--contain--width.html ref-wide-empty.html - -# Either OS X 32-bit or 10.5, judging from imprecise Tinderbox results, renders -# these tests as empty boxes, not filled boxes. We don't really care about this -# extreme edge case (the test exists more to test for safety against division by -# zero), so there is no bug has been filed to fix it, although a patch would -# probably be accepted. -random-if(cocoaWidget) == tall--cover--height.html ref-tall-lime.html -random-if(cocoaWidget) == tall--cover--width.html ref-tall-lime.html -random-if(cocoaWidget) == wide--cover--height.html ref-wide-lime.html -random-if(cocoaWidget) == wide--cover--width.html ref-wide-lime.html - -== zero-height-ratio-contain.html ref-tall-empty.html -== zero-height-ratio-cover.html ref-tall-empty.html -== zero-height-ratio-auto-auto.html ref-tall-empty.html -== zero-height-ratio-auto-5px.html ref-tall-empty.html -== zero-height-ratio-5px-auto.html ref-tall-empty.html -== zero-width-ratio-contain.html ref-tall-empty.html -== zero-width-ratio-cover.html ref-tall-empty.html -== zero-width-ratio-auto-auto.html ref-tall-empty.html -== zero-width-ratio-auto-5px.html ref-tall-empty.html -== zero-width-ratio-5px-auto.html ref-tall-empty.html -== zero-ratio-no-dimensions-contain.html ref-tall-empty.html -== zero-ratio-no-dimensions-cover.html ref-tall-empty.html -== zero-ratio-no-dimensions-auto-5px.html ref-tall-empty.html -== zero-ratio-no-dimensions-5px-auto.html ref-tall-empty.html -== zero-ratio-no-dimensions-auto-auto.html ref-tall-empty.html diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/vector/reftest.list b/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/vector/reftest.list deleted file mode 100644 index 6b9fe45f97e..00000000000 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/vector/reftest.list +++ /dev/null @@ -1,208 +0,0 @@ -include empty/reftest.list - -################################################################################ -# For reference (although the wide--32px-auto* tests/names were changed to -# avoid viewBox-directed scaling to make the scaled height less than the wide- -# tests height): -# -# for ORIENTATION in tall wide; do for SIZE in 32px-auto auto-32px auto contain cover; do for VIMAGE in *.svg; do cat template.html | sed -e "s/SIZE/$(echo $SIZE | sed -e 's/-/ /')/g" | sed -e "s/VIMAGE/$VIMAGE/g" | sed -e "s/TALLWIDE/$ORIENTATION/g" | sed -e "s/ORIENTATION/$(if [ "$ORIENTATION" = "tall" ]; then echo 'width: 256px; height: 768px'; else echo 'width: 768px; height: 256px'; fi)/g" > $ORIENTATION--$SIZE--$(echo $VIMAGE | sed -e 's/.svg//').html; echo "== $ORIENTATION--$SIZE--$(echo $VIMAGE | sed -e 's/.svg//').html ###" >> reftest.list; done; echo >> reftest.list; done; done -# -################################################################################ - -== tall--32px-auto--nonpercent-width-nonpercent-height.html ref-tall-lime32x64-aqua32x64.html -== tall--32px-auto--nonpercent-width-nonpercent-height-viewbox.html ref-tall-lime32x64-aqua32x64.html -== tall--32px-auto--nonpercent-width-omitted-height.html ref-tall-lime32x384-aqua32x384.html -== tall--32px-auto--nonpercent-width-omitted-height-viewbox.html ref-tall-lime32x256-aqua32x256.html -== tall--32px-auto--nonpercent-width-percent-height.html ref-tall-lime32x384-aqua32x384.html -== tall--32px-auto--nonpercent-width-percent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html -== tall--32px-auto--omitted-width-nonpercent-height.html ref-tall-lime32x16-aqua32x16.html -== tall--32px-auto--omitted-width-nonpercent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html -== tall--32px-auto--omitted-width-omitted-height.html ref-tall-lime32x384-aqua32x384.html -== tall--32px-auto--omitted-width-omitted-height-viewbox.html ref-tall-lime32x256-aqua32x256.html -== tall--32px-auto--omitted-width-percent-height.html ref-tall-lime32x384-aqua32x384.html -== tall--32px-auto--omitted-width-percent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html -== tall--32px-auto--percent-width-nonpercent-height.html ref-tall-lime32x16-aqua32x16.html -== tall--32px-auto--percent-width-nonpercent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html -== tall--32px-auto--percent-width-omitted-height.html ref-tall-lime32x384-aqua32x384.html -== tall--32px-auto--percent-width-omitted-height-viewbox.html ref-tall-lime32x256-aqua32x256.html -== tall--32px-auto--percent-width-percent-height.html ref-tall-lime32x384-aqua32x384.html -== tall--32px-auto--percent-width-percent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html - -== tall--auto-32px--nonpercent-width-nonpercent-height.html ref-tall-lime8x16-aqua8x16.html -== tall--auto-32px--nonpercent-width-nonpercent-height-viewbox.html ref-tall-lime8x16-aqua8x16.html -== tall--auto-32px--nonpercent-width-omitted-height.html ref-tall-lime8x16-aqua8x16.html -== tall--auto-32px--nonpercent-width-omitted-height-viewbox.html ref-tall-lime2x16-aqua2x16.html -== tall--auto-32px--nonpercent-width-percent-height.html ref-tall-lime8x16-aqua8x16.html -== tall--auto-32px--nonpercent-width-percent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html -== tall--auto-32px--omitted-width-nonpercent-height.html ref-tall-lime256x16-aqua256x16.html -== tall--auto-32px--omitted-width-nonpercent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html -== tall--auto-32px--omitted-width-omitted-height.html ref-tall-lime256x16-aqua256x16.html -== tall--auto-32px--omitted-width-omitted-height-viewbox.html ref-tall-lime2x16-aqua2x16.html -== tall--auto-32px--omitted-width-percent-height.html ref-tall-lime256x16-aqua256x16.html -== tall--auto-32px--omitted-width-percent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html -== tall--auto-32px--percent-width-nonpercent-height.html ref-tall-lime256x16-aqua256x16.html -== tall--auto-32px--percent-width-nonpercent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html -== tall--auto-32px--percent-width-omitted-height.html ref-tall-lime256x16-aqua256x16.html -== tall--auto-32px--percent-width-omitted-height-viewbox.html ref-tall-lime2x16-aqua2x16.html -== tall--auto-32px--percent-width-percent-height.html ref-tall-lime256x16-aqua256x16.html -== tall--auto-32px--percent-width-percent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html - -== tall--auto--nonpercent-width-nonpercent-height.html ref-tall-lime8x16-aqua8x16.html -== tall--auto--nonpercent-width-nonpercent-height-viewbox.html ref-tall-lime8x16-aqua8x16.html -== tall--auto--nonpercent-width-omitted-height.html ref-tall-lime8x384-aqua8x384.html -== tall--auto--nonpercent-width-omitted-height-viewbox.html ref-tall-lime8x64-aqua8x64.html -== tall--auto--nonpercent-width-percent-height.html ref-tall-lime8x384-aqua8x384.html -== tall--auto--nonpercent-width-percent-height-viewbox.html ref-tall-lime8x64-aqua8x64.html -== tall--auto--omitted-width-nonpercent-height.html ref-tall-lime256x16-aqua256x16.html -== tall--auto--omitted-width-nonpercent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html -== tall--auto--omitted-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html -== tall--auto--omitted-width-omitted-height-viewbox.html ref-tall-lime48x384-aqua48x384.html -== tall--auto--omitted-width-percent-height.html ref-tall-lime256x384-aqua256x384.html -== tall--auto--omitted-width-percent-height-viewbox.html ref-tall-lime48x384-aqua48x384.html -== tall--auto--percent-width-nonpercent-height.html ref-tall-lime256x16-aqua256x16.html -== tall--auto--percent-width-nonpercent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html -== tall--auto--percent-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html -== tall--auto--percent-width-omitted-height-viewbox.html ref-tall-lime48x384-aqua48x384.html -== tall--auto--percent-width-percent-height.html ref-tall-lime256x384-aqua256x384.html -== tall--auto--percent-width-percent-height-viewbox.html ref-tall-lime48x384-aqua48x384.html - -== tall--contain--nonpercent-width-nonpercent-height.html ref-tall-lime192x384-aqua192x384.html -== tall--contain--nonpercent-width-nonpercent-height-viewbox.html ref-tall-lime192x384-aqua192x384.html -== tall--contain--nonpercent-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html -== tall--contain--nonpercent-width-omitted-height-viewbox.html ref-tall-lime48x384-aqua48x384.html -== tall--contain--nonpercent-width-percent-height.html ref-tall-lime256x384-aqua256x384.html -== tall--contain--nonpercent-width-percent-height-viewbox.html ref-tall-lime48x384-aqua48x384.html -== tall--contain--omitted-width-nonpercent-height.html ref-tall-lime256x384-aqua256x384.html -== tall--contain--omitted-width-nonpercent-height-viewbox.html ref-tall-lime48x384-aqua48x384.html -== tall--contain--omitted-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html -== tall--contain--omitted-width-omitted-height-viewbox.html ref-tall-lime48x384-aqua48x384.html -== tall--contain--omitted-width-percent-height.html ref-tall-lime256x384-aqua256x384.html -== tall--contain--omitted-width-percent-height-viewbox.html ref-tall-lime48x384-aqua48x384.html -== tall--contain--percent-width-nonpercent-height.html ref-tall-lime256x384-aqua256x384.html -== tall--contain--percent-width-nonpercent-height-viewbox.html ref-tall-lime48x384-aqua48x384.html -== tall--contain--percent-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html -== tall--contain--percent-width-omitted-height-viewbox.html ref-tall-lime48x384-aqua48x384.html -== tall--contain--percent-width-percent-height.html ref-tall-lime256x384-aqua256x384.html -== tall--contain--percent-width-percent-height-viewbox.html ref-tall-lime48x384-aqua48x384.html - -# We smear the background image when scaling it in these two tests... -fails == tall--cover--nonpercent-width-nonpercent-height.html ref-tall-lime256x512-aqua256x256.html -fails == tall--cover--nonpercent-width-nonpercent-height-viewbox.html ref-tall-lime256x512-aqua256x256.html - -# ...but we don't in identical tests with image-rendering: -moz-crisp-edges. -== tall--cover--nonpercent-width-nonpercent-height--crisp.html ref-tall-lime256x512-aqua256x256.html -== tall--cover--nonpercent-width-nonpercent-height-viewbox--crisp.html ref-tall-lime256x512-aqua256x256.html - -== tall--cover--nonpercent-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html -== tall--cover--nonpercent-width-omitted-height-viewbox.html ref-tall-lime256x768.html -== tall--cover--nonpercent-width-percent-height.html ref-tall-lime256x384-aqua256x384.html -== tall--cover--nonpercent-width-percent-height-viewbox.html ref-tall-lime256x768.html -== tall--cover--omitted-width-nonpercent-height.html ref-tall-lime256x384-aqua256x384.html -== tall--cover--omitted-width-nonpercent-height-viewbox.html ref-tall-lime256x768.html -== tall--cover--omitted-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html -== tall--cover--omitted-width-omitted-height-viewbox.html ref-tall-lime256x768.html -== tall--cover--omitted-width-percent-height.html ref-tall-lime256x384-aqua256x384.html -== tall--cover--omitted-width-percent-height-viewbox.html ref-tall-lime256x768.html -== tall--cover--percent-width-nonpercent-height.html ref-tall-lime256x384-aqua256x384.html -== tall--cover--percent-width-nonpercent-height-viewbox.html ref-tall-lime256x768.html -== tall--cover--percent-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html -== tall--cover--percent-width-omitted-height-viewbox.html ref-tall-lime256x768.html -== tall--cover--percent-width-percent-height.html ref-tall-lime256x384-aqua256x384.html -== tall--cover--percent-width-percent-height-viewbox.html ref-tall-lime256x768.html - -== wide--12px-auto--nonpercent-width-nonpercent-height.html ref-wide-lime12x24-aqua12x24.html -== wide--12px-auto--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime12x24-aqua12x24.html -== wide--12px-auto--nonpercent-width-omitted-height.html ref-wide-lime12x128-aqua12x128.html -== wide--12px-auto--nonpercent-width-omitted-height-viewbox.html ref-wide-lime12x96-aqua12x96.html -== wide--12px-auto--nonpercent-width-percent-height.html ref-wide-lime12x128-aqua12x128.html -== wide--12px-auto--nonpercent-width-percent-height-viewbox.html ref-wide-lime12x96-aqua12x96.html -== wide--12px-auto--omitted-width-nonpercent-height.html ref-wide-lime12x16-aqua12x16.html -== wide--12px-auto--omitted-width-nonpercent-height-viewbox.html ref-wide-lime12x96-aqua12x96.html -== wide--12px-auto--omitted-width-omitted-height.html ref-wide-lime12x128-aqua12x128.html -== wide--12px-auto--omitted-width-omitted-height-viewbox.html ref-wide-lime12x96-aqua12x96.html -== wide--12px-auto--omitted-width-percent-height.html ref-wide-lime12x128-aqua12x128.html -== wide--12px-auto--omitted-width-percent-height-viewbox.html ref-wide-lime12x96-aqua12x96.html -== wide--12px-auto--percent-width-nonpercent-height.html ref-wide-lime12x16-aqua12x16.html -== wide--12px-auto--percent-width-nonpercent-height-viewbox.html ref-wide-lime12x96-aqua12x96.html -== wide--12px-auto--percent-width-omitted-height.html ref-wide-lime12x128-aqua12x128.html -== wide--12px-auto--percent-width-omitted-height-viewbox.html ref-wide-lime12x96-aqua12x96.html -== wide--12px-auto--percent-width-percent-height.html ref-wide-lime12x128-aqua12x128.html -== wide--12px-auto--percent-width-percent-height-viewbox.html ref-wide-lime12x96-aqua12x96.html - -== wide--auto-32px--nonpercent-width-nonpercent-height.html ref-wide-lime8x16-aqua8x16.html -== wide--auto-32px--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime8x16-aqua8x16.html -== wide--auto-32px--nonpercent-width-omitted-height.html ref-wide-lime8x16-aqua8x16.html -== wide--auto-32px--nonpercent-width-omitted-height-viewbox.html ref-wide-lime2x16-aqua2x16.html -== wide--auto-32px--nonpercent-width-percent-height.html ref-wide-lime8x16-aqua8x16.html -== wide--auto-32px--nonpercent-width-percent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html -== wide--auto-32px--omitted-width-nonpercent-height.html ref-wide-lime768x16-aqua768x16.html -== wide--auto-32px--omitted-width-nonpercent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html -== wide--auto-32px--omitted-width-omitted-height.html ref-wide-lime768x16-aqua768x16.html -== wide--auto-32px--omitted-width-omitted-height-viewbox.html ref-wide-lime2x16-aqua2x16.html -== wide--auto-32px--omitted-width-percent-height.html ref-wide-lime768x16-aqua768x16.html -== wide--auto-32px--omitted-width-percent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html -== wide--auto-32px--percent-width-nonpercent-height.html ref-wide-lime768x16-aqua768x16.html -== wide--auto-32px--percent-width-nonpercent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html -== wide--auto-32px--percent-width-omitted-height.html ref-wide-lime768x16-aqua768x16.html -== wide--auto-32px--percent-width-omitted-height-viewbox.html ref-wide-lime2x16-aqua2x16.html -== wide--auto-32px--percent-width-percent-height.html ref-wide-lime768x16-aqua768x16.html -== wide--auto-32px--percent-width-percent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html - -== wide--auto--nonpercent-width-nonpercent-height.html ref-wide-lime8x16-aqua8x16.html -== wide--auto--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime8x16-aqua8x16.html -== wide--auto--nonpercent-width-omitted-height.html ref-wide-lime8x128-aqua8x128.html -== wide--auto--nonpercent-width-omitted-height-viewbox.html ref-wide-lime8x64-aqua8x64.html -== wide--auto--nonpercent-width-percent-height.html ref-wide-lime8x128-aqua8x128.html -== wide--auto--nonpercent-width-percent-height-viewbox.html ref-wide-lime8x64-aqua8x64.html -== wide--auto--omitted-width-nonpercent-height.html ref-wide-lime768x16-aqua768x16.html -== wide--auto--omitted-width-nonpercent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html -== wide--auto--omitted-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html -== wide--auto--omitted-width-omitted-height-viewbox.html ref-wide-lime16x128-aqua16x128.html -== wide--auto--omitted-width-percent-height.html ref-wide-lime768x128-aqua768x128.html -== wide--auto--omitted-width-percent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html -== wide--auto--percent-width-nonpercent-height.html ref-wide-lime768x16-aqua768x16.html -== wide--auto--percent-width-nonpercent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html -== wide--auto--percent-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html -== wide--auto--percent-width-omitted-height-viewbox.html ref-wide-lime16x128-aqua16x128.html -== wide--auto--percent-width-percent-height.html ref-wide-lime768x128-aqua768x128.html -== wide--auto--percent-width-percent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html - -== wide--contain--nonpercent-width-nonpercent-height.html ref-wide-lime64x128-aqua64x128.html -== wide--contain--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime64x128-aqua64x128.html -== wide--contain--nonpercent-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html -== wide--contain--nonpercent-width-omitted-height-viewbox.html ref-wide-lime16x128-aqua16x128.html -== wide--contain--nonpercent-width-percent-height.html ref-wide-lime768x128-aqua768x128.html -== wide--contain--nonpercent-width-percent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html -== wide--contain--omitted-width-nonpercent-height.html ref-wide-lime768x128-aqua768x128.html -== wide--contain--omitted-width-nonpercent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html -== wide--contain--omitted-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html -== wide--contain--omitted-width-omitted-height-viewbox.html ref-wide-lime16x128-aqua16x128.html -== wide--contain--omitted-width-percent-height.html ref-wide-lime768x128-aqua768x128.html -== wide--contain--omitted-width-percent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html -== wide--contain--percent-width-nonpercent-height.html ref-wide-lime768x128-aqua768x128.html -== wide--contain--percent-width-nonpercent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html -== wide--contain--percent-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html -== wide--contain--percent-width-omitted-height-viewbox.html ref-wide-lime16x128-aqua16x128.html -== wide--contain--percent-width-percent-height.html ref-wide-lime768x128-aqua768x128.html -== wide--contain--percent-width-percent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html - -== wide--cover--nonpercent-width-nonpercent-height.html ref-wide-lime768x256.html -== wide--cover--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime768x256.html -== wide--cover--nonpercent-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html -== wide--cover--nonpercent-width-omitted-height-viewbox.html ref-wide-lime768x256.html -== wide--cover--nonpercent-width-percent-height.html ref-wide-lime768x128-aqua768x128.html -== wide--cover--nonpercent-width-percent-height-viewbox.html ref-wide-lime768x256.html -== wide--cover--omitted-width-nonpercent-height.html ref-wide-lime768x128-aqua768x128.html -== wide--cover--omitted-width-nonpercent-height-viewbox.html ref-wide-lime768x256.html -== wide--cover--omitted-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html -== wide--cover--omitted-width-omitted-height-viewbox.html ref-wide-lime768x256.html -== wide--cover--omitted-width-percent-height.html ref-wide-lime768x128-aqua768x128.html -== wide--cover--omitted-width-percent-height-viewbox.html ref-wide-lime768x256.html -== wide--cover--percent-width-nonpercent-height.html ref-wide-lime768x128-aqua768x128.html -== wide--cover--percent-width-nonpercent-height-viewbox.html ref-wide-lime768x256.html -== wide--cover--percent-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html -== wide--cover--percent-width-omitted-height-viewbox.html ref-wide-lime768x256.html -== wide--cover--percent-width-percent-height.html ref-wide-lime768x128-aqua768x128.html -== wide--cover--percent-width-percent-height-viewbox.html ref-wide-lime768x256.html - -== diagonal-percentage-vector-background.html diagonal-percentage-vector-background-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid.html b/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid.html index 48e97561f40..62df82623a4 100644 --- a/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid.html +++ b/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid.html @@ -28,6 +28,8 @@ test_valid_value("color", "rgb(-2, 3, 4)", "rgb(0, 3, 4)"); test_valid_value("color", "rgb(100, 200, 300)", "rgb(100, 200, 255)"); test_valid_value("color", "rgb(20, 10, 0, -10)", "rgba(20, 10, 0, 0)"); // Not supported by Edge/Safari. test_valid_value("color", "rgb(100%, 200%, 300%)", "rgb(255, 255, 255)"); +test_valid_value("color", "field"); +test_valid_value("color", "fieldtext"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-color/parsing/system-color-valid.html b/tests/wpt/web-platform-tests/css/css-color/parsing/system-color-valid.html new file mode 100644 index 00000000000..9d93bd4a21d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-color/parsing/system-color-valid.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Module Level 4: parsing system color keywords</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#css-system-colors"> +<meta name="assert" content="system color keyword support"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("color", "ActiveText", "activetext"); +test_valid_value("color", "ButtonFace", "buttonface"); +test_valid_value("color", "ButtonText", "buttontext"); +test_valid_value("color", "Canvas", "canvas"); +test_valid_value("color", "CanvasText", "canvastext"); +test_valid_value("color", "Field", "field"); +test_valid_value("color", "FieldText", "fieldtext"); +test_valid_value("color", "GrayText", "graytext"); +test_valid_value("color", "Highlight", "highlight"); +test_valid_value("color", "HighlightText", "highlighttext"); +test_valid_value("color", "LinkText", "linktext"); +test_valid_value("color", "VisitedText", "visitedtext"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-008.html b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-008.html new file mode 100644 index 00000000000..732f94199b5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-008.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<title>Fixed indefinite heights</title> +<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#definite-sizes"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<meta name="flags" content="" /> +<meta name="assert" content="Percent height flex items in a nested column flexbox have height resolved to auto." /> + +<style> +.column-flexbox { + display: flex; + flex-direction: column; +} + +#percent-height-item { + height: 50%; + background: red; +} + +#fixed-height-item { + height: 100px; + width: 100px; + background: green; +} +</style> + +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> + +<div class=column-flexbox> + <div class=column-flexbox> + <div id=fixed-height-item></div> + <div id=percent-height-item></div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-009.html b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-009.html new file mode 100644 index 00000000000..b3de59562bc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-009.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<title>height: 100% should not be considered indefinite on a second flex item (triggers an obscure bug in Blink)</title> +<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#definite-sizes" /> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1019138" /> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht" /> +<style type="text/css"> +.container { + height: 100px; + width: 100px; +} +.flexbox { + background: red; + display: flex; + flex-direction: column; + height: 100%; +} +.first-item { + background: green; + display: flex; +} +.second-item { + /* This should not be considered indefinite */ + height: 100%; + background: green; +} +</style> + +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="container"> + <div class="flexbox"> + <div class="first-item"> + <div style="width: 100px; height: 20px;"></div> + </div> + <div class="second-item"> + </div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/percentage-padding-001.html b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-padding-001.html new file mode 100644 index 00000000000..8bba5d60f5c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-padding-001.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<script src='/resources/testharness.js'></script> +<script src='/resources/testharnessreport.js'></script> +<script src='/resources/check-layout-th.js'></script> +<link rel="author" title="David Grogan" href="dgrogan@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#padding-physical" title="Percentages line"> +<meta name="flags" content="" /> +<meta name="assert" content="item's padding is resolved against parent's size, not item's" /> + +<style> +x-flexbox { + display: flex; + height: 50px; + width: 500px; +} + +x-item { + padding-left: 10%; + background: blue; + position: relative; /* Just so offsetLeft returns distance between x-item and div */ +} + +div { + height: 50px; + width: 50px; + background: orange; +} +</style> + +If the item's % padding is calculated correctly, there is a blue square on the left and an orange square on the right, both 50x50. + +<x-flexbox> + <x-item> + <div data-offset-x=50></div> + </x-item> +</x-flexbox> + +<script> +checkLayout('x-flexbox'); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/reference/ttwf-reftest-flex-order-ref.html b/tests/wpt/web-platform-tests/css/css-flexbox/reference/ttwf-reftest-flex-order-ref.html deleted file mode 100644 index 6cddecece86..00000000000 --- a/tests/wpt/web-platform-tests/css/css-flexbox/reference/ttwf-reftest-flex-order-ref.html +++ /dev/null @@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Flexible Box Test: order proprety - value</title> - <link rel="author" title="haosdent" href="mailto:haosdent@gmail.com"> - <style type="text/css"> - .container { - position: relative; - height: 6em; - background: red; - margin: 1em; - border: 1px solid black; - } - span { - height: 2em; - display: inline-block; - background: green; - color: white; - margin: 1em; - width: 8em; - } - </style> -</head> -<body> - <p>The test passed if all the cells are reversed.</p> - <div class="container"> - <span class="first">forth</span><span class="second">third</span><span class="third">second</span><span class="forth">first</span> - </div> -</body> -</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/ttwf-reftest-flex-order.html b/tests/wpt/web-platform-tests/css/css-flexbox/ttwf-reftest-flex-order.html deleted file mode 100644 index 2edac404b6d..00000000000 --- a/tests/wpt/web-platform-tests/css/css-flexbox/ttwf-reftest-flex-order.html +++ /dev/null @@ -1,49 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Flexible Box Test: order proprety - value</title> - <link rel="author" title="haosdent" href="mailto:haosdent@gmail.com"> - <link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#order-property"> - <link rel="match" href="reference/ttwf-reftest-flex-order-ref.html"> - <meta name="assert" content="Statement describing what the test case is asserting"> - <style type="text/css"> - .container { - position: relative; - height: 6em; - display: flex; - background: red; - margin: 1em; - border: 1px solid black; - } - span { - height: 2em; - display: inline-block; - background: green; - color: white; - margin: 1em; - width: 8em; - } - .first { - order: 1; - } - .second { - order: 2; - } - .third { - order: 3; - } - .forth { - order: 4; - } - </style> -</head> -<body> - <p>The test passed if all the cells are reversed.</p> - <div class="container"> - <span class="forth">first</span> - <span class="third">second</span> - <span class="second">third</span> - <span class="first">forth</span> - </div> -</body> -</html> diff --git a/tests/wpt/web-platform-tests/css/css-fonts/generic-family-keywords-001.html b/tests/wpt/web-platform-tests/css/css-fonts/generic-family-keywords-001.html new file mode 100644 index 00000000000..aa9fb5a6a03 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts/generic-family-keywords-001.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<title>CSS Test: Test generic family keywords do not match @font-face</title> +<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#family-name-syntax"> +<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.com"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +div { + font-size: 10px; +} +</style> +<template id="fonts"> +<style> +@font-face { + font-family: system-ui; + src: local(Ahem), url('/fonts/Ahem.ttf'); +} +</style> +</template> +<body onload="onLoad()"> + <div><span id="system-ui" style="font-family: system-ui">00000</span></div> +<script> +function onLoad() { + test(() => { + let element = document.getElementById('system-ui'); + let expected_width = element.offsetWidth; + + // Insert the @font-face rule. + let template = document.getElementById('fonts'); + document.documentElement.appendChild(template.content.cloneNode(true)); + + assert_equals(element.offsetWidth, expected_width); + }); +}; +</script> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html new file mode 100644 index 00000000000..9c9e944df04 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html @@ -0,0 +1,240 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout test: box model parts and alignment properties, vertical-LR writing mode</title> +<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-align-3/"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#propdef-writing-mode"> +<meta name="assert" content="This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties on vertical-LR grids, in both LTR and RTL directions."> +<meta name="flags" content="ahem"> +<link rel="stylesheet" href="/css/support/grid.css"> +<link rel="stylesheet" href="/css/support/alignment.css"> +<link rel="stylesheet" href="/css/support/width-keyword-classes.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> + +<style> + +.grid { + grid-template-columns: 100px 200px; + grid-template-rows: 200px 200px; + padding: 10px 15px 20px 30px; + border-width: 5px 10px 15px 20px; + border-style: dotted; + border-color: blue; + position: relative; +} + +.cell { + width: 20px; + height: 40px; + margin: 4px 8px 12px 16px; +} +</style> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> + +<body onload="checkLayout('.grid')"> + +<p>This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties on vertical-LR grids.</p> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR | align-items: 'auto' | justify-items: 'auto'</p> + <div class="grid fit-content verticalLR" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="cell firstRowSecondColumn" data-offset-x="46" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> + <div class="cell secondRowFirstColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR | align-items: 'center' | justify-items: 'center'</p> + <div class="grid fit-content verticalLR itemsCenter" data-expected-width="475" data-expected-height="350"> + <div class="firstRowFirstColumn cell" data-offset-x="124" data-offset-y="36" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> + <div class="cell secondRowSecondColumn" data-offset-x="324" data-offset-y="186" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR | align-items: 'end' | justify-items: 'end'</p> + <div class="grid fit-content verticalLR itemsEnd" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="202" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> + <div class="cell secondRowSecondColumn" data-offset-x="402" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR | align-items: 'left' | justify-items: 'left'</p> + <div class="grid fit-content verticalLR itemsLeft" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> + <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR | align-items: 'start' | justify-items: 'right'</p> + <div class="grid fit-content verticalLR alignItemsStart justifyItemsRight" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> + <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR (ortho) | align-items: 'self-start' (vertical-lr) | justify-items: 'self-start' (direction: rtl)</p> + <div class="grid fit-content directionLTR verticalLR itemsSelfStart" data-expected-width="475" data-expected-height="350"> + <div class="directionRTL cell firstRowFirstColumn" data-offset-x="46" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div> + <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> + <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> + <div class="directionRTL cell secondRowSecondColumn" data-offset-x="246" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR (ortho) | align-items: 'self-end' (vertical-lr) | justify-items: 'self-end' (direction: rtl)</p> + <div class="grid fit-content directionLTR verticalLR itemsSelfEnd" data-expected-width="475" data-expected-height="350"> + <div class="directionRTL cell firstRowFirstColumn" data-offset-x="202" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> + <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> + <div class="directionRTL cell secondRowSecondColumn" data-offset-x="402" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR (parall) | align-items: 'self-start' | justify-items: 'self-start'</p> + <div class="grid fit-content directionLTR verticalLR itemsSelfStart" data-expected-width="475" data-expected-height="350"> + <div class="directionLTR cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> + <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> + <div class="directionLTR cell secondRowSecondColumn" data-offset-x="246" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR (parall) | align-items: 'self-end' | justify-items: 'self-end'</p> + <div class="grid fit-content directionLTR verticalLR itemsSelfEnd" data-expected-width="475" data-expected-height="350"> + <div class="directionLTR cell firstRowFirstColumn" data-offset-x="202" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div> + <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> + <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> + <div class="directionLTR cell secondRowSecondColumn" data-offset-x="402" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<!-- RTL direction. --> +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL | align-items: 'auto' | justify-items: 'auto'</p> + <div class="grid fit-content verticalLR directionRTL" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + <div class="cell firstRowSecondColumn" data-offset-x="46" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> + <div class="cell secondRowFirstColumn" data-offset-x="246" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL | align-items: 'center' | justify-items: 'center'</p> + <div class="grid fit-content verticalLR directionRTL itemsCenter" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="124" data-offset-y="236" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> + <div class="cell secondRowSecondColumn" data-offset-x="324" data-offset-y="86" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL | align-items: 'end' | justify-items: 'end'</p> + <div class="grid fit-content verticalLR directionRTL itemsEnd" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="202" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> + <div class="cell secondRowSecondColumn" data-offset-x="402" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL | align-items: 'start' | justify-items: 'left'</p> + <div class="grid fit-content verticalLR directionRTL alignItemsStart justifyItemsLeft" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> + <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL | align-items: 'start' | justify-items: 'right'</p> + <div class="grid fit-content verticalLR directionRTL alignItemsStart justifyItemsRight" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> + <div class="cell secondRowSecondColumn" data-offset-x="246" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL (ortho) | align-items: 'self-start' (vertical-lr) | justify-items: 'self-start' (direction: ltr)</p> + <div class="grid fit-content verticalLR directionRTL itemsSelfStart" data-expected-width="475" data-expected-height="350"> + <div class="directionLTR cell firstRowFirstColumn" data-offset-x="46" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> + <div class="directionLTR cell secondRowSecondColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL (ortho) | align-items: 'self-end' (vertical-lr) | justify-items: 'self-end' (direction: ltr)</p> + <div class="grid fit-content verticalLR directionRTL itemsSelfEnd" data-expected-width="475" data-expected-height="350"> + <div class="directionLTR cell firstRowFirstColumn" data-offset-x="202" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> + <div class="directionLTR cell secondRowSecondColumn" data-offset-x="402" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL (parall) | align-items: 'self-start' | justify-items: 'self-start'</p> + <div class="grid fit-content verticalLR directionRTL itemsSelfStart" data-expected-width="475" data-expected-height="350"> + <div class="directionRTL cell firstRowFirstColumn" data-offset-x="46" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> + <div class="directionRTL cell secondRowSecondColumn" data-offset-x="246" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL (parall) | align-items: 'self-end' | justify-items: 'self-end'</p> + <div class="grid fit-content verticalLR directionRTL itemsSelfEnd" data-expected-width="475" data-expected-height="350"> + <div class="directionRTL cell firstRowFirstColumn" data-offset-x="202" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> + <div class="directionRTL cell secondRowSecondColumn" data-offset-x="402" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html new file mode 100644 index 00000000000..f7698e45df3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html @@ -0,0 +1,241 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout test: box model parts and alignment properties, vertical-RL writing mode</title> +<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-align-3/"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#propdef-writing-mode"> +<meta name="assert" content="This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties on vertical-RL grids, in both LTR and RTL directions."> +<meta name="flags" content="ahem"> +<link rel="stylesheet" href="/css/support/grid.css"> +<link rel="stylesheet" href="/css/support/alignment.css"> +<link rel="stylesheet" href="/css/support/width-keyword-classes.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> + +<style> + +.grid { + grid-template-columns: 100px 200px; + grid-template-rows: 200px 200px; + padding: 10px 15px 20px 30px; + border-width: 5px 10px 15px 20px; + border-style: dotted; + border-color: blue; + position: relative; +} + +.cell { + width: 20px; + height: 40px; + margin: 4px 8px 12px 16px; +} +</style> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> + +<body onload="checkLayout('.grid')"> + +<p>This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties on vertical-RL grids.</p> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR | align-items: 'auto' | justify-items: 'auto'</p> + <div class="grid fit-content verticalRL" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="cell firstRowSecondColumn" data-offset-x="402" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> + <div class="cell secondRowFirstColumn" data-offset-x="202" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR | align-items: 'center' | justify-items: 'center'</p> + <div class="grid fit-content verticalRL itemsCenter" data-expected-width="475" data-expected-height="350"> + <div class="firstRowFirstColumn cell" data-offset-x="324" data-offset-y="36" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> + <div class="cell secondRowSecondColumn" data-offset-x="124" data-offset-y="186" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR | align-items: 'end' | justify-items: 'end'</p> + <div class="grid fit-content verticalRL itemsEnd" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="246" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> + <div class="cell secondRowSecondColumn" data-offset-x="46" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR | align-items: 'left' | justify-items: 'left'</p> + <div class="grid fit-content verticalRL itemsLeft" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> + <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR | align-items: 'start' | justify-items: 'right'</p> + <div class="grid fit-content verticalRL alignItemsStart justifyItemsRight" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> + <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR (ortho) | align-items: 'self-start' (vertical-rl) | justify-items: 'self-start' (direction: rtl)</p> + <div class="grid fit-content directionLTR verticalRL itemsSelfStart" data-expected-width="475" data-expected-height="350"> + <div class="directionRTL cell firstRowFirstColumn" data-offset-x="402" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div> + <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> + <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> + <div class="directionRTL cell secondRowSecondColumn" data-offset-x="202" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR (ortho) | align-items: 'self-end' (vertical-rl) | justify-items: 'self-end' (direction: rtl)</p> + <div class="grid fit-content directionLTR verticalRL itemsSelfEnd" data-expected-width="475" data-expected-height="350"> + <div class="directionRTL cell firstRowFirstColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> + <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> + <div class="directionRTL cell secondRowSecondColumn" data-offset-x="46" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR (parall) | align-items: 'self-start' | justify-items: 'self-start'</p> + <div class="grid fit-content directionLTR verticalRL itemsSelfStart" data-expected-width="475" data-expected-height="350"> + <div class="directionLTR cell firstRowFirstColumn" data-offset-x="402" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> + <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> + <div class="directionLTR cell secondRowSecondColumn" data-offset-x="202" data-offset-y="114" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR (parall) | align-items: 'self-end' | justify-items: 'self-end'</p> + <div class="grid fit-content directionLTR verticalRL itemsSelfEnd" data-expected-width="475" data-expected-height="350"> + <div class="directionLTR cell firstRowFirstColumn" data-offset-x="246" data-offset-y="58" data-expected-width="20" data-expected-height="40"></div> + <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="110" data-expected-width="200" data-expected-height="200"></div> + <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="100"></div> + <div class="directionLTR cell secondRowSecondColumn" data-offset-x="46" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + + +<!-- RTL direction. --> +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL | align-items: 'auto' | justify-items: 'auto'</p> + <div class="grid fit-content directionRTL verticalRL" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + <div class="cell firstRowSecondColumn" data-offset-x="402" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> + <div class="cell secondRowFirstColumn" data-offset-x="202" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL | align-items: 'center' | justify-items: 'center'</p> + <div class="grid fit-content directionRTL verticalRL itemsCenter" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="324" data-offset-y="236" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> + <div class="cell secondRowSecondColumn" data-offset-x="124" data-offset-y="86" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL | align-items: 'end' | justify-items: 'end'</p> + <div class="grid fit-content directionRTL verticalRL itemsEnd" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="246" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> + <div class="cell secondRowSecondColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL | align-items: 'start' | justify-items: 'left'</p> + <div class="grid fit-content directionRTL verticalRL alignItemsStart justifyItemsLeft" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> + <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL | align-items: 'start' | justify-items: 'right'</p> + <div class="grid fit-content directionRTL verticalRL alignItemsStart justifyItemsRight" data-expected-width="475" data-expected-height="350"> + <div class="cell firstRowFirstColumn" data-offset-x="402" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> + <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL (ortho) | align-items: 'self-start' (vertical-rl) | justify-items: 'self-start' (direction: ltr)</p> + <div class="grid fit-content directionRTL verticalRL itemsSelfStart" data-expected-width="475" data-expected-height="350"> + <div class="directionLTR cell firstRowFirstColumn" data-offset-x="402" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> + <div class="directionLTR cell secondRowSecondColumn" data-offset-x="202" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL (ortho) | align-items: 'self-end' (vertical-rl) | justify-items: 'self-end' (direction: ltr)</p> + <div class="grid fit-content directionRTL verticalRL itemsSelfEnd" data-expected-width="475" data-expected-height="350"> + <div class="directionLTR cell firstRowFirstColumn" data-offset-x="246" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> + <div class="directionLTR cell secondRowSecondColumn" data-offset-x="46" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL (parall) | align-items: 'self-start' | justify-items: 'self-start'</p> + <div class="grid fit-content directionRTL verticalRL itemsSelfStart" data-expected-width="475" data-expected-height="350"> + <div class="directionRTL cell firstRowFirstColumn" data-offset-x="402" data-offset-y="258" data-expected-width="20" data-expected-height="40"></div> + <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> + <div class="directionRTL cell secondRowSecondColumn" data-offset-x="202" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL (parall) | align-items: 'self-end' | justify-items: 'self-end'</p> + <div class="grid fit-content directionRTL verticalRL itemsSelfEnd" data-expected-width="475" data-expected-height="350"> + <div class="directionRTL cell firstRowFirstColumn" data-offset-x="246" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="230" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="200" data-expected-height="100"></div> + <div class="directionRTL cell secondRowSecondColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding.html new file mode 100644 index 00000000000..9cdce092cc3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-margin-border-padding.html @@ -0,0 +1,239 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout test: box model parts and alignment properties</title> +<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-align-3/"> +<meta name="assert" content="This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties, in both LTR and RTL directions."> +<meta name="flags" content="ahem"> +<link rel="stylesheet" href="/css/support/grid.css"> +<link rel="stylesheet" href="/css/support/alignment.css"> +<link rel="stylesheet" href="/css/support/width-keyword-classes.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> + +<style> + +.grid { + grid-template-columns: 100px 200px; + grid-template-rows: 200px 200px; + padding: 10px 15px 20px 30px; + border-width: 5px 10px 15px 20px; + border-style: dotted; + border-color: blue; + position: relative; +} + +.cell { + width: 20px; + height: 40px; + margin: 4px 8px 12px 16px; +} +</style> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> + +<body onload="checkLayout('.grid')"> + +<p>This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties.</p> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR | align-items: 'auto' | justify-items: 'auto'</p> + <div class="grid fit-content" data-expected-width="375" data-expected-height="450"> + <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="cell firstRowSecondColumn" data-offset-x="146" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="cell secondRowFirstColumn" data-offset-x="46" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + <div class="cell secondRowSecondColumn" data-offset-x="146" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR | align-items: 'center' | justify-items: 'center'</p> + <div class="grid fit-content itemsCenter" data-expected-width="375" data-expected-height="450"> + <div class="firstRowFirstColumn cell" data-offset-x="74" data-offset-y="86" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> + <div class="cell secondRowSecondColumn" data-offset-x="224" data-offset-y="286" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR | align-items: 'end' | justify-items: 'end'</p> + <div class="grid fit-content itemsEnd" data-expected-width="375" data-expected-height="450"> + <div class="cell firstRowFirstColumn" data-offset-x="102" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> + <div class="cell secondRowSecondColumn" data-offset-x="302" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR | align-items: 'start' | justify-items: 'left'</p> + <div class="grid fit-content alignItemsStart justifyItemsLeft" data-expected-width="375" data-expected-height="450"> + <div class="cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> + <div class="cell secondRowSecondColumn" data-offset-x="146" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR | align-items: 'start' | justify-items: 'right'</p> + <div class="grid fit-content alignItemsStart justifyItemsRight" data-expected-width="375" data-expected-height="450"> + <div class="cell firstRowFirstColumn" data-offset-x="102" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> + <div class="cell secondRowSecondColumn" data-offset-x="302" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR (ortho) | align-items: 'self-start' | justify-items: 'self-start'</p> + <div class="grid fit-content directionLTR itemsSelfStart" data-expected-width="375" data-expected-height="450"> + <div class="directionRTL cell firstRowFirstColumn" data-offset-x="102" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> + <div class="directionRTL cell secondRowSecondColumn" data-offset-x="302" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR (ortho) | align-items: 'self-end' | justify-items: 'self-end'</p> + <div class="grid fit-content directionLTR itemsSelfEnd" data-expected-width="375" data-expected-height="450"> + <div class="directionRTL cell firstRowFirstColumn" data-offset-x="46" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> + <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> + <div class="directionRTL cell secondRowSecondColumn" data-offset-x="146" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR (parall) | align-items: 'self-start' | justify-items: 'self-start'</p> + <div class="grid fit-content directionLTR itemsSelfStart" data-expected-width="375" data-expected-height="450"> + <div class="directionLTR cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> + <div class="directionLTR cell secondRowSecondColumn" data-offset-x="146" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: LTR - (parall) | align-items: 'self-end' | justify-items: 'self-end'</p> + <div class="grid fit-content directionLTR itemsSelfEnd" data-expected-width="375" data-expected-height="450"> + <div class="directionLTR cell firstRowFirstColumn" data-offset-x="102" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> + <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="130" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> + <div class="directionLTR cell secondRowSecondColumn" data-offset-x="302" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<!-- RTL direction. --> +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL | align-items: 'auto' | justify-items: 'auto'</p> + <div class="grid fit-content directionRTL" data-expected-width="375" data-expected-height="450"> + <div class="cell firstRowFirstColumn" data-offset-x="302" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="cell firstRowSecondColumn" data-offset-x="202" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="cell secondRowFirstColumn" data-offset-x="302" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL | align-items: 'center' | justify-items: 'center'</p> + <div class="grid fit-content directionRTL itemsCenter" data-expected-width="375" data-expected-height="450"> + <div class="cell firstRowFirstColumn" data-offset-x="274" data-offset-y="86" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> + <div class="cell secondRowSecondColumn" data-offset-x="124" data-offset-y="286" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL | align-items: 'end' | justify-items: 'end'</p> + <div class="grid fit-content directionRTL itemsEnd" data-expected-width="375" data-expected-height="450"> + <div class="cell firstRowFirstColumn" data-offset-x="246" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> + <div class="cell secondRowSecondColumn" data-offset-x="46" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL | align-items: 'start' | justify-items: 'left'</p> + <div class="grid fit-content directionRTL alignItemsStart justifyItemsLeft" data-expected-width="375" data-expected-height="450"> + <div class="cell firstRowFirstColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> + <div class="cell secondRowSecondColumn" data-offset-x="46" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL | align-items: 'start' | justify-items: 'right'</p> + <div class="grid fit-content directionRTL alignItemsStart justifyItemsRight" data-expected-width="375" data-expected-height="450"> + <div class="cell firstRowFirstColumn" data-offset-x="302" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> + <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL (ortho) | align-items: 'self-start' | justify-items: 'self-start'</p> + <div class="grid fit-content directionRTL itemsSelfStart" data-expected-width="375" data-expected-height="450"> + <div class="directionLTR cell firstRowFirstColumn" data-offset-x="246" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> + <div class="directionLTR cell secondRowSecondColumn" data-offset-x="46" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL (ortho) | align-items: 'self-end' | justify-items: 'self-end'</p> + <div class="grid fit-content directionRTL itemsSelfEnd" data-expected-width="375" data-expected-height="450"> + <div class="directionLTR cell firstRowFirstColumn" data-offset-x="302" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> + <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> + <div class="directionLTR cell secondRowSecondColumn" data-offset-x="202" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL (parall) | align-items: 'self-start' | justify-items: 'self-start'</p> + <div class="grid fit-content directionRTL itemsSelfStart" data-expected-width="375" data-expected-height="450"> + <div class="directionRTL cell firstRowFirstColumn" data-offset-x="302" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> + <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> + <div class="directionRTL cell secondRowSecondColumn" data-offset-x="202" data-offset-y="214" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +<div> + <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> + direction: RTL (parall) | align-items: 'self-end' | justify-items: 'self-end'</p> + <div class="grid fit-content directionRTL itemsSelfEnd" data-expected-width="375" data-expected-height="450"> + <div class="directionRTL cell firstRowFirstColumn" data-offset-x="246" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> + <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> + <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="230" data-offset-y="210" data-expected-width="100" data-expected-height="200"></div> + <div class="directionRTL cell secondRowSecondColumn" data-offset-x="46" data-offset-y="358" data-expected-width="20" data-expected-height="40"></div> + </div> +</div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-overflow.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-overflow.html new file mode 100644 index 00000000000..f0d94198aff --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-overflow.html @@ -0,0 +1,134 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: overflow for justify and align</title> +<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#overflow-values"> +<meta name="assert" content="This test checks that both safe and unsafe overflow positions are applied correctly for align-items and justify-items properties."> +<meta name="flags" content="ahem"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<link rel="stylesheet" href="/css/support/grid.css"> +<link rel="stylesheet" href="/css/support/alignment.css"> +<link rel="stylesheet" href="/css/support/width-keyword-classes.css"> + +<style> + +.grid { + grid-template-columns: 150px 150px; + grid-template-rows: 120px 120px 120px; + margin-bottom: 20px; +} +.cellOverflowWidth { + width: 180px; + height: 40px; +} +.cellOverflowHeight { + width: 50px; + height: 150px; +} +.cellWithNoOverflow { + width: 50px; + height: 40px; +} +.thirdRowFirstColumn { + background-color: green; + grid-column: 1; + grid-row: 3; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> + +<body onload="checkLayout('.grid')"> + +<p>This test checks that the 'overflow' keyword is applied correctly for 'align' and 'justify' properties.</p> + +<div style="position: relative"> + <div class="grid fit-content alignItemsCenter justifyItemsCenter" data-expected-width="300" data-expected-height="360"> + <div class="cellOverflowWidth firstRowFirstColumn" data-offset-x="-15" data-offset-y="40" data-expected-width="180" data-expected-height="40"></div> + <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="50" data-offset-y="160" data-expected-width="50" data-expected-height="40"></div> + <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="50" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div> + <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="200" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div> + <div class="cellOverflowWidth secondRowSecondColumn" data-offset-x="135" data-offset-y="160" data-expected-width="180" data-expected-height="40"></div> + <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="200" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div> + </div> +</div> + +<div style="position: relative"> + <div class="grid fit-content alignItemsUnsafeCenter justifyItemsUnsafeCenter" data-expected-width="300" data-expected-height="360"> + <div class="cellOverflowHeight firstRowFirstColumn" data-offset-x="50" data-offset-y="-15" data-expected-width="50" data-expected-height="150"></div> + <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="50" data-offset-y="160" data-expected-width="50" data-expected-height="40"></div> + <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="50" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div> + <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="200" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div> + <div class="cellOverflowHeight secondRowSecondColumn" data-offset-x="200" data-offset-y="105" data-expected-width="50" data-expected-height="150"></div> + <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="200" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div> + </div> +</div> + +<div style="position: relative"> + <div class="grid fit-content alignItemsSafeCenter justifyItemsSafeCenter" data-expected-width="300" data-expected-height="360"> + <div class="cellOverflowWidth firstRowFirstColumn" data-offset-x="0" data-offset-y="40" data-expected-width="180" data-expected-height="40"></div> + <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="50" data-offset-y="160" data-expected-width="50" data-expected-height="40"></div> + <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="50" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div> + <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="200" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div> + <div class="cellOverflowWidth secondRowSecondColumn" data-offset-x="150" data-offset-y="160" data-expected-width="180" data-expected-height="40"></div> + <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="200" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div> + </div> +</div> + +<div style="position: relative"> + <div class="grid fit-content alignItemsSafeCenter justifyItemsSafeCenter" data-expected-width="300" data-expected-height="360"> + <div class="cellOverflowHeight firstRowFirstColumn" data-offset-x="50" data-offset-y="0" data-expected-width="50" data-expected-height="150"></div> + <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="50" data-offset-y="160" data-expected-width="50" data-expected-height="40"></div> + <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="50" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div> + <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="200" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div> + <div class="cellOverflowHeight secondRowSecondColumn alignSelfCenterSafe justifySelfCenterSafe" data-offset-x="200" data-offset-y="120" data-expected-width="50" data-expected-height="150"></div> + <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="200" data-offset-y="280" data-expected-width="50" data-expected-height="40"></div> + </div> +</div> + +<div style="position: relative"> + <div class="grid fit-content alignItemsEnd justifyItemsEnd" data-expected-width="300" data-expected-height="360"> + <div class="cellOverflowWidth firstRowFirstColumn" data-offset-x="-30" data-offset-y="80" data-expected-width="180" data-expected-height="40"></div> + <div class="cellWithNoOverflow secondRowFirstColumn justifySelfCenter" data-offset-x="50" data-offset-y="200" data-expected-width="50" data-expected-height="40"></div> + <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="100" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div> + <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="250" data-offset-y="80" data-expected-width="50" data-expected-height="40"></div> + <div class="cellOverflowWidth secondRowSecondColumn" data-offset-x="120" data-offset-y="200" data-expected-width="180" data-expected-height="40"></div> + <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="250" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div> + </div> +</div> + +<div style="position: relative"> + <div class="grid fit-content alignItemsUnsafeEnd justifyItemsUnsafeEnd" data-expected-width="300" data-expected-height="360"> + <div class="cellOverflowHeight firstRowFirstColumn" data-offset-x="100" data-offset-y="-30" data-expected-width="50" data-expected-height="150"></div> + <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="100" data-offset-y="200" data-expected-width="50" data-expected-height="40"></div> + <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="100" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div> + <div class="cellWithNoOverflow firstRowSecondColumn alignSelfCenter" data-offset-x="250" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div> + <div class="cellOverflowHeight secondRowSecondColumn" data-offset-x="250" data-offset-y="90" data-expected-width="50" data-expected-height="150"></div> + <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="250" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div> + </div> +</div> + +<div style="position: relative"> + <div class="grid fit-content alignItemsSafeEnd justifyItemsSafeEnd" data-expected-width="300" data-expected-height="360"> + <div class="cellOverflowWidth firstRowFirstColumn" data-offset-x="0" data-offset-y="80" data-expected-width="180" data-expected-height="40"></div> + <div class="cellWithNoOverflow secondRowFirstColumn justifySelfUnsafeCenter" data-offset-x="50" data-offset-y="200" data-expected-width="50" data-expected-height="40"></div> + <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="100" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div> + <div class="cellWithNoOverflow firstRowSecondColumn" data-offset-x="250" data-offset-y="80" data-expected-width="50" data-expected-height="40"></div> + <div class="cellOverflowWidth secondRowSecondColumn" data-offset-x="150" data-offset-y="200" data-expected-width="180" data-expected-height="40"></div> + <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="250" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div> + </div> +</div> + +<div style="position: relative"> + <div class="grid fit-content alignItemsSafeEnd justifyItemsSafeEnd" data-expected-width="300" data-expected-height="360"> + <div class="cellOverflowHeight firstRowFirstColumn" data-offset-x="100" data-offset-y="0" data-expected-width="50" data-expected-height="150"></div> + <div class="cellWithNoOverflow secondRowFirstColumn" data-offset-x="100" data-offset-y="200" data-expected-width="50" data-expected-height="40"></div> + <div class="cellWithNoOverflow thirdRowFirstColumn" data-offset-x="100" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div> + <div class="cellWithNoOverflow firstRowSecondColumn alignSelfUnsafeCenter" data-offset-x="250" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div> + <div class="cellOverflowHeight secondRowSecondColumn" data-offset-x="250" data-offset-y="120" data-expected-width="50" data-expected-height="150"></div> + <div class="cellWithNoOverflow thirdRowSecondColumn" data-offset-x="250" data-offset-y="320" data-expected-width="50" data-expected-height="40"></div> + </div> +</div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html new file mode 100644 index 00000000000..c8fd3400060 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html @@ -0,0 +1,124 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout test:align stretch with orthogonal flows</title> +<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#orthogonal-flows"> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#distribution-values"> +<meta name="assert" content="This test checks that stretching alignment works as expected with orthogonal flows, in horizontal and vertical writing mode."> +<meta name="flags" content="ahem"> +<link rel="stylesheet" href="/css/support/grid.css"> +<link rel="stylesheet" href="/css/support/alignment.css"> +<link rel="stylesheet" href="/css/support/width-keyword-classes.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> + +<style> + +.container { + position: relative; +} +.grid { + grid-template-columns: 100px 100px; + grid-template-rows: 150px 150px; + font: 10px/1 ahem; + margin-bottom: 20px; +} +.widthAndHeightSet { + width: 20px; + height: 40px; +} +.onlyWidthSet { width: 20px; } +.onlyHeightSet { height: 40px; } +.maxHeight { max-height: 160px; } +.maxWidth { max-width: 90px; } +.minWidth { min-width: 120px; } +.minHeight { min-height: 220px; } +.topAutoMargin { margin-top: auto; } +.bottomAutoMargin { margin-bottom: auto; } +.leftAutoMargin { margin-left: auto; } +.rightAutoMargin { margin-right: auto; } +</style> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> + +<body onload="checkLayout('.grid')"> + +<p>This test checks that stretching alignment works as expected with orthogonal flows.</p> + +<p>HORIZONTAL vs VERTICAL-RL</p> +<div class="container"> + <div class="grid fit-content" data-expected-width="200" data-expected-height="300"> + <div class="verticalRL firstRowFirstColumn selfStretch widthAndHeightSet" data-expected-width="20" data-expected-height="40">XXX</div> + <div class="verticalRL firstRowSecondColumn selfStretch onlyWidthSet" data-expected-width="20" data-expected-height="150">XXX</div> + <div class="verticalRL secondRowFirstColumn selfStretch onlyHeightSet" data-expected-width="100" data-expected-height="40">XXX</div> + <div class="verticalRL secondRowSecondColumn selfSelfStart" data-expected-width="10" data-expected-height="30">XXX</div> + </div> +</div> + +<div class="container"> + <div class="grid fit-content" data-expected-width="200" data-expected-height="300"> + <div class="verticalRL firstRowFirstColumn selfStretch bottomAutoMargin" data-expected-width="100" data-expected-height="30">XXX</div> + <div class="verticalRL firstRowSecondColumn selfStretch leftAutoMargin" data-expected-width="10" data-expected-height="150">XXX</div> + <div class="verticalRL secondRowFirstColumn selfStretch topAutoMargin" data-expected-width="100" data-expected-height="30">XXX</div> + <div class="verticalRL secondRowSecondColumn selfStretch rightAutoMargin" data-expected-width="10" data-expected-height="150">XXX</div> + </div> +</div> + +<p>HORIZONTAL vs VERTICAL-LR</p> +<div class="container"> + <div class="grid fit-content" data-expected-width="200" data-expected-height="300"> + <div class="verticalLR firstRowFirstColumn selfStretch widthAndHeightSet" data-expected-width="20" data-expected-height="40">XXX</div> + <div class="verticalLR firstRowSecondColumn selfStretch onlyWidthSet" data-expected-width="20" data-expected-height="150">XXX</div> + <div class="verticalLR secondRowFirstColumn selfStretch onlyHeightSet" data-expected-width="100" data-expected-height="40">XXX</div> + <div class="verticalLR secondRowSecondColumn selfSelfStart" data-expected-width="10" data-expected-height="30">XXX</div> + </div> +</div> +<div class="container"> + <div class="grid fit-content" data-expected-width="200" data-expected-height="300"> + <div class="verticalLR firstRowFirstColumn selfStretch bottomAutoMargin" data-expected-width="100" data-expected-height="30">XXX</div> + <div class="verticalLR firstRowSecondColumn selfStretch leftAutoMargin" data-expected-width="10" data-expected-height="150">XXX</div> + <div class="verticalLR secondRowFirstColumn selfStretch topAutoMargin" data-expected-width="100" data-expected-height="30">XXX</div> + <div class="verticalLR secondRowSecondColumn selfStretch rightAutoMargin" data-expected-width="10" data-expected-height="150">XXX</div> + </div> +</div> + +<p>VERTICAL-RL vs HORIZONTAL</p> +<div class="container"> + <div class="grid fit-content verticalRL" data-expected-width="300" data-expected-height="200"> + <div class="horizontalTB firstRowFirstColumn selfStretch widthAndHeightSet" data-expected-width="20" data-expected-height="40">XXX</div> + <div class="horizontalTB firstRowSecondColumn selfStretch onlyWidthSet" data-expected-width="20" data-expected-height="100">XXX</div> + <div class="horizontalTB secondRowFirstColumn selfStretch onlyHeightSet" data-expected-width="150" data-expected-height="40">XXX</div> + <div class="horizontalTB secondRowSecondColumn selfSelfStart" data-expected-width="30" data-expected-height="10">XXX</div> + </div> +</div> +<div class="container"> + <div class="grid fit-content verticalRL" data-expected-width="300" data-expected-height="200"> + <div class="horizontalTB firstRowFirstColumn selfStretch bottomAutoMargin" data-expected-width="150" data-expected-height="10">XXX</div> + <div class="horizontalTB firstRowSecondColumn selfStretch leftAutoMargin" data-expected-width="30" data-expected-height="100">XXX</div> + <div class="horizontalTB secondRowFirstColumn selfStretch topAutoMargin" data-expected-width="150" data-expected-height="10">XXX</div> + <div class="horizontalTB secondRowSecondColumn selfStretch rightAutoMargin" data-expected-width="30" data-expected-height="100">XXX</div> + </div> +</div> + +<p>VERTICAL-LR vs HORIZONTAL</p> +<div class="container"> + <div class="grid fit-content verticalLR" data-expected-width="300" data-expected-height="200"> + <div class="horizontalTB firstRowFirstColumn selfStretch widthAndHeightSet" data-expected-width="20" data-expected-height="40">XXX</div> + <div class="horizontalTB firstRowSecondColumn selfStretch onlyWidthSet" data-expected-width="20" data-expected-height="100">XXX</div> + <div class="horizontalTB secondRowFirstColumn selfStretch onlyHeightSet" data-expected-width="150" data-expected-height="40">XXX</div> + <div class="horizontalTB secondRowSecondColumn selfSelfStart" data-expected-width="30" data-expected-height="10">XXX</div> + </div> +</div> +<div class="container"> + <div class="grid fit-content verticalLR" data-expected-width="300" data-expected-height="200"> + <div class="horizontalTB firstRowFirstColumn selfStretch bottomAutoMargin" data-expected-width="150" data-expected-height="10">XXX</div> + <div class="horizontalTB firstRowSecondColumn selfStretch leftAutoMargin" data-expected-width="30" data-expected-height="100">XXX</div> + <div class="horizontalTB secondRowFirstColumn selfStretch topAutoMargin" data-expected-width="150" data-expected-height="10">XXX</div> + <div class="horizontalTB secondRowSecondColumn selfStretch rightAutoMargin" data-expected-width="30" data-expected-height="100">XXX</div> + </div> +</div> + +<div id="log"></div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-lists/list-inside-contain.html b/tests/wpt/web-platform-tests/css/css-lists/list-inside-contain.html new file mode 100644 index 00000000000..70e25b8644e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-lists/list-inside-contain.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<head> + <meta charset="utf-8"> + <title>CSS Lists: list inside a contain ul</title> + <link rel=help href="https://www.w3.org/TR/CSS22/generate.html#lists"> + <link rel="help" href="http://crbug.com/1004764"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + + <style> + ul { contain: size layout; } + li { list-style: inside; columns: 1; background-image: url(#svgvar00008); } + </style> +</head> + +<script> +setup({ single_test: true }); + +function changeBackground() { + document.getElementById("target").style.setProperty("background", "url(data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7) no-repeat scroll top right"); + + done(); +} +</script> + +<body onload=requestAnimationFrame(changeBackground)> + <p>PASS if no crash or DCHECK failure.</p> + <ul> + <li id="target"> + </li> + </ul> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-lists/ol-change-display-type-ref.html b/tests/wpt/web-platform-tests/css/css-lists/ol-change-display-type-ref.html new file mode 100644 index 00000000000..a10bc17899f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-lists/ol-change-display-type-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<link rel=help href="https://crbug.com/1020669"> +<style> + .item { + display: list-item; + } + .item:after { + content: counter(section); + display: list-item; + } + .table-header { + display: table-header-group; + } +</style> +<body> + <ol reversed="reversed"> + <span class="table-header"> + <figure class="item"></figure> + </span> + </ol> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-lists/ol-change-display-type.html b/tests/wpt/web-platform-tests/css/css-lists/ol-change-display-type.html new file mode 100644 index 00000000000..e711cfef5dd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-lists/ol-change-display-type.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Lists: Change display type of reverse ol list element.</title> +<link rel=help href="https://crbug.com/1020669"> +<link rel=match href="ol-change-display-type-ref.html"> +<style> + .item { + display: list-item; + } + .item:after { + content: counter(section); + display: list-item; + } + .table-header { + display: table-header-group; + } +</style> +<body> + <ol reversed="reversed"> + <span id="span"> + <figure class="item"></figure> + </span> + </ol> +</body> +<script> + document.body.offsetTop; + document.getElementById('span').setAttribute('class', 'table-header'); +</script> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-overflow/dynamic-visible-to-clip-001.html b/tests/wpt/web-platform-tests/css/css-overflow/dynamic-visible-to-clip-001.html index 08114d73b8b..b97701bfb29 100644 --- a/tests/wpt/web-platform-tests/css/css-overflow/dynamic-visible-to-clip-001.html +++ b/tests/wpt/web-platform-tests/css/css-overflow/dynamic-visible-to-clip-001.html @@ -1,4 +1,5 @@ <!doctype html> +<html class="reftest-wait"> <meta charset="utf-8"> <title>Overflow areas are updated when dynamically changed to overflow: clip</title> <link rel="help" href="https://drafts.csswg.org/css-overflow/#valdef-overflow-clip"> @@ -30,7 +31,10 @@ onload = function() { let target = document.getElementById("target"); window.unused = target.getBoundingClientRect(); // Update layout - target.style.overflow = "-moz-hidden-unscrollable"; - target.style.overflow = "clip"; + requestAnimationFrame(() => requestAnimationFrame(() => { + target.style.overflow = "-moz-hidden-unscrollable"; + target.style.overflow = "clip"; + document.documentElement.removeAttribute("class"); + })); } </script> diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/first-line-with-before-after-ref.html b/tests/wpt/web-platform-tests/css/css-pseudo/first-line-with-before-after-ref.html new file mode 100644 index 00000000000..fcee7995052 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-pseudo/first-line-with-before-after-ref.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<style> + #target::first-line { font-size: 150%; } +</style> + +<div id="target"><span style='color:red'>red</span> <span style='color:green'>green</span> <span style='color:blue'>blue</span><br /> + <span style='color:red'>red</span> <span style='color:green'>green</span> <span style='color:blue'>blue</span> +</div> + +<p>Both lines above (inside and outside <code>::first-line</code>) should have the same colors.</p> diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/first-line-with-before-after.html b/tests/wpt/web-platform-tests/css/css-pseudo/first-line-with-before-after.html new file mode 100644 index 00000000000..f91a22a4a7d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-pseudo/first-line-with-before-after.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<title>::before and ::after styles should apply inside ::first-line</title> +<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#generated-content"> +<link rel="match" href="first-line-with-before-after-ref.html"> +<style> + #target::first-line { + font-size: 150%; + } + #target::before, #child2::before { + content: "red "; + color: red; + } + #child1, #child2 { + color: green; + } + #child1::after, #target::after { + content: " blue"; + color: blue; + } +</style> + +<div id="target"> + <span id='child1'>green</span> + <br /> + <span id='child2'>green</span> +</div> + +<p>Both lines above (inside and outside <code>::first-line</code>) should have the same colors.</p> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-anchoring/README.md b/tests/wpt/web-platform-tests/css/css-scroll-anchoring/README.md index 8ce2a95c620..78f1387bdf4 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-anchoring/README.md +++ b/tests/wpt/web-platform-tests/css/css-scroll-anchoring/README.md @@ -1,4 +1,4 @@ -## Scroll Anchoring Web Platform Tests +## Scroll Anchoring Test Suite Scroll anchoring adjusts the scroll position to prevent visible jumps (or "reflows") when content changes above the viewport. diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-001-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-001-ref.html new file mode 100644 index 00000000000..d4f0281ae48 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-001-ref.html @@ -0,0 +1,14 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: unsized div</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#target { + background: lightblue; + height: 222px; +} +</style> + +<div id=target></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-001.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-001.html new file mode 100644 index 00000000000..4d17602a95f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-001.html @@ -0,0 +1,16 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: unsized div</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-001-ref.html"> +<meta name="assert" content="intrinsic-size is used to size the div as if it had a single child of this size"> + +<style> +#target { + background: lightblue; + intrinsic-size: 111px 222px; +} +</style> + +<div id=target></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-002-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-002-ref.html new file mode 100644 index 00000000000..ab847fc36e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-002-ref.html @@ -0,0 +1,21 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: div with max-content parent</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#border { + width: max-content; + border: 1px solid black; +} +#target { + background: lightblue; + width: 111px; + height: 222px; +} +</style> + +<div id=border> + <div id=target></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-002.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-002.html new file mode 100644 index 00000000000..55f20949412 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-002.html @@ -0,0 +1,22 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: div with max-content parent</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-002-ref.html"> +<meta name="assert" content="intrinsic-size is used to size the div, with parent's max-content width respecting it"> + +<style> +#border { + width: max-content; + border: 1px solid black; +} +#target { + background: lightblue; + intrinsic-size: 111px 222px; +} +</style> + +<div id=border> + <div id=target></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-003-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-003-ref.html new file mode 100644 index 00000000000..6a2d0514989 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-003-ref.html @@ -0,0 +1,15 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: width specified</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#target { + background: lightblue; + width: 50px; + height: 222px; +} +</style> + +<div id=target></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-003.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-003.html new file mode 100644 index 00000000000..3dd41ba1d2c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-003.html @@ -0,0 +1,17 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: width specified</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-003-ref.html"> +<meta name="assert" content="intrinsic-size's width is ignored if width is specified"> + +<style> +#target { + background: lightblue; + intrinsic-size: 111px 222px; + width: 50px; +} +</style> + +<div id=target></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-004-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-004-ref.html new file mode 100644 index 00000000000..6e710943de9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-004-ref.html @@ -0,0 +1,15 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: width is min-content</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#target { + background: lightblue; + width: 111px; + height: 222px; +} +</style> + +<div id=target></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-004.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-004.html new file mode 100644 index 00000000000..9cce7ae25fc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-004.html @@ -0,0 +1,17 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: width is min-content</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-004-ref.html"> +<meta name="assert" content="div is sized to intrinsic-width if width is min-content"> + +<style> +#target { + background: lightblue; + intrinsic-size: 111px 222px; + width: min-content; +} +</style> + +<div id=target></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-005-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-005-ref.html new file mode 100644 index 00000000000..950f7190cac --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-005-ref.html @@ -0,0 +1,15 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: width is max-content</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#target { + background: lightblue; + width: 111px; + height: 222px; +} +</style> + +<div id=target></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-005.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-005.html new file mode 100644 index 00000000000..92b777d22e0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-005.html @@ -0,0 +1,17 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: width is max-content</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-004-ref.html"> +<meta name="assert" content="div is sized to intrinsic-width if width is max-content"> + +<style> +#target { + background: lightblue; + intrinsic-size: 111px 222px; + width: max-content; +} +</style> + +<div id=target></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-006-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-006-ref.html new file mode 100644 index 00000000000..d545093e2db --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-006-ref.html @@ -0,0 +1,16 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: unsized div, intrinsic-size is small</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#target { + background: lightblue; + height: 6px; + contain: size; +} +</style> + +<div id=target>Lorem ipsum</div> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-006.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-006.html new file mode 100644 index 00000000000..82c6e8eef85 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-006.html @@ -0,0 +1,16 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: unsized div, intrinsic-size is small</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-006-ref.html"> +<meta name="assert" content="content dimensions are ignored if intrinsic-size is specified"> + +<style> +#target { + background: lightblue; + intrinsic-size: 5px 6px; +} +</style> + +<div id=target>Lorem ipsum</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-007-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-007-ref.html new file mode 100644 index 00000000000..6b3f63685ac --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-007-ref.html @@ -0,0 +1,27 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: div with border</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#border { + border: 1px solid blue; + width: max-content; +} + +#target { + background: lightblue; + box-sizing: content-box; + width: 55px; + height: 66px; + + border-style: solid; + border-color: black; + border-width: 2px 3px 5px 7px; +} +</style> + +<div id=border> + <div id=target></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-007.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-007.html new file mode 100644 index 00000000000..85fcae6cd91 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-007.html @@ -0,0 +1,26 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: div with border</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-007-ref.html"> +<meta name="assert" content="intrinsic-size sizes the content box, not the border box"> + +<style> +#border { + border: 1px solid blue; + width: max-content; +} + +#target { + background: lightblue; + intrinsic-size: 55px 66px; + border-style: solid; + border-color: black; + border-width: 2px 3px 5px 7px; +} +</style> + +<div id=border> + <div id=target></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-008-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-008-ref.html new file mode 100644 index 00000000000..5c6186fd48c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-008-ref.html @@ -0,0 +1,37 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: writing modes</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +.border { + border: 1px solid blue; + width: max-content; + margin: 5px; +} + +.box { + background: lightblue; + box-sizing: content-box; + width: 55px; + height: 66px; + border-style: solid; + border-color: black; + border-width: 2px 3px 5px 7px; + padding: 11px 13px 17px 19px; +} +.verticalrl { + writing-mode: vertical-rl; +} +.verticallr { + writing-mode: vertical-lr; +} +.horizontaltb { + writing-mode: horizontal-tb; +} +</style> + +<div class=border><div class="box verticalrl">Lorem</div></div> +<div class=border><div class="box verticallr">Ipsum</div></div> +<div class=border><div class="box horizontaltb">Dolor</div></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-008.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-008.html new file mode 100644 index 00000000000..f3b344f6b0a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-008.html @@ -0,0 +1,37 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: writing modes</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-008-ref.html"> +<meta name="assert" content="intrinsic-size specifies physical dimensions, and respects writing modes"> + +<style> +.border { + border: 1px solid blue; + width: max-content; + margin: 5px; +} + +.box { + background: lightblue; + intrinsic-size: 55px 66px; + border-style: solid; + border-color: black; + border-width: 2px 3px 5px 7px; + padding: 11px 13px 17px 19px; +} +.verticalrl { + writing-mode: vertical-rl; +} +.verticallr { + writing-mode: vertical-lr; +} +.horizontaltb { + writing-mode: horizontal-tb; +} +</style> + +<div class=border><div class="box verticalrl">Lorem</div></div> +<div class=border><div class="box verticallr">Ipsum</div></div> +<div class=border><div class="box horizontaltb">Dolor</div></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-009-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-009-ref.html new file mode 100644 index 00000000000..223e0c8a33a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-009-ref.html @@ -0,0 +1,23 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: select multiple</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +.border { + border: 1px solid blue; + width: max-content; + margin: 5px; +} + +select { + background: lightblue; + box-sizing: content-box; + width: 55px; + height: 66px; + overflow: visible; +} +</style> + +<select multiple></select> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-009.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-009.html new file mode 100644 index 00000000000..06a02fe78bd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-009.html @@ -0,0 +1,23 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: select multiple</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-009-ref.html"> +<meta name="assert" content="intrinsic-size sizes select multiple"> + +<style> +.border { + border: 1px solid blue; + width: max-content; + margin: 5px; +} + +select { + intrinsic-size: 55px 66px; + background: lightblue; + overflow: visible; +} +</style> + +<select multiple></select> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-010-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-010-ref.html new file mode 100644 index 00000000000..eaaa0977f13 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-010-ref.html @@ -0,0 +1,39 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: flex row</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#flex { + display: flex; + flex-direction: row; + width: 500px; + height: 100px; +} +.item { + border: 1px solid black; + box-sizing: content-box; +} +#one { + background: lightblue; + width: 55px; + flex-grow: 3; +} +#two { + background: lightgreen; + width: 66px; + flex-grow: 2; +} +#three { + background: lightgrey; + width: 77px; + flex-grow: 1; +} +</style> + +<div id=flex> + <div class=item id=one></div> + <div class=item id=two></div> + <div class=item id=three></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-010.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-010.html new file mode 100644 index 00000000000..eea76ffb073 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-010.html @@ -0,0 +1,40 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: flex row</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-010-ref.html"> +<meta name="assert" content="items are flexed correctly when they are sized by intrinsic-size in a flex row"> + +<style> +#flex { + display: flex; + flex-direction: row; + width: 500px; + height: 100px; +} +.item { + border: 1px solid black; +} +#one { + background: lightblue; + intrinsic-size: 55px 11px; + flex-grow: 3; +} +#two { + background: lightgreen; + intrinsic-size: 66px 22px; + flex-grow: 2; +} +#three { + background: lightgrey; + intrinsic-size: 77px 33px; + flex-grow: 1; +} +</style> + +<div id=flex> + <div class=item id=one></div> + <div class=item id=two></div> + <div class=item id=three></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-011-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-011-ref.html new file mode 100644 index 00000000000..29d1f4e2d1a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-011-ref.html @@ -0,0 +1,39 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: flex column</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#flex { + display: flex; + flex-direction: column; + width: 100px; + height: 200px; +} +.item { + border: 1px solid black; + box-sizing: content-box; +} +#one { + background: lightblue; + height: 11px; + flex-grow: 3; +} +#two { + background: lightgreen; + height: 22px; + flex-grow: 2; +} +#three { + background: lightgrey; + height: 33px; + flex-grow: 1; +} +</style> + +<div id=flex> + <div class=item id=one></div> + <div class=item id=two></div> + <div class=item id=three></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-011.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-011.html new file mode 100644 index 00000000000..c7888f906f8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-011.html @@ -0,0 +1,40 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: flex column</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-011-ref.html"> +<meta name="assert" content="items are flexed correctly when they are sized by intrinsic-size in a flex column"> + +<style> +#flex { + display: flex; + flex-direction: column; + width: 100px; + height: 200px; +} +.item { + border: 1px solid black; +} +#one { + background: lightblue; + intrinsic-size: 55px 11px; + flex-grow: 3; +} +#two { + background: lightgreen; + intrinsic-size: 66px 22px; + flex-grow: 2; +} +#three { + background: lightgrey; + intrinsic-size: 77px 33px; + flex-grow: 1; +} +</style> + +<div id=flex> + <div class=item id=one></div> + <div class=item id=two></div> + <div class=item id=three></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-012-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-012-ref.html new file mode 100644 index 00000000000..ed9857aa256 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-012-ref.html @@ -0,0 +1,14 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: replaced content</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#target { + width: 100px; + height: 200px; +} +</style> + +<img id=target src="resources/dice.png"></img> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-012.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-012.html new file mode 100644 index 00000000000..889b07ace92 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-012.html @@ -0,0 +1,15 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: replaced content</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-012-ref.html"> +<meta name="assert" content="intrinsic-size overrides replaced content's intrinsic dimensions"> + +<style> +#target { + intrinsic-size: 100px 200px; +} +</style> + +<img id=target src="resources/dice.png"></img> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-013-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-013-ref.html new file mode 100644 index 00000000000..9f8334c03d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-013-ref.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: intrinsic-size changes</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#border { + width: max-content; + border: 1px solid black; +} +#border > div { + width: 77px; + height: 88px; +} +</style> + +<div id=border><div id=target></div></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-013.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-013.html new file mode 100644 index 00000000000..1082100012f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-013.html @@ -0,0 +1,32 @@ +<!doctype html> +<html class="reftest-wait"> +<meta charset="utf8"> +<title>CSS intrinsic-size: intrinsic-size changes.</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-013-ref.html"> +<meta name="assert" content="changes in intrinsic-size cause reflow"> +<script src="/common/reftest-wait.js"></script> + +<style> +#border { + width: max-content; + border: 1px solid black; +} +#border > div { + intrinsic-size: 55px 66px; +} +</style> + +<div id=border><div id=target></div></div> + +<script> +function changeStyle() { + document.getElementById("target").style = "intrinsic-size: 77px 88px;"; + requestAnimationFrame(takeScreenshot); +} + +onload = () => requestAnimationFrame(() => requestAnimationFrame(changeStyle)); + +</script> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-014-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-014-ref.html new file mode 100644 index 00000000000..66c10824893 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-014-ref.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: fieldset</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +fieldset { + box-sizing: content-box; + width: 111px; + height: 222px; +} +</style> + +<fieldset> + <legend>This is a legend</legend> + This is some content. +</fieldset> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-014.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-014.html new file mode 100644 index 00000000000..4dd45a2da40 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-014.html @@ -0,0 +1,19 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: fieldset</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-014-ref.html"> +<meta name="assert" content="intrinsic-size sizes fieldsets"> + +<style> +fieldset { + width: max-content; + intrinsic-size: 111px 222px; +} +</style> + +<fieldset> + <legend>This is a legend</legend> + This is some content. +</fieldset> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-015-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-015-ref.html new file mode 100644 index 00000000000..ae65a3b5ca5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-015-ref.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS intrinsic-size: inline flex</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-size"> +<style> +div { + display: inline-flex; + border: 5px solid green; + width: 111px; + height: 222px; + box-sizing: content-box; +} +</style> + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-015.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-015.html new file mode 100644 index 00000000000..5ca5e49992e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-015.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS intrinsic-size: inline flex</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-size"> +<link rel="match" href="intrinsic-size-015-ref.html"> +<meta name="assert" content="intrinsic-size sizes an inline-flex element"> +<style> +div { + display: inline-flex; + border: 5px solid green; + intrinsic-size: 111px 222px; + color: transparent; +} +</style> + +<div>test</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-016-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-016-ref.html new file mode 100644 index 00000000000..f80510f6306 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-016-ref.html @@ -0,0 +1,39 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: flex row, items with size containment (ref)</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#flex { + display: flex; + flex-direction: row; + width: 500px; + height: 100px; +} +.item { + border: 1px solid black; + box-sizing: content-box; +} +#one { + background: lightblue; + width: 55px; + flex-grow: 3; +} +#two { + background: lightgreen; + width: 66px; + flex-grow: 2; +} +#three { + background: lightgrey; + width: 77px; + flex-grow: 1; +} +</style> + +<div id=flex> + <div class=item id=one></div> + <div class=item id=two></div> + <div class=item id=three></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-016.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-016.html new file mode 100644 index 00000000000..ce6ac5c56e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-016.html @@ -0,0 +1,41 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: flex row, items with size containment</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-016-ref.html"> +<meta name="assert" content="intrinsic-size take 'priority' over size-containment in flex"> + +<style> +#flex { + display: flex; + flex-direction: row; + width: 500px; + height: 100px; +} +.item { + border: 1px solid black; + contain: size; +} +#one { + background: lightblue; + intrinsic-size: 55px 11px; + flex-grow: 3; +} +#two { + background: lightgreen; + intrinsic-size: 66px 22px; + flex-grow: 2; +} +#three { + background: lightgrey; + intrinsic-size: 77px 33px; + flex-grow: 1; +} +</style> + +<div id=flex> + <div class=item id=one></div> + <div class=item id=two></div> + <div class=item id=three></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-017-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-017-ref.html new file mode 100644 index 00000000000..553451a7075 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-017-ref.html @@ -0,0 +1,17 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: replaced content (vertical-lr)</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +body { + writing-mode: vertical-lr; +} +#target { + width: 100px; + height: 200px; +} +</style> + +<img id=target src="resources/dice.png"></img> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-017.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-017.html new file mode 100644 index 00000000000..5e2122f34ec --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-017.html @@ -0,0 +1,20 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: replaced content (vertical-lr)</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-017-ref.html"> +<meta name="assert" content="intrinsic-size specifies physical dimensions on replaced content"> + +<style> +body { + writing-mode: vertical-lr; +} +#target { + intrinsic-size: 100px 200px; + inline-size: min-content; + block-size: auto; +} +</style> + +<img id=target src="resources/dice.png"></img> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-018-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-018-ref.html new file mode 100644 index 00000000000..17261caa8af --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-018-ref.html @@ -0,0 +1,15 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: sized div</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#target { + background: lightblue; + width: 55px; + height: 66px; +} +</style> + +<div id=target></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-018.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-018.html new file mode 100644 index 00000000000..68931834d63 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-018.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: sized div</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-018-ref.html"> +<meta name="assert" content="width / height ignore intrinsic-size"> + +<style> +#target { + background: lightblue; + width: 55px; + height: 66px; + intrinsic-size: 111px 222px; +} +</style> + +<div id=target></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-019-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-019-ref.html new file mode 100644 index 00000000000..8e55d7b02f9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-019-ref.html @@ -0,0 +1,15 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: div with fit-content width</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#target { + background: lightblue; + width: 111px; + height: 222px; +} +</style> + +<div id=target></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-019.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-019.html new file mode 100644 index 00000000000..cae8e0739fe --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-019.html @@ -0,0 +1,17 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: div with fit-content width</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-019-ref.html"> +<meta name="assert" content="div is sized to intrinsic-width when width is fit-content"> + +<style> +#target { + background: lightblue; + intrinsic-size: 111px 222px; + width: fit-content; +} +</style> + +<div id=target></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-020-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-020-ref.html new file mode 100644 index 00000000000..1ee5ba8376d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-020-ref.html @@ -0,0 +1,14 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: replaced content (min-content)</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#target { + width: 100px; + height: 200px; +} +</style> + +<img id=target src="resources/dice.png"></img> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-020.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-020.html new file mode 100644 index 00000000000..a7286ce1054 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-020.html @@ -0,0 +1,17 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: replaced content (min-content)</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-020-ref.html"> +<meta name="assert" content="replaced content is sized to intrinsic-width when width is min-content"> + +<style> +#target { + intrinsic-size: 100px 200px; + inline-size: min-content; + block-size: auto; +} +</style> + +<img id=target src="resources/dice.png"></img> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-021-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-021-ref.html new file mode 100644 index 00000000000..35db43fcf44 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-021-ref.html @@ -0,0 +1,41 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: flex row, flex height based on children</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#flex { + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: flex-start; + width: 250px; +} +.item { + border: 1px solid black; + box-sizing: content-box; +} +#one { + background: lightblue; + width: 55px; + height: 21px; +} +#two { + background: lightgreen; + width: 66px; + height: 42px; +} +#three { + background: lightgrey; + align-self: stretch; + width: 77px; + height: 63px; +} +</style> + +<div id=flex> + <div class=item id=one></div> + <div class=item id=two></div> + <div class=item id=three></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-021.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-021.html new file mode 100644 index 00000000000..04591924f65 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-021.html @@ -0,0 +1,39 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: flex row, flex height based on children</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-021-ref.html"> +<meta name="assert" content="flex container is sized by the largest intrinsic-height of content, even with align-self: stretch"> + +<style> +#flex { + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: flex-start; + width: 250px; +} +.item { + border: 1px solid black; +} +#one { + background: lightblue; + intrinsic-size: 55px 21px; +} +#two { + background: lightgreen; + intrinsic-size: 66px 42px; +} +#three { + background: lightgrey; + align-self: stretch; + intrinsic-size: 77px 63px; +} +</style> + +<div id=flex> + <div class=item id=one></div> + <div class=item id=two></div> + <div class=item id=three></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-022-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-022-ref.html new file mode 100644 index 00000000000..b0df1992834 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-022-ref.html @@ -0,0 +1,30 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid definite size</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#grid { + border: 3px solid black; + display: grid; + grid-template: 55px 66px / 77px 88px; + box-sizing: content-box; + width: 70px; + height: 80px; + background: lightblue; + grid-gap: 5px; +} +.item { + background: lightgreen; + opacity: 0.5; + height: 100%; +} +</style> + +<div id=grid> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-022.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-022.html new file mode 100644 index 00000000000..3593b9cce38 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-022.html @@ -0,0 +1,31 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid definite size</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-022-ref.html"> +<meta name="assert" content="grid container is sized by intrinsic-size, even if definite track sizes overflow"> + +<style> +#grid { + border: 3px solid black; + display: grid; + grid-template: 55px 66px / 77px 88px; + intrinsic-size: 70px 80px; + width: max-content; + background: lightblue; + grid-gap: 5px; +} +.item { + background: lightgreen; + opacity: 0.5; + height: 100%; +} +</style> + +<div id=grid> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-023-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-023-ref.html new file mode 100644 index 00000000000..800e4ae7064 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-023-ref.html @@ -0,0 +1,29 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid indefinite size</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#grid { + border: 3px solid black; + display: grid; + grid-template: 1fr 2fr / 3fr 4fr; + box-sizing: content-box; + width: 70px; + height: 80px; + background: lightblue; + grid-gap: 5px; +} +.item { + background: lightgreen; + height: 100%; +} +</style> + +<div id=grid> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-023.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-023.html new file mode 100644 index 00000000000..c64ef66a03f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-023.html @@ -0,0 +1,30 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid indefinite size</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-023-ref.html"> +<meta name="assert" content="grid container is sized by intrinsic-size, with fr-tracks using that space"> + +<style> +#grid { + border: 3px solid black; + display: grid; + grid-template: 1fr 2fr / 3fr 4fr; + intrinsic-size: 70px 80px; + width: max-content; + background: lightblue; + grid-gap: 5px; +} +.item { + background: lightgreen; + height: 100%; +} +</style> + +<div id=grid> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-024-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-024-ref.html new file mode 100644 index 00000000000..02ec85a0084 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-024-ref.html @@ -0,0 +1,30 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid definite size, large size</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#grid { + border: 3px solid black; + display: grid; + grid-template: 55px 66px / 77px 88px; + box-sizing: content-box; + width: 200px; + height: 300px; + background: lightblue; + grid-gap: 5px; +} +.item { + background: lightgreen; + opacity: 0.5; + height: 100%; +} +</style> + +<div id=grid> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-024.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-024.html new file mode 100644 index 00000000000..b11317d96b0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-024.html @@ -0,0 +1,31 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid definite size, large size</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-024-ref.html"> +<meta name="assert" content="intrinsic-size sizes grid container, even if definite tracks are smaller"> + +<style> +#grid { + border: 3px solid black; + display: grid; + grid-template: 55px 66px / 77px 88px; + intrinsic-size: 200px 300px; + width: max-content; + background: lightblue; + grid-gap: 5px; +} +.item { + background: lightgreen; + opacity: 0.5; + height: 100%; +} +</style> + +<div id=grid> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-025-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-025-ref.html new file mode 100644 index 00000000000..60d5cc9cd9a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-025-ref.html @@ -0,0 +1,56 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid indefinite size, auto-fit</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +.grid { + border: 3px solid black; + display: grid; + width: 70px; + height: 80px; + box-sizing: content-box; + background: lightblue; + grid-gap: 5px; +} +.one { + grid-template: repeat(auto-fit, 10px) / 3fr 4fr; +} +.two { + grid-template: 1fr 2fr / repeat(auto-fit, 15px); +} +.three { + grid-template: repeat(auto-fit, 10px) / repeat(auto-fit, 15px); +} + +.item { + background: green; + height: 100%; +} +</style> + +<div class="grid one"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid two"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid three"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-025.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-025.html new file mode 100644 index 00000000000..ab9c56fc528 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-025.html @@ -0,0 +1,57 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid indefinite size, auto-fit</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-025-ref.html"> +<meta name="assert" content="definite size auto-fit uses intrinsic-size for the available space"> + +<style> +.grid { + border: 3px solid black; + display: grid; + intrinsic-size: 70px 80px; + width: max-content; + background: lightblue; + grid-gap: 5px; +} +.one { + grid-template: repeat(auto-fit, 10px) / 3fr 4fr; +} +.two { + grid-template: 1fr 2fr / repeat(auto-fit, 15px); +} +.three { + grid-template: repeat(auto-fit, 10px) / repeat(auto-fit, 15px); +} + +.item { + background: green; + height: 100%; +} +</style> + +<div class="grid one"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid two"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid three"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-026-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-026-ref.html new file mode 100644 index 00000000000..2e456b43422 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-026-ref.html @@ -0,0 +1,53 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid auto-fit, min- max- size interactions</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +.grid { + display: inline-grid; + border: 1px solid black; + grid-template-columns: repeat(auto-fit, 100px); +} +.one { + width: 200px; +} +.two { + width: 200px; +} +.three { + width: 200px; +} +.four { + width: 150px; +} +.item { + background: green; + height: 100%; +} +</style> + +<p>min-width larger than intrinsic-width: +<div class="grid one"> + <div class="item">one</div> + <div class="item">two</div> +</div> + +<p>min-width smaller than intrinsic-width: +<div class="grid two"> + <div class="item">one</div> + <div class="item">two</div> +</div> + +<p>max-width ignored since min-width is larger: +<div class="grid three"> + <div class="item">one</div> + <div class="item">two</div> +</div> + +<p>min-width shrinks grid since it overrides intrinsic-width: +<div class="grid four"> + <div class="item">one</div> + <div class="item">two</div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-026.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-026.html new file mode 100644 index 00000000000..100f542b783 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-026.html @@ -0,0 +1,61 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid auto-fit, min- max- size interactions</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-026-ref.html"> +<meta name="assert" content="auto-fit columns, with intrinsic-size interacting with min- and max- width"> + +<style> +.grid { + display: inline-grid; + border: 1px solid black; + grid-template-columns: repeat(auto-fit, 100px); +} +.one { + intrinsic-width: 100px; + min-width: 200px; +} +.two { + intrinsic-width: 200px; + min-width: 100px; +} +.three { + intrinsic-width: 100px; + min-width: 200px; + max-width: 150px; +} +.four { + intrinsic-width: 200px; + min-width: 100px; + max-width: 150px; +} +.item { + background: green; + height: 100%; +} +</style> + +<p>min-width larger than intrinsic-width: +<div class="grid one"> + <div class="item">one</div> + <div class="item">two</div> +</div> + +<p>min-width smaller than intrinsic-width: +<div class="grid two"> + <div class="item">one</div> + <div class="item">two</div> +</div> + +<p>max-width ignored since min-width is larger: +<div class="grid three"> + <div class="item">one</div> + <div class="item">two</div> +</div> + +<p>min-width shrinks grid since it overrides intrinsic-width: +<div class="grid four"> + <div class="item">one</div> + <div class="item">two</div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001-ref.html new file mode 100644 index 00000000000..99e86d0c38f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001-ref.html @@ -0,0 +1,37 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: intrinsic-width auto</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +body > div { + box-sizing: content-box; + border: 1px solid black; + width: max-content; + height: 111px; +} +#one { + overflow: hidden; + width: 0px; +} +#two { + overflow-x: scroll; + height: auto; +} +#two > div { + height: 111px; +} +#three { + height: auto; +} +#three > div { + height: 111px; +} +</style> + +<div id=one></div> +<br> +<div id=two><div></div></div> +<br> +<div id=three><div>Lorem ipsum</div></div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001.html new file mode 100644 index 00000000000..9c2dac07da2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-001.html @@ -0,0 +1,34 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: intrinsic-width auto</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-with-auto-001-ref.html"> +<meta name="assert" content="intrinsic-size auto is treated as 0 when overflow is not 'visible'"> + +<style> +div { + width: max-content; + intrinsic-size: auto 111px; + border: 1px solid black; +} +#one { + overflow: hidden; +} +#two { + overflow-x: scroll; +} +/* We can't have overflow-x: visible without overflow-y not being visible and vice versa + (see Computed value in https://www.w3.org/TR/css-overflow-3/#overflow-properties). + Hence, we set both overflow directions. +*/ +#three { + overflow: visible; +} +</style> + +<div id=one>Lorem ipsum</div> +<br> +<div id=two>Lorem ipsum</div> +<br> +<div id=three>Lorem ipsum</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002-ref.html new file mode 100644 index 00000000000..70a245469b7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002-ref.html @@ -0,0 +1,30 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: intrinsic-width auto</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +body > div { + box-sizing: content-box; + border: 1px solid black; + width: 111px; +} +#one { + overflow: hidden; + height: 0px; +} +#two { + overflow-y: scroll; + width: max-content; +} +#two > div { + width: 111px; +} +</style> + +<div id=one></div> +<br> +<div id=two><div></div></div> +<br> +<div id=three>Lorem ipsum</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002.html new file mode 100644 index 00000000000..5b3902455bd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-002.html @@ -0,0 +1,34 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: intrinsic-width auto</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-with-auto-002-ref.html"> +<meta name="assert" content="intrinsic-size auto is treated as 0 when overflow is not 'visible'"> + +<style> +div { + width: max-content; + intrinsic-size: 111px auto; + border: 1px solid black; +} +#one { + overflow: hidden; +} +#two { + overflow-y: scroll; +} +/* We can't have overflow-x: visible without overflow-y not being visible and vice versa + (see Computed value in https://www.w3.org/TR/css-overflow-3/#overflow-properties). + Hence, we set both overflow directions. +*/ +#three { + overflow: visible; +} +</style> + +<div id=one>Lorem ipsum</div> +<br> +<div id=two>Lorem ipsum</div> +<br> +<div id=three>Lorem ipsum</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003-ref.html new file mode 100644 index 00000000000..246a5bad51e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003-ref.html @@ -0,0 +1,37 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: replaced content with auto</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +img { + border: 1px solid black; + box-sizing: content-box; +} +#target1 { + height: 200px; + /* the source img is 320x240, and the intrinsic size only adjusted the height */ + width: 320px; +} +#target2 { + width: 100px; + /* the source img is 320x240, and the intrinsic size only adjusted the width */ + height: 240px; +} +#target3 { + width: 0px; + height: 200px; + overflow: hidden; +} +#target4 { + width: 100px; + height: 0px; + overflow: hidden; +} +</style> + +<img id=target1 src="resources/dice.png"></img> +<img id=target2 src="resources/dice.png"></img> +<img id=target3 src="resources/dice.png"></img> +<img id=target4 src="resources/dice.png"></img> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003.html new file mode 100644 index 00000000000..07ec0326787 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-auto-003.html @@ -0,0 +1,32 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: replaced content with auto</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-with-auto-003-ref.html"> +<meta name="assert" content="intrinsic-size auto is treated as 0 when overflow is not 'visible'"> + +<style> +img { + border: 1px solid black; +} +#target1 { + intrinsic-size: auto 200px; +} +#target2 { + intrinsic-size: 100px auto; +} +#target3 { + intrinsic-size: auto 200px; + overflow: hidden; +} +#target4 { + intrinsic-size: 100px auto; + overflow: hidden; +} +</style> + +<img id=target1 src="resources/dice.png"></img> +<img id=target2 src="resources/dice.png"></img> +<img id=target3 src="resources/dice.png"></img> +<img id=target4 src="resources/dice.png"></img> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001-ref.html new file mode 100644 index 00000000000..39c6abdcf8e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001-ref.html @@ -0,0 +1,15 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: intrinsic-width legacy</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#target { + background: lightblue; + width: max-content; + height: 222px; +} +</style> + +<div id=target>Lorem ipsum</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001.html new file mode 100644 index 00000000000..df662e5c7f1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-001.html @@ -0,0 +1,17 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: intrinsic-width legacy</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-with-legacy-001-ref.html"> +<meta name="assert" content="intrinsic-size legacy is treated the same as if it was not specified."> + +<style> +#target { + background: lightblue; + width: max-content; + intrinsic-size: legacy 222px; +} +</style> + +<div id=target>Lorem ipsum</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002-ref.html new file mode 100644 index 00000000000..535915a7a7b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002-ref.html @@ -0,0 +1,41 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: flex with legacy intrinsic dimensions</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#flex { + display: flex; + flex-direction: column; + height: 500px; +} +.item { + width: max-content; +} +#one { + background: lightblue; + flex-grow: 3; +} +#one > div { + height: 222px; +} +#two { + background: lightgreen; + width: 333px; + flex-grow: 2; +} +#three { + background: lightgrey; + flex-grow: 1; +} +#three > div { + height: 444px; +} +</style> + +<div id=flex> + <div class=item id=one><div>Lorem ipsum</div></div> + <div class=item id=two>dolor sit amet</div> + <div class=item id=three><div>consectetur adipiscing elit</div></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002.html new file mode 100644 index 00000000000..66d008ce6ce --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-002.html @@ -0,0 +1,39 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: flex with legacy intrinsic dimensions</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-with-legacy-002-ref.html"> +<meta name="assert" content="intrinsic-size legacy is treated the same as if it was not specified."> + +<style> +#flex { + display: flex; + flex-direction: column; + height: 500px; +} +.item { + width: max-content; +} +#one { + background: lightblue; + intrinsic-size: legacy 222px; + flex-grow: 3; +} +#two { + background: lightgreen; + intrinsic-size: 333px legacy; + flex-grow: 2; +} +#three { + background: lightgrey; + intrinsic-size: legacy 444px; + flex-grow: 1; +} +</style> + +<div id=flex> + <div class=item id=one>Lorem ipsum</div> + <div class=item id=two>dolor sit amet</div> + <div class=item id=three>consectetur adipiscing elit</div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003-ref.html new file mode 100644 index 00000000000..eb6394fe284 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003-ref.html @@ -0,0 +1,20 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: select multiple with legacy sizing</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +#one { + box-sizing: content-box; + height: 222px; +} +#two { + box-sizing: content-box; + width: 111px; + overflow: visible; +} +</style> + +<select multiple id=one></select> +<select multiple id=two></select> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003.html new file mode 100644 index 00000000000..90e4f53bf64 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-003.html @@ -0,0 +1,20 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: select multiple with legacy sizing</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-with-legacy-003-ref.html"> +<meta name="assert" content="intrinsic-size legacy is treated the same as if it was not specified."> + +<style> +#one { + intrinsic-size: legacy 222px; +} +#two { + intrinsic-size: 111px legacy; + overflow: visible; +} +</style> + +<select multiple id=one></select> +<select multiple id=two></select> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004-ref.html new file mode 100644 index 00000000000..d5e7c9ff9bb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004-ref.html @@ -0,0 +1,25 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: replaced content with legacy</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +img { + border: 1px solid black; + box-sizing: content-box; +} +#target1 { + height: 200px; + /* the source img is 320x240, and the intrinsic size only adjusted the height */ + width: 320px; +} +#target2 { + width: 100px; + /* the source img is 320x240, and the intrinsic size only adjusted the width */ + height: 240px; +} +</style> + +<img id=target1 src="resources/dice.png"></img> +<img id=target2 src="resources/dice.png"></img> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004.html new file mode 100644 index 00000000000..dfeed45d73b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-004.html @@ -0,0 +1,22 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: replaced content with legacy</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-with-legacy-004-ref.html"> +<meta name="assert" content="intrinsic-size legacy is treated the same as if it was not specified."> + +<style> +img { + border: 1px solid black; +} +#target1 { + intrinsic-size: legacy 200px; +} +#target2 { + intrinsic-size: 100px legacy; +} +</style> + +<img id=target1 src="resources/dice.png"></img> +<img id=target2 src="resources/dice.png"></img> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005-ref.html new file mode 100644 index 00000000000..c23984f5f1a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005-ref.html @@ -0,0 +1,36 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid definite size with legacy</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +.grid { + border: 3px solid black; + display: grid; + grid-template: 55px 66px / 77px 88px; + box-sizing: content-box; + width: 70px; + height: 80px; + background: lightblue; + grid-gap: 5px; +} +.item { + background: lightgreen; + opacity: 0.5; + height: 100%; +} +</style> + +<div class=grid> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class=grid> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005.html new file mode 100644 index 00000000000..baf9bef3aca --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-005.html @@ -0,0 +1,44 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid definite size with legacy</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-with-legacy-005-ref.html"> +<meta name="assert" content="intrinsic-size legacy is treated the same as if it was not specified."> + +<style> +.grid { + border: 3px solid black; + display: grid; + grid-template: 55px 66px / 77px 88px; + background: lightblue; + grid-gap: 5px; +} +.one { + intrinsic-size: legacy 80px; + width: 70px; +} +.two { + intrinsic-size: 70px legacy; + height: 80px; + width: min-content; +} +.item { + background: lightgreen; + opacity: 0.5; + height: 100%; +} +</style> + +<div class="grid one"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid two"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006-ref.html new file mode 100644 index 00000000000..9b9e25d3c8d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006-ref.html @@ -0,0 +1,35 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid indefinite size with legacy</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +.grid { + border: 3px solid black; + display: grid; + grid-template: 1fr 2fr / 3fr 4fr; + box-sizing: content-box; + width: 70px; + height: 80px; + background: lightblue; + grid-gap: 5px; +} +.item { + background: lightgreen; + height: 100%; +} +</style> + +<div class=grid> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class=grid> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006.html new file mode 100644 index 00000000000..41ef1fddc19 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-006.html @@ -0,0 +1,43 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid indefinite size with legacy</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-with-legacy-006-ref.html"> +<meta name="assert" content="intrinsic-size legacy is treated the same as if it was not specified."> + +<style> +.grid { + border: 3px solid black; + display: grid; + grid-template: 1fr 2fr / 3fr 4fr; + background: lightblue; + grid-gap: 5px; +} +.one { + intrinsic-size: legacy 80px; + width: 70px; +} +.two { + intrinsic-size: 70px legacy; + width: min-content; + height: 80px; +} +.item { + background: lightgreen; + height: 100%; +} +</style> + +<div class="grid one"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid two"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007-ref.html new file mode 100644 index 00000000000..6894b4643ad --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007-ref.html @@ -0,0 +1,35 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid definite size, large size with legacy</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +.grid { + border: 3px solid black; + display: grid; + grid-template: 55px 66px / 77px 88px; + box-sizing: content-box; + width: 200px; + height: 300px; + background: lightblue; + grid-gap: 5px; +} +.item { + background: lightgreen; + height: 100%; +} +</style> + +<div class=grid> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class=grid> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007.html new file mode 100644 index 00000000000..df2c57b5d8a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-007.html @@ -0,0 +1,43 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid definite size, large size with legacy</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-with-legacy-007-ref.html"> +<meta name="assert" content="intrinsic-size legacy is treated the same as if it was not specified."> + +<style> +.grid { + border: 3px solid black; + display: grid; + grid-template: 55px 66px / 77px 88px; + background: lightblue; + grid-gap: 5px; +} +.one { + intrinsic-size: legacy 300px; + width: 200px; +} +.two { + intrinsic-size: 200px legacy; + width: max-content; + height: 300px; +} +.item { + background: lightgreen; + height: 100%; +} +</style> + +<div class="grid one"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid two"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008-ref.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008-ref.html new file mode 100644 index 00000000000..5cce1902759 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008-ref.html @@ -0,0 +1,80 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid indefinite size, auto-fit with legacy</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> + +<style> +.grid { + border: 3px solid black; + display: grid; + width: 70px; + height: 80px; + box-sizing: content-box; + background: lightblue; + grid-gap: 5px; +} +.one { + grid-template: repeat(auto-fit, 10px) / 3fr 4fr; +} +.two { + grid-template: 1fr 2fr / repeat(auto-fit, 15px); +} +.three { + grid-template: repeat(auto-fit, 10px) / repeat(auto-fit, 15px); +} + +.item { + background: green; + height: 100%; +} +</style> + +<div class="grid one"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid two"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid three"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid one"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid two"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid three"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008.html new file mode 100644 index 00000000000..45b8fbdd244 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/intrinsic-size-with-legacy-008.html @@ -0,0 +1,87 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS intrinsic-size: grid indefinite size, auto-fit with legacy</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<link rel="match" href="intrinsic-size-with-legacy-008-ref.html"> +<meta name="assert" content="intrinsic-size legacy is treated the same as if it was not specified."> + +<style> +.grid { + border: 3px solid black; + display: grid; + background: lightblue; + grid-gap: 5px; +} +.one { + grid-template: repeat(auto-fit, 10px) / 3fr 4fr; +} +.two { + grid-template: 1fr 2fr / repeat(auto-fit, 15px); +} +.three { + grid-template: repeat(auto-fit, 10px) / repeat(auto-fit, 15px); +} +.width { + intrinsic-size: 70px legacy; + width: max-content; + height: 80px; +} +.height { + intrinsic-size: legacy 80px; + width: 70px; +} +.item { + background: green; + height: 100%; +} +</style> + +<div class="grid one width"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid two width"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid three width"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid one height"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid two height"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> +<div class="grid three height"> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> + <div class=item></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-computed.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-computed.html new file mode 100644 index 00000000000..e9a073ca2aa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-computed.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Intrinsic Size Test: intrinsic-block-size with computed values</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<meta name="assert" content="intrinsic-block-size supports the full grammar 'auto | legacy | <length>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +</head> +<body> +<div id=target></div> +<div id=scratch></div> +<script> + +function length_ref(length) { + document.getElementById("scratch").style.width = length; + return getComputedStyle(document.getElementById("scratch")).getPropertyValue("width"); +} + +test_computed_value("intrinsic-block-size", "auto"); +test_computed_value("intrinsic-block-size", "legacy"); +test_computed_value("intrinsic-block-size", "1px"); +test_computed_value("intrinsic-block-size", "2vw", length_ref("2vw")); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-invalid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-invalid.html new file mode 100644 index 00000000000..1b6cba20f88 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-invalid.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Intrinsic Size Test: intrinsic-block-size with invalid values</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<meta name="assert" content="intrinsic-block-size supports the full grammar 'auto | legacy | <length>'."> +<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("intrinsic-block-size", "none"); +test_invalid_value("intrinsic-block-size", "10%"); +test_invalid_value("intrinsic-block-size", "-1px"); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-valid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-valid.html new file mode 100644 index 00000000000..b34c73b230f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-block-size-valid.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Intrinsic Size Test: intrinsic-block-size with valid values</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<meta name="assert" content="intrinsic-block-size supports the full grammar 'auto | legacy | <length>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("intrinsic-block-size", "auto"); +test_valid_value("intrinsic-block-size", "legacy"); +test_valid_value("intrinsic-block-size", "1px"); +test_valid_value("intrinsic-block-size", "2vw"); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-computed.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-computed.html new file mode 100644 index 00000000000..6f95274c637 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-computed.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Intrinsic Size Test: intrinsic-height with computed values</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<meta name="assert" content="intrinsic-height supports the full grammar 'auto | legacy | <length>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +</head> +<body> +<div id=target></div> +<div id=scratch></div> +<script> + +function length_ref(length) { + document.getElementById("scratch").style.width = length; + return getComputedStyle(document.getElementById("scratch")).getPropertyValue("width"); +} + +test_computed_value("intrinsic-height", "auto"); +test_computed_value("intrinsic-height", "legacy"); +test_computed_value("intrinsic-height", "1px"); +test_computed_value("intrinsic-height", "2vw", length_ref("2vw")); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-invalid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-invalid.html new file mode 100644 index 00000000000..1f801124a2b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-invalid.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Intrinsic Size Test: intrinsic-height with invalid values</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<meta name="assert" content="intrinsic-height supports the full grammar 'auto | legacy | <length>'."> +<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("intrinsic-height", "none"); +test_invalid_value("intrinsic-height", "10%"); +test_invalid_value("intrinsic-height", "-1px"); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-valid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-valid.html new file mode 100644 index 00000000000..e4614762118 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-height-valid.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Intrinsic Size Test: intrinsic-height with valid values</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<meta name="assert" content="intrinsic-height supports the full grammar 'auto | legacy | <length>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("intrinsic-height", "auto"); +test_valid_value("intrinsic-height", "legacy"); +test_valid_value("intrinsic-height", "1px"); +test_valid_value("intrinsic-height", "2vw"); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-computed.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-computed.html new file mode 100644 index 00000000000..c53a77e5631 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-computed.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Intrinsic Size Test: intrinsic-inline-size with computed values</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<meta name="assert" content="intrinsic-inline-size supports the full grammar 'auto | legacy | <length>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +</head> +<body> +<div id=target></div> +<div id=scratch></div> +<script> + +function length_ref(length) { + document.getElementById("scratch").style.width = length; + return getComputedStyle(document.getElementById("scratch")).getPropertyValue("width"); +} + +test_computed_value("intrinsic-inline-size", "auto"); +test_computed_value("intrinsic-inline-size", "legacy"); +test_computed_value("intrinsic-inline-size", "1px"); +test_computed_value("intrinsic-inline-size", "2vw", length_ref("2vw")); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-invalid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-invalid.html new file mode 100644 index 00000000000..6ad224d11d3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-invalid.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Intrinsic Size Test: intrinsic-inline-size with invalid values</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<meta name="assert" content="intrinsic-inline-size supports the full grammar 'auto | legacy | <length>'."> +<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("intrinsic-inline-size", "none"); +test_invalid_value("intrinsic-inline-size", "10%"); +test_invalid_value("intrinsic-inline-size", "-1px"); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-valid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-valid.html new file mode 100644 index 00000000000..ad5aef95dca --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-inline-size-valid.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Intrinsic Size Test: intrinsic-inline-size with valid values</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<meta name="assert" content="intrinsic-inline-size supports the full grammar 'auto | legacy | <length>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("intrinsic-inline-size", "auto"); +test_valid_value("intrinsic-inline-size", "legacy"); +test_valid_value("intrinsic-inline-size", "1px"); +test_valid_value("intrinsic-inline-size", "2vw"); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-computed.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-computed.html new file mode 100644 index 00000000000..29be33d4a3d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-computed.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Intrinsic Size Test: intrinsic-size with computed values</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<meta name="assert" content="intrinsic-size supports the full grammar '[auto | legacy | <length>]{1,2}'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +</head> +<body> +<div id=target></div> +<div id=scratch></div> +<script> + +function length_ref(length) { + document.getElementById("scratch").style.width = length; + return getComputedStyle(document.getElementById("scratch")).getPropertyValue("width"); +} + +test_computed_value("intrinsic-size", "auto"); +test_computed_value("intrinsic-size", "legacy"); +test_computed_value("intrinsic-size", "legacy auto"); +test_computed_value("intrinsic-size", "auto legacy"); +test_computed_value("intrinsic-size", "1px"); +test_computed_value("intrinsic-size", "1px auto"); +test_computed_value("intrinsic-size", "1px legacy"); +test_computed_value("intrinsic-size", "auto 1px"); +test_computed_value("intrinsic-size", "legacy 1px"); +test_computed_value("intrinsic-size", "2vw 3px", length_ref("2vw") + " 3px"); +test_computed_value("intrinsic-size", "2px 3vh", "2px " + length_ref("3vh")); +test_computed_value("intrinsic-size", "5px 5px", "5px"); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-invalid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-invalid.html new file mode 100644 index 00000000000..b4cb2dbffd2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-invalid.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Intrinsic Size Test: intrinsic-size with invalid values</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<meta name="assert" content="intrinsic-size supports the full grammar '[auto | legacy | <length>]{1,2}'."> +<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("intrinsic-size", "auto legacy auto"); +test_invalid_value("intrinsic-size", "10%"); +test_invalid_value("intrinsic-size", "2em 3px 5px"); +test_invalid_value("intrinsic-size", "1px 1%"); +test_invalid_value("intrinsic-size", "1px auto auto"); +test_invalid_value("intrinsic-size", "-1px"); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-sets-computed-dimensions.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-sets-computed-dimensions.html new file mode 100644 index 00000000000..e70c3179223 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-sets-computed-dimensions.html @@ -0,0 +1,61 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Intrinsic Size Test: intrinsic-size sets component dimensions.</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<meta name="assert" content="intrinsic-size sets component dimensions."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<style> +#horizontal-target { + writing-mode: horizontal-tb; +} +#vertical-target { + writing-mode: vertical-rl; +} +</style> +</head> +<body> +<div id=horizontal-target></div> +<div id=vertical-target></div> +<script> + +const horizontal = document.getElementById("horizontal-target"); +const vertical = document.getElementById("vertical-target"); + +function runTest() { + const horizontal_style = getComputedStyle(horizontal); + const vertical_style = getComputedStyle(vertical); + test(() => { + assert_equals(horizontal_style["intrinsic-width"], "1px"); + assert_equals(vertical_style["intrinsic-width"], "1px"); + }, 'intrinsic-width set correctly'); + + test(() => { + assert_equals(horizontal_style["intrinsic-height"], "2px"); + assert_equals(vertical_style["intrinsic-height"], "2px"); + }, 'intrinsic-height set correctly'); + + test(() => { + assert_equals(horizontal_style["intrinsic-inline-size"], "1px"); + assert_equals(vertical_style["intrinsic-inline-size"], "2px"); + }, 'intrinsic-inline-size set correctly'); + + test(() => { + assert_equals(horizontal_style["intrinsic-block-size"], "2px"); + assert_equals(vertical_style["intrinsic-block-size"], "1px"); + }, 'intrinsic-block-size set correctly'); +} + +window.onload = () => { + horizontal.style["intrinsic-size"] = "1px 2px"; + vertical.style["intrinsic-size"] = "1px 2px"; + runTest(); +}; +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-valid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-valid.html new file mode 100644 index 00000000000..7ab13c7d798 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-size-valid.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Intrinsic Size Test: intrinsic-size with valid values</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<meta name="assert" content="intrinsic-size supports the full grammar '[auto | legacy | <length>]{1,2}'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("intrinsic-size", "auto"); +test_valid_value("intrinsic-size", "legacy"); +test_valid_value("intrinsic-size", "auto legacy"); +test_valid_value("intrinsic-size", "auto auto", "auto"); +test_valid_value("intrinsic-size", "legacy legacy", "legacy"); +test_valid_value("intrinsic-size", "1px"); +test_valid_value("intrinsic-size", "2em 3px"); +test_valid_value("intrinsic-size", "5px 5px", "5px"); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-computed.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-computed.html new file mode 100644 index 00000000000..08602e5347f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-computed.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Intrinsic Size Test: intrinsic-width with computed values</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<meta name="assert" content="intrinsic-width supports the full grammar 'auto | legacy | <length>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +</head> +<body> +<div id=target></div> +<div id=scratch></div> +<script> + +function length_ref(length) { + document.getElementById("scratch").style.width = length; + return getComputedStyle(document.getElementById("scratch")).getPropertyValue("width"); +} + +test_computed_value("intrinsic-width", "auto"); +test_computed_value("intrinsic-width", "legacy"); +test_computed_value("intrinsic-width", "1px"); +test_computed_value("intrinsic-width", "2vw", length_ref("2vw")); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-invalid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-invalid.html new file mode 100644 index 00000000000..b89f6567ae2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-invalid.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Intrinsic Size Test: intrinsic-width with invalid values</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<meta name="assert" content="intrinsic-width supports the full grammar 'auto | legacy | <length>'."> +<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("intrinsic-width", "none"); +test_invalid_value("intrinsic-width", "10%"); +test_invalid_value("intrinsic-width", "-1px"); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-valid.html b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-valid.html new file mode 100644 index 00000000000..e2d23eabe5d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/parsing/intrinsic-width-valid.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Intrinsic Size Test: intrinsic-width with valid values</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> +<meta name="assert" content="intrinsic-width supports the full grammar 'auto | legacy | <length>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("intrinsic-width", "auto"); +test_valid_value("intrinsic-width", "legacy"); +test_valid_value("intrinsic-width", "1px"); +test_valid_value("intrinsic-width", "2vw"); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/resources/dice.png b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/resources/dice.png Binary files differnew file mode 100644 index 00000000000..c82d01517cd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/intrinsic-size/resources/dice.png diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-017.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-017.html new file mode 100644 index 00000000000..a2521cbcbbe --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-017.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.3. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="The text is wrapped into two lines, since there is no need to break the second line using the space in the middle."> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 3ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XXX<br>X X</div> + <div class="test">XXXX<span> </span>X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-001.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-001.html new file mode 100644 index 00000000000..a4158dc9907 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-001.html @@ -0,0 +1,39 @@ + +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere and the white-space property</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="'line-break: anywhere' can't prevent overflow under 'white-space: pre', because it line wrapping is not allowed. "> +<style> +div { + position: relative; + font: 10px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 3ch; + line-break: anywhere; + + white-space: pre; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XXXX<span style="color: green">XXXX</span>XX</div> + <div class="test">XXXX XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-002.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-002.html new file mode 100644 index 00000000000..2fbb53dca21 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-002.html @@ -0,0 +1,40 @@ + +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere and the white-space property</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-nowrap"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="'line-break: anywhere' can't prevent overflow under 'white-space: nowrap', because it line wrapping is not allowed. "> +<style> +div { + position: relative; + font: 10px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 5ch; + line-break: anywhere; + + white-space: nowrap; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XXXX XX</div> + <div class="test">XXXX XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-003.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-003.html new file mode 100644 index 00000000000..3002dc10648 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-003.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere and the white-space property</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="'line-break: anywhere' can't prevent overflow under 'white-space: pre', because it line wrapping is not allowed. "> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 2ch; + line-break: anywhere; + + white-space: pre; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red"><span style="color: green">X</span>XXX</div> + <div class="test"> XXX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-004.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-004.html new file mode 100644 index 00000000000..e6e1b39787d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-004.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere and the white-space property</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-normal"> +<link rel="help" title="4.1.3. Phase II: Trimming and Positioning" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="The line is wrapped ignoring the white space, which will be removed honoring 'white-space: normal'"> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 4ch; + line-break: anywhere; + + white-space: normal; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XXX<br>XX</div> + <div class="test">XXX<span style="background: red"> </span>XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-005.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-005.html new file mode 100644 index 00000000000..2f64d8704ba --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-005.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere and the white-space property</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-normal"> +<link rel="help" title="4.1.3. Phase II: Trimming and Positioning" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="The line is wrapped ignoring the white space, which will be removed honoring 'white-space: normal'"> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 4ch; + line-break: anywhere; + + white-space: normal; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XXXX<br>X</div> + <div class="test"><span style="background: red"> </span>XXXXX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-006.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-006.html new file mode 100644 index 00000000000..c804e371262 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-006.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere and the white-space property</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap"> +<link rel="help" title="4.1.3. Phase II: Trimming and Positioning" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="'line-break: anywhere' can't break a preserved sequence of spaces under 'white-spate: pre-wrap', which should hang instead."> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 2ch; + + line-break: anywhere; + white-space: pre-wrap; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XXXX<br>XX</div> + <div class="test">X<span style="background: green"> </span>XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-007.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-007.html new file mode 100644 index 00000000000..d9b266db9f9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-007.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere and the white-space property</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap"> +<link rel="help" title="4.1.3. Phase II: Trimming and Positioning" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="'line-break: anywhere' can't break before the first white-space affter a word under 'white-spate: pre-wrap', which should hang instead."> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 3ch; + + line-break: anywhere; + white-space: pre-wrap; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XXXX<br>XX</div> + <div class="test">XXX<span style="background: green"> </span>XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-008.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-008.html new file mode 100644 index 00000000000..aebd31ea685 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-008.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere and the white-space property</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" title="4.1.3. Phase II: Trimming and Positioning" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="'line-break: anywhere' allows preserved white spaces at the end of the line, honoring 'white-space: break-spaces'."> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 4ch; + + line-break: anywhere; + white-space: break-spaces; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XX<span style="color: green">XX<br>XX</span>XX<br>XXX</div> + <div class="test">XX XXXXX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-009.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-009.html new file mode 100644 index 00000000000..f536c907a40 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-and-white-space-009.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere and the white-space property</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" title="4.1.3. Phase II: Trimming and Positioning" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="'line-break: anywhere' allows breaking before the first character of a preserved white space sequence, honoring 'white-space: break-spaces'."> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 4ch; + + line-break: anywhere; + white-space: break-spaces; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XXXX<br><span style="color: green">XXX</span>X<br>XXXX<br><span style="color: green">X</span>X</div> + <div class="test">XXXX XXXXX X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html new file mode 100644 index 00000000000..d18df4b38c6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-001.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the WJ classes in [UAX14] must be honored. "> +<style> +div { + position: relative; + font: 50px / 1 Ahem; +} +.red { + position: absolute; + width: 100px; + height: 100px; + background: red; + z-index: -1; +} +.test { + color: green; + width: 2ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red"></div> + <div class="test">XX⁠XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html new file mode 100644 index 00000000000..1255aa14d38 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-002.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the WJ classes in [UAX14] must be honored. "> +<style> +div { + position: relative; + font: 50px / 1 Ahem; +} +.red { + position: absolute; + width: 100px; + height: 100px; + background: red; + z-index: -1; +} +.test { + color: green; + width: 2ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red"></div> + <div class="test">XXXX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html new file mode 100644 index 00000000000..7fe230e890d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-003.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the ZW classes in [UAX14] must be honored. "> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.red { + position: absolute; + width: 100px; + height: 100px; + color: red; + background: green; + z-index: -1; +} +.test { + color: green; + width: 4ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XXXX<br>XX</div> + <div class="test">..​...X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html new file mode 100644 index 00000000000..13706d5d9dc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. "> +<style> +div { + position: relative; + font: 50px / 1 Ahem; +} +.red { + position: absolute; + width: 100px; + height: 100px; + background: red; + z-index: -1; +} +.test { + color: green; + width: 3ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red"></div> + <div class="test">XX XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html new file mode 100644 index 00000000000..175228d9c52 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-005.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. "> +<style> +div { + position: relative; + font: 50px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + z-index: -1; +} +.test { + color: green; + width: 2ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XX<br><span style="color: green">X</span>X</div> + <div class="test">XX X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html new file mode 100644 index 00000000000..9bb557e7d3b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. "> +<style> +div { + position: relative; + font: 50px / 1 Ahem; +} +.red { + position: absolute; + background: red; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 4ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red"></div> + <div class="test">XX XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html new file mode 100644 index 00000000000..7f90bfd4304 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-007.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. "> +<style> +div { + position: relative; + font: 20px / 1 Ahem; +} +.red { + position: absolute; + background: green; + height: 100px; + color: red; + z-index: -1; +} +.test { + color: green; + width: 5ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XXXXX<br>XX</div> + <div class="test">XXX<span style="background: green"> X</span>XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html new file mode 100644 index 00000000000..40826540c9f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-008.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. "> +<style> +div { + position: relative; + font: 50px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + z-index: -1; +} +.test { + color: green; + width: 3ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XX<br>X</div> + <div class="test">XX X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html new file mode 100644 index 00000000000..6d6ca3f743a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-009.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. "> +<style> +div { + position: relative; + font: 50px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + z-index: -1; +} +.test { + color: green; + width: 2ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XX<br>X</div> + <div class="test">XX᠎X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html new file mode 100644 index 00000000000..5f152c66294 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-010.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. "> +<style> +div { + position: relative; + font: 50px / 1 Ahem; +} +.red { + position: absolute; + background: red; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 3ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red"></div> + <div class="test">XX ᠎XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html new file mode 100644 index 00000000000..2196d983f9f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-011.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. "> +<style> +div { + position: relative; + font: 50px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + z-index: -1; +} +.test { + color: green; + width: 2ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XX<br>X</div> + <div class="test">XX͏X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html new file mode 100644 index 00000000000..110d9cafc4c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-012.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. "> +<style> +div { + position: relative; + font: 50px / 1 Ahem; +} +.red { + position: absolute; + background: red; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 3ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red"></div> + <div class="test">XX ͏XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html new file mode 100644 index 00000000000..2cda76c5cd3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-013.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. "> +<style> +div { + position: relative; + font: 50px / 1 Ahem; +} +.red { + position: absolute; + background: red; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 2ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red"></div> + <div class="test">XX‑X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html new file mode 100644 index 00000000000..d79efb7aee8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-014.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the GL classes in [UAX14] must be honored. "> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 4ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XX X<br>XX</div> + <div class="test">XX ‑XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html new file mode 100644 index 00000000000..5eecd03da25 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the ZWJ classes in [UAX14] must be honored. "> +<style> +div { + position: relative; + font: 50px / 1 Ahem; +} +.red { + position: absolute; + background: red; + height: 100px; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 2ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red"></div> + <div class="test">XX‍XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html new file mode 100644 index 00000000000..d4ab337a7b5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-016.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: line-break: anywhere overrides behavior defined for the WJ, ZW, GL, and ZWJ classes</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="match" href="reference/line-break-anywhere-004-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="Except where explicitly defined by 'line-break: anywhere' line breaking behavior defined for the ZWJ classes in [UAX14] must be honored. "> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 4ch; + line-break: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XX X<br>X</div> + <div class="test">XX ‍XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-atomic-nowrap-001.html b/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-atomic-nowrap-001.html new file mode 100644 index 00000000000..1e3b9edb1dc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-atomic-nowrap-001.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<title>CSS Text Test: Check atomic inline+NBSP quirk does not apply if nowrap</title> +<link rel="help" href="https://www.w3.org/TR/css-text-3/#line-break-details"> +<link rel="help" href="https://crbug.com/1002442"> +<link rel="author" title="Koji Ishii" href="mailto:kojiishi@gmail.com"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +div { + white-space: nowrap; + font-size: 10px; + line-height: 1; + width: 5ch; +} +.inline-block { + display: inline-block; + width: 3ch; + height: 1em; +} +img { + width: 3ch; + height: 1em; +} +</style> +<body> + <div>000<span class="inline-block"></span> 111</div> + <div>000<img> 111</div> + <div>000 <span class="inline-block"></span>111</div> + <div>000 <img>111</div> +<script> +(function () { + for (let e of document.getElementsByTagName('div')) { + test(() => { + let height = e.offsetHeight; + assert_equals(Math.round(height / 10), 1); + }); + } +})(); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html new file mode 100644 index 00000000000..ac90149ff30 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-006.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: overflow-wrap: anywhere</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-keep-all"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html"> +<meta name="assert" content="The word shouldn't be broken, honoring word-break: keep-all, but 'overflow-wrap: anywhere introduces additional soft wrap opportunities."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + position: relative; + font-size: 20px; + font-family: Ahem; + line-height: 1em; +} +.red { + position: absolute; + background: green; + color: red; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 5ch; + + word-break: keep-all; + overflow-wrap: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XXXXX<br>XXX</div> + <div class="test">XXXXXXXX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html new file mode 100644 index 00000000000..a5e10a84ebd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-007.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: overflow-wrap - anywhere (basic)</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<link rel="match" href="overflow-wrap-001-ref.html"> +<meta name="flags" content="ahem"> +<meta name="assert" content="The 'overflow-wrap' property set 'anywhere' breaks the word at an arbitrary point"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> + #test { + border: 5px solid orange; + font: 20px/1 Ahem; + overflow-wrap: anywhere; + width: 200px; + } +</style> +<body> + <p class="instructions">Test passes if the black box is within the orange box.</p> + <p id="test">FillerTextFillerTextFillerTextFillerText</p> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html new file mode 100644 index 00000000000..ddb95629999 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-008.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: overflow-wrap - anywhere and white-space - nowrap</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="3 White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-nowrap"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<link rel="match" href="overflow-wrap-002-ref.html"> +<meta name="flags" content="ahem"> +<meta name="assert" content="Test checks that the 'overflow-wrap' property has effect if and only if the 'white-space' allows wrapping"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> + #ref { + border: 5px solid orange; + font: 20px/1 Ahem; + overflow-wrap: anywhere; + width: 200px; + } + #test { + border: 5px solid blue; + font: 20px/1 Ahem; + overflow-wrap: anywhere; + white-space: nowrap; + width: 200px; + } +</style> +<body> + <p class="instructions">Test passes if the black box overflows the blue border box, but fits within the orange border box.</p> + <p id="ref">FillerTextFillerTextFillerTextFillerText</p> + <p id="test">FillerTextFillerTextFillerTextFillerText</p> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html new file mode 100644 index 00000000000..90f2ad33373 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: overflow-wrap: anywhere</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="The text is wrapped into two lines, since there is no need to break the second line using the space in the middle."> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.ref { + position: absolute; + background: green; + color: red; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 3ch; + + overflow-wrap: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="ref">XXX<br>X X</div> + <div class="test">XXXX<span> </span>X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html new file mode 100644 index 00000000000..0b4b75bc1c5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-010.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: overflow-wrap: anywhere</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="'overflow-wrap: anywhere' applies correctly when there is styled text using 'span' elements."> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + height: 100px; + z-index: -1; +} +.test { + color: transparent; + width: 4ch; + overflow-wrap: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red"><span style="color: green">XX</span>XX<br>XX</div> + <div class="test">XX<span style="color: green">XXXX</span>XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html new file mode 100644 index 00000000000..5a93c873445 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-001.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>overlfow-wrap: anywhere on inline element</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<meta name="flags" content="Ahem"> +<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html"> +<meta name="assert" content="'overflow-wrap: anywhwre' allows breaking before punctuation characters"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 50px / 1 Ahem; +} +.fail { + position: absolute; + background: green; + color: red; + width: 100px; + z-index: -1; +} +.test { + color: green; + width: 1em; + + overflow-wrap: anywhere; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div class="fail">X<br>X</div> +<div class="test"><span>X</span><span>.</span></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html new file mode 100644 index 00000000000..38dc19631d3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-002.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>overlfow-wrap: anywhere on inline element</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<meta name="flags" content="Ahem"> +<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html"> +<meta name="assert" content="'overflow-wrap: anywhere' works when specified on inline element"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div, span { + font: 10px / 1 Ahem; + color: green; +} +.fail { + position: absolute; + background: green; + color: red; + height: 100px; + z-index: -1; +} +.testdiv { + width: 5ch; +} +.test { + overflow-wrap: anywhere; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div class="fail">XXXXXXXXXX<br>XXXXX<br>XXXX<br>XXX</div> +<div class="testdiv">XXXXXXXXXX<span class="test">XXXXXXXXX</span>XXX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html new file mode 100644 index 00000000000..511294901d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-003.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>overlfow-wrap: anywhere on inline element</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<meta name="flags" content="Ahem"> +<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html"> +<meta name="assert" content="'overflow-wrap: anywhere' allows to break after the first character of the inline-block it applies to"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div, span { + font: 50px / 1 Ahem; + color: green; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +.testdiv { + width: 2ch; +} +.test { + overflow-wrap: anywhere; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div class="fail">XX<br>XX</div> +<div class="testdiv">XX<span class="test">XX</span></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html new file mode 100644 index 00000000000..e498e1eff16 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-anywhere-inline-004.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>overlfow-wrap: anywhere on inline element</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<meta name="flags" content="Ahem"> +<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html"> +<meta name="assert" content="'overflow-wrap: anywhere' should break after the last character of the inline-block it applies to"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div, span { + font: 25px / 1 Ahem; + color: green; +} +.fail { + position: absolute; + background: green; + color: red; + width: 100px; + height: 100px; + z-index: -1; +} +.testdiv { + width: 2ch; +} +.test { + overflow-wrap: anywhere; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div class="fail">XX<br>X<br>XX<br></div> +<div class="testdiv">X<span class="test">XX</span>XX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-009.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-009.html new file mode 100644 index 00000000000..fbbcf2233c5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-009.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: overflow-wrap: break-word</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word"> +<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="The text is wrapped into two lines, since there is no need to break the second line using the space in the middle."> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.ref { + position: absolute; + background: green; + color: red; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 3ch; + + overflow-wrap: break-word; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="ref">XXX<br>X X</div> + <div class="test">XXXX<span> </span>X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-010.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-010.html new file mode 100644 index 00000000000..da45dea2530 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-010.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: overflow-wrap: break-word</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word"> +<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="'overflow-wrap: break-word' applies correctly when there is styled text using 'span' elements."> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.ref { + position: absolute; + background: green; + color: red; + height: 100px; + z-index: -1; +} +.test { + color: transparent; + width: 4ch; + overflow-wrap: break-word; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="ref"><span style="color: green">XX</span>XX<br>XX</div> + <div class="test">XX<span style="color: green">XXXX</span>XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html index 608d4853a24..6975e816b46 100644 --- a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html @@ -6,8 +6,10 @@ <meta name="flags" content=""> <link rel="match" href="reference/overflow-wrap-min-content-size-001-ref.html"> <meta name="assert" content="Soft wrap opportunities introduced by overflow-wrap:anywhere **are** considered when calculating min-content intrinsic sizes."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> <style> table { + font: 20px/1 Ahem; overflow-wrap: anywhere; max-width: 0; border: 0; @@ -19,6 +21,7 @@ td { color: transparent; } #red { + font: 20px/1 Ahem; position: absolute; z-index: -1; background: red; diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-004.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-004.html index 7ee2b344f7f..16161ece69d 100644 --- a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-004.html +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-004.html @@ -3,11 +3,13 @@ <title>CSS Text Test: overflow-wrap: anywhere and intrinsic sizing</title> <link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> -<meta name="flags" content=""> +<meta name="flags" content="ahem"> <link rel="match" href="reference/overflow-wrap-min-content-size-004-ref.html"> <meta name="assert" content="Soft wrap opportunities introduced by overflow-wrap:break-word **are not** considered when calculating min-content intrinsic sizes."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> <style> table { + font: 20px/1 Ahem; overflow-wrap: break-word; max-width: 0; border: 0; @@ -19,6 +21,7 @@ td { color: transparent; } #red { + font: 20px/1 Ahem; position: absolute; z-index: -1; background: red; diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html new file mode 100644 index 00000000000..c8c2a1a4335 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-005.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: overflow-wrap: anywhere and intrinsic sizing</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-keep-all"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/overflow-wrap-min-content-size-001-ref.html"> +<meta name="assert" content="The word shouldn't be broken, honoring word-break: keep-all, but 'overflow-wrap: anywhere' introduce additional soft wrap opportunities, which **are** considered when calculating min-content intrinsic sizes."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + position: relative; + font: 20px/1 Ahem; +} +#red { + position: absolute; + z-index: -1; + background: red; + color: transparent; +} +.test { + background: green; + color: transparent; + width: min-content; + + word-break: keep-all; + overflow-wrap: anywhere; +} +</style> +<body> + <p>Test passes if there is a green box below and no red. + <div id=red>X<br>X<br>X<br>X</div> + <div class="test">XXXX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html new file mode 100644 index 00000000000..dbbd39301bd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-006.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: overflow-wrap: anywhere and intrinsic sizing</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-keep-all"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/overflow-wrap-min-content-size-004-ref.html"> +<meta name="assert" content="The word shouldn't be broken, honoring word-break: keep-all, but 'overflow-wrap: break-word' introduce additional soft wrap opportunities, which **are not** considered when calculating min-content intrinsic sizes."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + position: relative; + font: 20px/1 Ahem; +} +#red { + position: absolute; + z-index: -1; + background: red; + color: transparent; +} +.test { + background: green; + color: transparent; + width: min-content; + + word-break: keep-all; + overflow-wrap: break-word; +} +</style> +<body> + <p>Test passes if there is a green box below and no red. + <div id=red>XXXX</div> + <div class="test">XXXX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html new file mode 100644 index 00000000000..7296b8d3769 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-007.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: word-break: break-word and intrinsic sizing</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html"> +<meta name="assert" content="'overflow-wrap: anywhere' allows breaking before punctuation characters and it should be considered when computing the min-content size."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 50px / 1 Ahem; +} +.fail { + position: absolute; + background: green; + color: red; + width: 100px; + z-index: -1; +} +.test { + color: green; + width: min-content; + overflow-wrap: anywhere; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div class="fail">X<br>X</div> +<div class="test"><span>X</span><span>.</span></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-008.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-008.html new file mode 100644 index 00000000000..5c2b3958bd7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-008.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: word-break: break-word and intrinsic sizing</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html"> +<meta name="assert" content="'overflow-wrap: break-words allows breaking before punctuation characters, but these breaking opportunnites shouldn't be considered when computing the min-content size."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 50px / 1 Ahem; +} +.fail { + background: green; + position: absolute; + color: red; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: min-content; + overflow-wrap: break-word; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div class="fail">XX</div> +<div class="test"><span>X</span><span>.</span></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html index 99d964777c6..ef5c2e88cef 100644 --- a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html @@ -2,8 +2,10 @@ <meta charset="utf-8"> <title>CSS Text Test reference</title> <link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> <style> div { + font: 20px/1 Ahem; position: absolute; background: green; color: transparent; diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-004-ref.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-004-ref.html index c37f3f10784..93e22ba71ed 100644 --- a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-004-ref.html +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-004-ref.html @@ -2,8 +2,10 @@ <meta charset="utf-8"> <title>CSS Text Test reference</title> <link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> <style> div { + font: 20px/1 Ahem; position: absolute; background: green; color: transparent; diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-011.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-011.html index bc6b2965cb0..cf1babeb5e9 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-011.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-011.html @@ -9,7 +9,7 @@ <link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all"> -<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word"> <link rel="match" href="reference/white-space-break-spaces-005-ref.html"> <meta name="flags" content="ahem"> <meta name="assert" content="A breaking opportunity exists before the first character of a sequence of preserved white spaces to avoid the line overflow, honoring the 'line-break' property, ignoring previous breaking opportunities."> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-014.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-014.html new file mode 100644 index 00000000000..6eb32b57f3f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-014.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space - break-spaces</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="flags" content="ahem"> +<meta name="assert" content="A breaking opportunity exists before the first character of a sequence of preserved white spaces to avoid the line overflow, honoring the overflow-wrap property, except when there are previous breaking opportunities."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 25px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 4ch; + + white-space: break-spaces; + overflow-wrap: anywhere; +} + +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail">X<span>XXX<br></span>XX<span>X</span>X<br><span>XXXX<br></span><span>XXXX<br></span></div> + <div class="test">X XX X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-015.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-015.html new file mode 100644 index 00000000000..785c2f2a4e9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-015.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space - break-spaces</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property " href="https://drafts.csswg.org/css-text-3/#word-break-property"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="flags" content="ahem"> +<meta name="assert" content="A breaking opportunity exists only after a preserved white space character, but it's possible to avoid the overflow honoring the 'word-break' property, hence the 'overflow-wrap' property is not applied."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 25px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 4ch; + + white-space: break-spaces; + overflow-wrap: anywhere; + word-break: break-all; +} + +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail">X<span>X</span>X<span>X<br></span>X<span>X</span>X<span>X<br></span><span>XXXX<br></span><span>XXXX<br></span></div> + <div class="test">X XX X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-016.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-016.html new file mode 100644 index 00000000000..bec4520b113 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-016.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space - break-spaces</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#propdef-line-break"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="flags" content="ahem"> +<meta name="assert" content="A breaking opportunity exists before the first character of a sequence of preserved white spaces to avoid the line overflow, honoring the 'line-break' property, ignoring previous breaking opportunities."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 25px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 4ch; + + white-space: break-spaces; + line-break: anywhere; + overflow-wrap: anywhere; +} + +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail">X<span>X</span>XX<br><span>X</span>X<span>XX<br></span><span>XXXX<br></span><span>XXXX<br></span></div> + <div class="test">X XX X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-017.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-017.html new file mode 100644 index 00000000000..9cb8fdbebcb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-017.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space - break-spaces</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property " href="https://drafts.csswg.org/css-text-3/#word-break-property"> +<link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://drafts.csswg.org/css-text-3/#propdef-line-break"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="flags" content="ahem"> +<meta name="assert" content="A breaking opportunity exists before the first character of a sequence of preserved white spaces to avoid the line overflow, honoring the 'line-break' property, ignoring previous breaking opportunities."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 25px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 4ch; + + white-space: break-spaces; + line-break: anywhere; + word-break: break-all; + overflow-wrap: anywhere; +} + +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail">X<span>X</span>XX<br><span>X</span>X<span>XX<br></span><span>XXXX<br></span><span>XXXX<br></span></div> + <div class="test">X XX X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-018.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-018.html new file mode 100644 index 00000000000..828058f53dd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-018.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space - break-spaces</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="flags" content="ahem"> +<meta name="assert" content="A breaking opportunity exists before the first character of a sequence of preserved white spaces to avoid the line overflow, honoring the overflow-wrap property."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 25px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 4ch; + + white-space: break-spaces; + overflow-wrap: anywhere; +} + +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail">XXXX<br><span>X</span>XX<span>X<br></span><span>XXXX<br></span><span>XXXX<br></span></div> + <div class="test">XXXX XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-001.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-001.html new file mode 100644 index 00000000000..6912bafee9e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-001.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space: break-spaces and Overflow Wrapping</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="assert" content="break-word + break-spaces do not allow a break +between the last character of a word and the first space of a sequence of preserved spaces +if there are other wrapping opportunities earlier in the line."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 25px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 4ch; + + white-space: break-spaces; + overflow-wrap: break-word; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail">XX<span>XX</span><br>X<span>X</span>X<span>X<br>XXXX<br>XXXX</span></div> + <div class="test">XX X X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-002.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-002.html new file mode 100644 index 00000000000..caef57ec60f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-002.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space: break-spaces and Overflow Wrapping</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="assert" content="anywhere + break-spaces do not allow a break +between the last character of a word and the first space of a sequence of preserved spaces +if there are other wrapping opportunities earlier in the line."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 25px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 4ch; + + white-space: break-spaces; + overflow-wrap: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail">XX<span>XX</span><br>X<span>X</span>X<span>X<br>XXXX<br>XXXX</span></div> + <div class="test">XX X X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-003.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-003.html new file mode 100644 index 00000000000..9f91d085d8a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-003.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space: break-spaces and Overflow Wrapping</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/pre-wrap-001-ref.html"> +<meta name="assert" content="The word is not broken if there are previous breaking opportunities, honoring the 'white-space: break-spaces' value."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 20px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 2ch; + + white-space: break-spaces; + overflow-wrap: break-word; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail"><span>XX</span><br>XX</div> + <div class="test"> XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-004.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-004.html new file mode 100644 index 00000000000..911cff021ad --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-004.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space: break-spaces and Overflow Wrapping</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/pre-wrap-001-ref.html"> +<meta name="assert" content="The word is not broken if there are previous breaking opportunities, honoring the 'white-space: break-spaces' value."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 20px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 2ch; + + white-space: break-spaces; + overflow-wrap: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail"><span>XX</span><br>XX</div> + <div class="test"> XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-005.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-005.html new file mode 100644 index 00000000000..d5c836539d2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-005.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space: break-spaces and Overflow Wrapping</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-word-break"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="flags" content="ahem"> +<meta name="assert" content="White spaces are preserved, honoring the 'white-space: break-spaces', and the words aren't broken honring the 'overflow-wrap: break-word'."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 25px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 4ch; + + white-space: break-spaces; + overflow-wrap: break-word; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail"><span>XXXX</span><br>XXXX<br><span>X</span>XXX<br><span>XXXX</span></div> + <div class="test"> XXXX XXX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-006.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-006.html new file mode 100644 index 00000000000..0e4b6a80f14 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-006.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space: break-spaces and Overflow Wrapping</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-word-break"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="flags" content="ahem"> +<meta name="assert" content="White spaces are preserved, honoring the 'white-space: break-spaces', and the words aren't broken honring the 'overflow-wrap: break-word'."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 25px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 4ch; + + white-space: break-spaces; + overflow-wrap: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail"><span>XXXX</span><br>XXXX<br><span>X</span>XXX<br><span>XXXX</span></div> + <div class="test"> XXXX XXX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-007.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-007.html new file mode 100644 index 00000000000..bf51e4bc2fb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-007.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space: break-spaces and Overflow Wrapping</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-word-break"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="flags" content="ahem"> +<meta name="assert" content="White spaces are preserved, honoring the 'white-space: break-spaces', but we can break before the first space after a word honoring 'overflow-wrap: break-word'."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 25px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 4ch; + + white-space: break-spaces; + overflow-wrap: break-word; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail">XXXX<br><span>X</span>XX<span>X</span><br><span>XXXX</span><br><span>XXXX</span></div> + <div class="test">XXXX XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-008.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-008.html new file mode 100644 index 00000000000..9826449ecc6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-008.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space - break-spaces</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="flags" content="ahem"> +<meta name="assert" content="White spaces are preserved, honoring the 'white-space: break-spaces', but we can break before the first space after a word honoring 'overflow-wrap: anywhere'."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 25px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 4ch; + + white-space: break-spaces; + overflow-wrap: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail">XXXX<br><span>X</span>XX<span>X</span><br><span>XXXX</span><br><span>XXXX</span></div> + <div class="test">XXXX XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-009.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-009.html new file mode 100644 index 00000000000..3b6e7643309 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-009.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: word-break:break-word + white-space:break-spaces</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="assert" content="break-word + break-spaces do allow a break +between the last character of a word and the first space of a sequence of preserved spaces +if there are no other wrapping opportunities earlier in the line"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 25px/1 Ahem; +} +.expected { + position: absolute; + color: green; + width: 100px; + height: 100px; + white-space: pre; +} +.test { + background: green; + color: red; + width: 4ch; + + white-space: break-spaces; + overflow-wrap: break-word; +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div class="expected">XXXX<br> <br>XXXX<br></div> +<div class="test">XXXX XXXX </div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-010.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-010.html new file mode 100644 index 00000000000..d479c5e5675 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-with-overflow-wrap-010.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: word-break:break-word + white-space:break-spaces</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="assert" content="anywhere + break-spaces do allow a break +between the last character of a word and the first space of a sequence of preserved spaces +if there are no other wrapping opportunities earlier in the line"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 25px/1 Ahem; +} +.expected { + position: absolute; + color: green; + width: 100px; + height: 100px; + white-space: pre; +} +.test { + background: green; + color: red; + width: 4ch; + + white-space: break-spaces; + overflow-wrap: anywhere; +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div class="expected">XXXX<br> <br>XXXX<br></div> +<div class="test">XXXX XXXX </div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-009.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-009.html new file mode 100644 index 00000000000..0912a2d3a15 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-009.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space: pre-wrap</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="assert" content="The word is not broken despite the 'word-break: break-word' if there are previous breaking opportunities, honoring the white-space: pre-wrap value."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font-size: 20px; + font-family: Ahem; +} +.red { + position: absolute; + background: green; + color: red; + width: 100px; + height: 100px; + z-index: -1; + white-space: pre; +} +.test { + color: green; + line-height: 1em; + width: 5ch; + + white-space: pre-wrap; + overflow-wrap: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red"> XX <br>XXX</div> + <div class="test"> XX XXX </div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-010.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-010.html new file mode 100644 index 00000000000..71d169c65c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-010.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space: pre-wrap</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap"> +<link rel="help" title="5.5. Overflow Wrapping: the overflow-wrap/word-wrap property " href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-anywhere"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/pre-wrap-001-ref.html"> +<meta name="assert" content="The word is not broken if there are previous breaking opportunities, honoring the white-space: pre-wrap value."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font-size: 20px; + font-family: Ahem; + line-height: 1em; +} +.red { + position: absolute; + white-space: pre; + background: green; + color: red; + width: 40px; + height: 40px; + z-index: -1; +} +.test { + color: green; + width: 2ch; + + white-space: pre-wrap; + overflow-wrap: anywhere; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red"><br>XX</div> + <div class="test"> XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-029.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-029.html new file mode 100644 index 00000000000..3e0a1e14e69 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-029.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: word-break: break-all</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all"> +<link rel="match" href="reference/word-break-break-all-010-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="The text is wrapped into two lines, since there is no need to break the second line using the space in the middle."> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.red { + position: absolute; + background: green; + color: red; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + width: 3ch; + word-break: break-all; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">XXX<br>X X</div> + <div class="test">XXXX<span> </span>X</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-030.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-030.html new file mode 100644 index 00000000000..e6a8a0076d4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-030.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: word-break: break-all</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all"> +<link rel="match" href="reference/word-break-break-all-010-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<meta name="assert" content="word-break: break-all applies correctly when there is styled text using 'span' elemetns."> +<style> +div { + position: relative; + font: 25px / 1 Ahem; +} +.ref { + position: absolute; + background: green; + color: red; + height: 100px; + z-index: -1; +} +.test { + color: transparent; + width: 4ch; + word-break: break-all; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="ref"><span style="color: green">XX</span>XX<br>XX</div> + <div class="test">XX<span style="color: green">XXXX</span>XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-inline-009.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-inline-009.html new file mode 100644 index 00000000000..e1914f5f4db --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-inline-009.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>word-break: break-all on inline element</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all"> +<meta name="flags" content="Ahem"> +<link rel="match" href="reference/word-break-break-all-010-ref.html"> +<meta name="assert" content="'overflow-wrap: anywhere' works when specified on inline element"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div, span { + font: 10px / 1 Ahem; + color: green; +} +.fail { + position: absolute; + background: green; + color: red; + height: 100px; + z-index: -1; +} +.testdiv { + width: 5ch; +} +.test { + word-break: break-all; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div class="fail">XXXXXXXXXX<br>XXXXX<br>XXXX<br>XXX</div> +<div class="testdiv">XXXXXXXXXX<span class="test">XXXXXXXXX</span>XXX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-inline-010.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-inline-010.html new file mode 100644 index 00000000000..3c2df3cea29 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-inline-010.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>word-break: break-all on inline element</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="flags" content="Ahem"> +<link rel="match" href="reference/word-break-break-all-010-ref.html"> +<meta name="assert" content="'word-break: break-all' allows to break after the first character of the inline-block it applies to"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div, span { + font: 50px / 1 Ahem; + color: green; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +.testdiv { + width: 2ch; +} +.test { + word-break: break-all; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div class="fail">XX<br>XX</div> +<div class="testdiv">XX<span class="test">XX</span></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-001.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-001.html index 20b610180b3..a310e304529 100644 --- a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-001.html +++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-001.html @@ -7,8 +7,11 @@ <meta name="flags" content=""> <link rel="match" href="../overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html"> <meta name="assert" content="word-break: break-word should behave as overflow-wrap: anywhere, so breaking opportunities **are** considered when calculating min-content intrinsic sizes."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> <style> +div { font: 20px/1 Ahem; } table { + font: 20px/1 Ahem; word-break: break-word; max-width: 0; border: 0; diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-004.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-004.html index efa61b9cd8a..89b30027c2e 100644 --- a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-004.html +++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-min-content-004.html @@ -6,7 +6,7 @@ <link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-word"> <meta name="flags" content="ahem"> <link rel="match" href="reference/word-break-break-all-010-ref.html"> -<meta name="assert" content="word-break: break-word allows breaking before punctuation characters and it should be considered when computing the min-content size."> +<meta name="assert" content="'word-break: break-word' allows breaking before punctuation characters and it should be considered when computing the min-content size."> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <style> div { diff --git a/tests/wpt/web-platform-tests/css/cssom/serialize-media-rule.html b/tests/wpt/web-platform-tests/css/cssom/serialize-media-rule.html new file mode 100644 index 00000000000..94b37dc1a95 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom/serialize-media-rule.html @@ -0,0 +1,185 @@ +<!doctype html> +<html> +<head> + <meta charset="utf-8"> + <title>CSSOM - Serialization of CSSMediaRule</title> + <link rel="help" href="https://drafts.csswg.org/cssom/#serialize-a-css-rule"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> +</head> +<body> +<script> +function makeSheet(t) { + var style = document.createElement('style'); + document.body.appendChild(style); + t.add_cleanup(function() { + document.body.removeChild(style); + }); + return style.sheet; +} + +test(function(t) { + var sheet = makeSheet(t); + sheet.insertRule('@media {}', 0); + + assert_equals(sheet.cssRules.length, 1); + assert_equals(sheet.cssRules[0].cssText, '@media {\n}'); +}, 'empty media query list'); + +test(function(t) { + var sheet = makeSheet(t); + sheet.insertRule('@media all {}'); + sheet.insertRule('@media print {}'); + sheet.insertRule('@media screen {}'); + sheet.insertRule('@media speech {}'); + + assert_equals(sheet.cssRules.length, 4); + assert_equals(sheet.cssRules[0].cssText, '@media speech {\n}'); + assert_equals(sheet.cssRules[1].cssText, '@media screen {\n}'); + assert_equals(sheet.cssRules[2].cssText, '@media print {\n}'); + assert_equals(sheet.cssRules[3].cssText, '@media all {\n}'); +}, 'type - no features'); + +test(function(t) { + var sheet = makeSheet(t); + sheet.insertRule('@media not all {}'); + sheet.insertRule('@media not print {}'); + sheet.insertRule('@media not screen {}'); + sheet.insertRule('@media not speech {}'); + + assert_equals(sheet.cssRules.length, 4); + assert_equals(sheet.cssRules[0].cssText, '@media not speech {\n}'); + assert_equals(sheet.cssRules[1].cssText, '@media not screen {\n}'); + assert_equals(sheet.cssRules[2].cssText, '@media not print {\n}'); + assert_equals(sheet.cssRules[3].cssText, '@media not all {\n}'); +}, 'type - no features - negation'); + +test(function(t) { + var sheet = makeSheet(t); + sheet.insertRule('@media aLL {}'); + sheet.insertRule('@media pRiNt {}'); + sheet.insertRule('@media screEN {}'); + sheet.insertRule('@media spEech {}'); + + assert_equals(sheet.cssRules.length, 4); + assert_equals(sheet.cssRules[0].cssText, '@media speech {\n}'); + assert_equals(sheet.cssRules[1].cssText, '@media screen {\n}'); + assert_equals(sheet.cssRules[2].cssText, '@media print {\n}'); + assert_equals(sheet.cssRules[3].cssText, '@media all {\n}'); +}, 'type - no features - character case normalization'); + +test(function(t) { + var sheet = makeSheet(t); + sheet.insertRule('@media all and (color) {}'); + + assert_equals(sheet.cssRules.length, 1); + assert_equals(sheet.cssRules[0].cssText, '@media (color) {\n}'); +}, 'type - omission of all'); + +test(function(t) { + var sheet = makeSheet(t); + sheet.insertRule('@media not all and (color) {}'); + + assert_equals(sheet.cssRules.length, 1); + assert_equals(sheet.cssRules[0].cssText, '@media not all and (color) {\n}'); +}, 'type - inclusion of negated all'); + +test(function(t) { + var sheet = makeSheet(t); + sheet.insertRule('@media screen and (Color) {}'); + sheet.insertRule('@media screen and (cOLor) {}'); + + assert_equals(sheet.cssRules.length, 2); + assert_equals(sheet.cssRules[0].cssText, '@media screen and (color) {\n}'); + assert_equals(sheet.cssRules[1].cssText, '@media screen and (color) {\n}'); +}, 'features - character case normalization'); + +/** + * The following test is disabled pending clarification of the intended + * behavior: https://github.com/w3c/csswg-drafts/issues/533 + */ +//test(function(t) { +// var sheet = makeSheet(t); +// sheet.insertRule('@media screen and (color) and (color) {}'); +// +// assert_equals(sheet.cssRules.length, 1); +// assert_equals( +// sheet.cssRules[0].cssText, +// '@media screen and (color) {\n}' +// ); +//}, 'features - de-duplication'); + +test(function(t) { + var sheet = makeSheet(t); + sheet.insertRule('@media print and (max-width: 23px) and (max-width: 45px) {}'); + + assert_equals(sheet.cssRules.length, 1); + assert_equals( + sheet.cssRules[0].cssText, + '@media print and (max-width: 23px) and (max-width: 45px) {\n}' + ); +}, 'features - preservation of overspecified features'); + +test(function(t) { + var sheet = makeSheet(t); + sheet.insertRule('@media screen and (max-width: 0px) and (color) {}'); + sheet.insertRule('@media screen and (color) and (max-width: 0px) {}'); + + assert_equals(sheet.cssRules.length, 2); + assert_equals( + sheet.cssRules[0].cssText, + '@media screen and (color) and (max-width: 0px) {\n}' + ); + assert_equals( + sheet.cssRules[1].cssText, + '@media screen and (color) and (max-width: 0px) {\n}' + ); +}, 'features - lexicographical sorting'); + +test(function(t) { + var sheet = makeSheet(t); + sheet.insertRule('@media screen and (max-width: 0px), screen and (color) {}'); + + assert_equals(sheet.cssRules.length, 1); + assert_equals( + sheet.cssRules[0].cssText, + '@media screen and (max-width: 0px), screen and (color) {\n}' + ); +}, 'media query list'); + +test(function(t) { + var sheet = makeSheet(t); + sheet.insertRule('@media print {}'); + + assert_equals(sheet.cssRules.length, 1); + sheet.cssRules[0].insertRule('#foo { z-index: 23; float: left; }', 0); + assert_equals( + sheet.cssRules[0].cssText, + [ + '@media print {', + ' #foo { z-index: 23; float: left; }', + '}' + ].join('\n') + ); +}, 'one rule'); + +test(function(t) { + var sheet = makeSheet(t); + sheet.insertRule('@media print {}'); + + assert_equals(sheet.cssRules.length, 1); + sheet.cssRules[0].insertRule('#foo { z-index: 23; float: left; }', 0); + sheet.cssRules[0].insertRule('#bar { float: none; z-index: 45; }', 0); + assert_equals( + sheet.cssRules[0].cssText, + [ + '@media print {', + ' #bar { float: none; z-index: 45; }', + ' #foo { z-index: 23; float: left; }', + '}' + ].join('\n') + ); +}, 'many rules'); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/custom-elements/CustomElementRegistry.html b/tests/wpt/web-platform-tests/custom-elements/CustomElementRegistry.html index 368044df3c9..c288e823270 100644 --- a/tests/wpt/web-platform-tests/custom-elements/CustomElementRegistry.html +++ b/tests/wpt/web-platform-tests/custom-elements/CustomElementRegistry.html @@ -185,12 +185,15 @@ test(function () { var proxy = new Proxy(class extends HTMLElement { }, { get: function (target, name) { calls.push(name); - iframe.contentWindow.customElements.define('another-custom-element', InnerCustomElement); + if (name === "prototype") { + iframe.contentWindow.customElements.define('another-custom-element', InnerCustomElement); + } return target[name]; } }) customElements.define('element-with-inner-element-define', proxy); - assert_array_equals(calls, ['prototype'], 'customElements.define must get "prototype"'); + assert_array_equals(calls, ['prototype', 'disabledFeatures', 'formAssociated'], + 'customElements.define must get "prototype", "disabledFeatures", and "formAssociated" on the constructor'); assert_true(iframe.contentDocument.createElement('another-custom-element') instanceof InnerCustomElement); }); document.body.removeChild(iframe); @@ -226,8 +229,8 @@ test(function () { } }); customElements.define('proxy-element', proxy); - assert_array_equals(calls, ['prototype']); -}, 'customElements.define must get "prototype" property of the constructor'); + assert_array_equals(calls, ['prototype', 'disabledFeatures', 'formAssociated']); +}, 'customElements.define must get "prototype", "disabledFeatures", and "formAssociated" property of the constructor'); test(function () { var proxy = new Proxy(class extends HTMLElement { }, { diff --git a/tests/wpt/web-platform-tests/docs/admin/index.md b/tests/wpt/web-platform-tests/docs/admin/index.md index 7eca6e3a9a9..56a08eb7f07 100644 --- a/tests/wpt/web-platform-tests/docs/admin/index.md +++ b/tests/wpt/web-platform-tests/docs/admin/index.md @@ -21,18 +21,6 @@ infrastructure which makes the project possible. ## Secrets -Some aspects of the infrastructure are only accessible to administrators. - -```eval_rst -========================= ========================= ========================= -Project Secret Owners -========================= ========================= ========================= -[results-collection] root SSH keys boaz@bocoup.com, mike@bocoup.com, rick@bocoup.com -[results-collection] Password for app secrets boaz@bocoup.com, mike@bocoup.com, rick@bocoup.com -========================= ========================= ========================= - -``` - SSL certificates for all HTTPS-enabled domains are retrieved via [Let's Encrypt](https://letsencrypt.org/), so that data does not represent an explicitly-managed secret. @@ -68,10 +56,6 @@ explicitly-managed secret. - markdittmer@google.com - mike@bocoup.com - rick@bocoup.com -- [Amazon AWS](https://aws.amazon.com/): results-collection infrastructure - - boaz@bocoup.com - - mike@bocoup.com - - rick@bocoup.com - E-mail address: wpt.pr.bot@gmail.com - boaz@bocoup.com - mike@bocoup.com @@ -85,6 +69,5 @@ explicitly-managed secret. - mike@bocoup.com - simon@bocoup.com -[results-collection]: https://github.com/web-platform-tests/results-collection [web-platform-tests]: https://github.com/e3c/web-platform-tests [wpt.fyi]: https://github.com/web-platform-tests/wpt.fyi diff --git a/tests/wpt/web-platform-tests/docs/assets/web-platform.png b/tests/wpt/web-platform-tests/docs/assets/web-platform.png Binary files differnew file mode 100644 index 00000000000..2b14c5ef60d --- /dev/null +++ b/tests/wpt/web-platform-tests/docs/assets/web-platform.png diff --git a/tests/wpt/web-platform-tests/docs/index.md b/tests/wpt/web-platform-tests/docs/index.md index b24abae007f..d1a527e1a75 100644 --- a/tests/wpt/web-platform-tests/docs/index.md +++ b/tests/wpt/web-platform-tests/docs/index.md @@ -11,6 +11,7 @@ platform to deliver on the promise of working across browsers and devices without needing extra layers of abstraction to paper over the gaps left by specification editors and implementors. + The most important sources of information and activity are: - [github.com/web-platform-tests/wpt](https://github.com/web-platform-tests/wpt): @@ -19,9 +20,9 @@ The most important sources of information and activity are: - [web-platform-tests.org](https://web-platform-tests.org): the documentation website; details how to set up the project, how to write tests, how to give and receive peer review, how to serve as an administrator, and more -- [web-platform-tests.live](http://web-platform-tests.live): a public - deployment of the test suite, allowing anyone to run the tests by visiting - from an Internet-enabled browser of their choice +- [wpt.live](http://wpt.live): a public deployment of the test suite, + allowing anyone to run the tests by visiting from an + Internet-enabled browser of their choice - [wpt.fyi](https://wpt.fyi): an archive of test results collected from an array of web browsers on a regular basis - [Real-time chat room](http://irc.w3.org/?channels=testing): the @@ -35,11 +36,18 @@ The most important sources of information and activity are: **If you'd like clarification about anything**, don't hesitate to ask in the chat room or on the mailing list. -## Watch a Talk +## Video Introduction ([transcript](intro-video-transcript)) -If you prefer watching a video, here is a talk introducing web-platform-tests: +<iframe + width="560" + height="315" + src="https://www.youtube.com/embed/zuK1uyXPZS0" + frameborder="0" + allow="autoplay; encrypted-media" + allowfullscreen></iframe> -<iframe width="560" height="315" src="https://www.youtube.com/embed/XnfE3MfH5hQ" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe> +See also [this lecture from Web Engines Hackfest 2018 (30 +minutes)](https://www.youtube.com/watch?v=XnfE3MfH5hQ) ## GitHub @@ -64,6 +72,7 @@ free to add yourself to the META.yml file! :maxdepth: 2 test-suite-design + intro-video-transcript running-tests/index writing-tests/index reviewing-tests/index diff --git a/tests/wpt/web-platform-tests/docs/intro-video-transcript.md b/tests/wpt/web-platform-tests/docs/intro-video-transcript.md new file mode 100644 index 00000000000..b43ebf728fc --- /dev/null +++ b/tests/wpt/web-platform-tests/docs/intro-video-transcript.md @@ -0,0 +1,232 @@ +# "Introduction to WPT" video transcript + +<iframe + width="560" + height="315" + src="https://www.youtube.com/embed/zuK1uyXPZS0" + frameborder="0" + allow="autoplay; encrypted-media" + allowfullscreen></iframe> + +**Still image of the WPT logo. The song ["My +Luck"](http://brokeforfree.bandcamp.com/track/my-luck) by [Broke for +Free](http://brokeforfree.com/) (licensed under [Creative Commons Attribution +3.0](https://creativecommons.org/licenses/by/3.0/)) +plays in the background.** + +> Hello, and welcome to the Web Platform Tests! +> +> The goal of this project is to ensure that all web browsers present websites +> in exactly the way the authors intended. +> +> But what is the web platform, exactly? You can think of it as having three +> main parts. + +**A top-down shot of a blank sheet of graph paper** + +> First, there are the web browsers. + +A hand places a paper cutout depicting a browser window in the lower-right +corner of the sheet. + +> Applications like Firefox, Chrome, and Safari allow people to interact with +> pages and with each other. +> +> Second, there are the web standards. + +A hand places a paper cutout depicting a scroll of parchment paper in the +lower-left corner of the sheet. + +> These documents define how the browsers are supposed to behave. + +**A screen recording of a web browser** + +`https://platform.html5.org` is entered into the location bar, and the browser +loads the page. + +> That includes everything from how text is rendered to how augmented reality +> apps are built. Specifying it all takes a lot of work! + +The browser clicks through to the Fetch standard and begins scrolling. + +> And as you might expect, the standards can get really complicated. + +**Return to the graph paper** + +A hand draws an arrow from the cutout of the scroll to the cutout of the +browser window. + +> The people who build the browsers use the specifications as a blue print for +> their work. A shared set of generic instructions like these make it possible +> for people to choose between different browsers, but only if the browsers get +> it right. + +A hand places a cutout representing a stack of papers on the top-center of the +sheet and draws an arrow from that cutout to the cutout of the browser window. + +> To verify their work, the browser maintainers rely on the third part of the +> web platform: conformance tests. + +A hand draws an arrow from the cutout of the scroll to the cutout of the tests. + +> We author tests to describe the same behavior as the standards, just +> formatted in a way that a computer can understand. + +A hand draws an arrow from the cutout of the browser window to the cutout of +the scroll. + +> In the process, the maintainers sometimes uncover problems in the design of +> the specifications, and they recommend changes to fix them. + +A hand draws an arrow from the cutout of the tests to the cutout of the scroll. + +> Test authors also find and fix these so-called "spec bugs." + +A hand draws an arrow from the cutout of the browser window to the cutout of +the tests. + +> ...and as they implement the standards, the maintainers of each browser +> frequently write new tests that can be shared with the others. +> +> This is how thousands of people coordinate to build the cohesive programming +> platform that we call the world wide web. The web-platform-tests project is +> one of the test suites that make this possible. +> +> That's pretty abstract, though! Let's take a quick look at the tests +> themselves. + +**A screen recording of a web browser** + +`http://wpt.live` is entered into the location bar, and the browser loads the +page. + +> The latest version of the tests is publicly hosted in executable form on the +> web at wpt.live. + +The browser begins scrolling through the enormous list of directories. + +> There, were can navigate among all the tests for all the different web +> technologies. +> +> Let's take a look at a typical test. + +The browser stops scrolling, and a mouse cursor clicks on `fetch`, then `api`, +then `headers`, and finally `headers-basic.html`. + +> This test is written with the web-platform-tests's testing framework, +> testharness.js. The test completes almost instantly, and testharness.js +> reports that this browser passes all but one subtest. To understand the +> failure, we can read the source code. + +The mouse opens a context menu, selects "View Source", and scrolls to the +source of the failing test. + +> It looks like the failing subtest is for what happens when a `Headers` +> instance has a custom JavaScript iterator method. That's a strange edge case, +> but it's important for browsers to agree on every detail! + +The mouse clicks on the browser's "Back" button and then navigates through the +directory structure to the test at +`css/css-transforms/transform-transformed-tr-contains-fixed-position.html`. It +displays text rendered at an angle. + +> Many tests don't use testharness.js at all. Let's take a look at a couple +> other test types. +> +> When it comes to the visual appearance of a page, it can be hard to verify +> the intended behavior using JavaScript alone. For these situations, the +> web-platform-tests uses what's known as a reftest. +> +> Short for "reference test", this type of test uses at least two different web +> pages. +> +> The first page demonstrates the feature under test. + +The mouse opens a context menu, selects "View Source", and clicks on the `href` +value for the matching reference. It looks identical to the previous page. + +> Inside of it, we'll find a link to a second page. This second page is the +> reference page. It's designed to use a different approach to produce the same +> output. + +The mouse clicks back and forth between the browser tabs displaying the test +page and the reference page. + +> When tests like these are run automatically, a computer verifies that +> screenshots of the two pages are identical. + +The mouse clicks on the browser's "Back" button and then navigates through the +directory structure to the test at +`css/css-animations/animation-fill-mode-002-manual.html`. The page includes the +text, "Test passes if there is a filled color square with 'Filler Text', whose +color gradually changes in the order: YELLOW to GREEN." It also includes the +described animated square. + +> Even with testharness.js and reftests, there are many web platform features +> that a computer can't automatically verify. In cases like these, we fall back +> to using manual tests. +> +> Manual tests can only be verified by a living, breathing human. They describe +> their expectations in plain English so that a human operator can easily +> determine whether the browser is behaving correctly. + +`https://web-platform-tests.org` is entered into the location bar, and the +browser loads the page. + +> You can read more about all the test types in the project documentation at +> [web-platform-tests.org](https://web-platform-tests.org). + +`https://wpt.fyi` is entered into the location bar, and the browser loads the +page. + +> [wpt.fyi](https://wpt.fyi) is a great way to see how today's browsers are +> performing on the web-platform-tests. + +The browser scrolls to `fetch`, and a mouse cursor clicks on `fetch`, then +`api`, then `headers`, and finally `headers-basic.html`. + +> Here, you'll find all the same tests, just presented with the results from +> various browsers. + +`https://web-platform-tests.live/LICENSE.md` is entered into the location bar, +and the browser loads the page. + +> The web-platform-tests project is free and open source software. From bug +> reports to documentation improvements and brand new tests, we welcome all +> sorts of contributions from everyone. + +`https://github.com/web-platform-tests/wpt` is entered into the location bar, +and the browser loads the page. + +> To get involved, you can visit the project management website hosted on +> GitHub.com. + +The browser navigates to the project's "issues" list and filters the list for +just the ones labeled as "good first issue." + +> Some issues are more difficult than others, but many are perfect for people who +> are just getting started with the project. When we come across an issue like +> that, we label it as a "good first issue." + +`https://lists.w3.org/Archives/Public/public-test-infra` is entered into the +location bar, and the browser loads the page. + +> You can also join the mailing list to receive e-mail with announcements and +> discussion about the project. + +`http://irc.w3.org/` is entered into the location bar, and the browser loads +the page. `web4all` is entered as the Nickname, and `#testing` is entered as +the channel name. A mouse clicks on the "Connect" button. + +> For more immediate communication, you can join the "testing" channel on the +> IRC server run by the W3C. + +**Return to the graph paper** + +A hand places a paper cutout depicting a human silhouette on the sheet. It then +draws arrows from the new cutout to each of the three previously-introduced +cutouts. + + + +> We're looking forward to working with you! diff --git a/tests/wpt/web-platform-tests/docs/reviewing-tests/email.md b/tests/wpt/web-platform-tests/docs/reviewing-tests/email.md index fbfa65d75cc..55bbf443672 100644 --- a/tests/wpt/web-platform-tests/docs/reviewing-tests/email.md +++ b/tests/wpt/web-platform-tests/docs/reviewing-tests/email.md @@ -1,7 +1,7 @@ # Email Filters See the [GitHub support page](https://help.github.com/articles/about-email-notifications/) -for how to filter certain types of email notifications. However, the most -useful `Cc` email addresses are not listed on that page: +for how to filter certain types of email notifications. These are the most +useful `Cc` addresses when reviewing in web-platform-tests: - `review_requested@noreply.github.com` when you are added as a (suggested) `reviewer` on a pull request. - `assign@noreply.github.com` when you are added as the `assignee` (i.e. as _the_ reviewer) on a pull request. diff --git a/tests/wpt/web-platform-tests/docs/writing-tests/test-templates.md b/tests/wpt/web-platform-tests/docs/writing-tests/test-templates.md index 858758b4c8e..e8f4bfe77f4 100644 --- a/tests/wpt/web-platform-tests/docs/writing-tests/test-templates.md +++ b/tests/wpt/web-platform-tests/docs/writing-tests/test-templates.md @@ -95,6 +95,23 @@ ${2:Test body} Filename: `{test-topic}-###.html` +### HTML with [testdriver automation](testdriver) +``` html +<!DOCTYPE html> +<meta charset="utf-8"> +<title>${1:Test title}</title> +<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> +${2:Test body} +</script> +``` + +Filename: `{test-topic}-###.html` + ### SVG ``` xml diff --git a/tests/wpt/web-platform-tests/docs/writing-tests/testharness-api.md b/tests/wpt/web-platform-tests/docs/writing-tests/testharness-api.md index 5883308cc66..1bdf06613f9 100644 --- a/tests/wpt/web-platform-tests/docs/writing-tests/testharness-api.md +++ b/tests/wpt/web-platform-tests/docs/writing-tests/testharness-api.md @@ -279,12 +279,6 @@ In order for a test to be interpreted as a single page test, it should set the The test title for single page tests is always taken from `document.title`. -(Prior to October 2019, this behavior would be enabled implicitly for any test -that did not call `test()` or `async_test()` anywhere on the page and that -eventually called the `done()` function. [This behavior was found to be prone -to errors and is in the process of being -removed.](https://github.com/web-platform-tests/rfcs/blob/master/rfcs/single_test.md)) - ## Making assertions ## Functions for making assertions start `assert_`. The full list of @@ -311,6 +305,41 @@ NOTE: All asserts must be located in a `test()` or a step of an these places won't be detected correctly by the harness and may cause unexpected exceptions that will lead to an error in the harness. +## Preconditions ## + +When a test would be invalid unless certain conditions are met, but yet +doesn't explicitly depend on those preconditions, `assert_precondition` can be +used. For example: + +```js +async_test((t) => { + const video = document.createElement("video"); + assert_precondition(video.canPlayType("video/webm")); + video.src = "multitrack.webm"; + // test something specific to multiple audio tracks in a WebM container + t.done(); +}, "WebM with multiple audio tracks"); +``` + +A failing `assert_precondition` call is reported as a status of +`PRECONDITION_FAILED` for the subtest. + +`assert_precondition` can also be used during test setup. For example: + +```js +setup(() => { + assert_precondition("onfoo" in document.body, "'foo' event supported"); +}); +async_test(() => { /* test #1 waiting for "foo" event */ }); +async_test(() => { /* test #2 waiting for "foo" event */ }); +``` + +A failing `assert_precondition` during setup is reported as a status of +`PRECONDITION_FAILED` for the test, and the subtests will not run. + +See also the `.optional` [file name convention](file-names.md), which is +appropriate when the precondition is explicitly optional behavior. + ## Cleanup ## Occasionally tests may create state that will persist beyond the test itself. @@ -527,7 +556,8 @@ the following methods: Tests have the following properties: * `status` - A status code. This can be compared to the `PASS`, `FAIL`, - `TIMEOUT` and `NOTRUN` properties on the test object + `PRECONDITION_FAILED`, `TIMEOUT` and `NOTRUN` properties on the + test object * `message` - A message indicating the reason for failure. In the future this will always be a string @@ -535,9 +565,11 @@ Tests have the following properties: The status object gives the overall status of the harness. It has the following properties: - * `status` - Can be compared to the `OK`, `ERROR` and `TIMEOUT` properties + * `status` - Can be compared to the `OK`, `PRECONDITION_FAILED`, `ERROR` and + `TIMEOUT` properties - * `message` - An error message set when the status is `ERROR` + * `message` - An error message set when the status is `PRECONDITION_FAILED` + or `ERROR`. ## External API ## @@ -712,6 +744,10 @@ workers and want to ensure they run in series: ## List of Assertions ## +### `assert_precondition(condition, description)` +asserts that `condition` is truthy. +See [preconditions](#preconditions) for usage. + ### `assert_true(actual, description)` asserts that `actual` is strictly true @@ -820,7 +856,15 @@ asserts that one `assert_func(actual, expected_array_N, extra_arg1, ..., extra_a allows multiple behaviours. Test authors should not use this method simply to hide UA bugs. -## Formatting ## +## Utility functions ## + +### **DEPRECATED** `on_event(object, event, callback)` + +Register a function as a DOM event listener to the given object for the event +bubbling phase. New tests should not use this function. Instead, they should +invoke the `addEventListener` method of the `object` value. + +### `format_value(value)` When many JavaScript Object values are coerced to a String, the resulting value will be `"[object Object]"`. This obscures helpful information, making the diff --git a/tests/wpt/web-platform-tests/docs/writing-tests/testharness.md b/tests/wpt/web-platform-tests/docs/writing-tests/testharness.md index acab70a1f16..e04a344d098 100644 --- a/tests/wpt/web-platform-tests/docs/writing-tests/testharness.md +++ b/tests/wpt/web-platform-tests/docs/writing-tests/testharness.md @@ -16,14 +16,14 @@ of a page, and where human interaction isn't required; these tests are written in JavaScript using a framework called `testharness.js`. It is documented in two sections: - * [testharness.js Documentation](testharness-api) — An introduction + * [testharness.js Documentation](testharness-api.md) — An introduction to the library and a detailed API reference. - * [idlharness.js Documentation](idlharness) — A library for testing + * [idlharness.js Documentation](idlharness.md) — A library for testing IDL interfaces using `testharness.js`. -See [server features](server-features) for advanced testing features that are commonly used -with testharness.js. See also the [general guidelines](general-guidelines) for all test types. +See [server features](server-features.md) for advanced testing features that are commonly used +with testharness.js. See also the [general guidelines](general-guidelines.md) for all test types. This page describes testharness.js exhaustively; [the tutorial on writing a testharness.js test](testharness-tutorial) provides a concise guide to writing diff --git a/tests/wpt/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html b/tests/wpt/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html index 848828810f1..7c8e690a28b 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html +++ b/tests/wpt/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html @@ -8,118 +8,109 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> </head> + <div id="activedescendant" aria-activedescendant="x"></div> - <div id="parent-listbox" role="listbox" aria-activedescendant="i1"> + <div id="parentListbox" role="listbox" aria-activedescendant="i1"> <div role="option" id="i1">Item 1</div> <div role="option" id="i2">Item 2</div> </div> <script> test(function(t) { - const ancestor = document.getElementById("parent-listbox"); assert_equals(activedescendant.ariaActiveDescendantElement, null, "invalid ID for relationship returns null"); - const descendant1 = document.getElementById("i1"); - const descendant2 = document.getElementById("i2"); - // Element reference should be set if the content attribute was included. - assert_equals(ancestor.getAttribute("aria-activedescendant"), "i1", "check content attribute after parsing."); - assert_equals(ancestor.ariaActiveDescendantElement, i1, "check idl attribute after parsing."); + assert_equals(parentListbox.getAttribute("aria-activedescendant"), "i1", "check content attribute after parsing."); + assert_equals(parentListbox.ariaActiveDescendantElement, i1, "check idl attribute after parsing."); // If we set the content attribute, the element reference should reflect this. - ancestor.setAttribute("aria-activedescendant", "i2"); - assert_equals(ancestor.ariaActiveDescendantElement, descendant2, "setting the content attribute updates the element reference."); + parentListbox.setAttribute("aria-activedescendant", "i2"); + assert_equals(parentListbox.ariaActiveDescendantElement, i2, "setting the content attribute updates the element reference."); // Setting the element reference should be reflected in the content attribute. - ancestor.ariaActiveDescendantElement = descendant1; - assert_equals(ancestor.ariaActiveDescendantElement, descendant1, "getter should return the right element reference."); - assert_equals(ancestor.getAttribute("aria-activedescendant"), "i1", "content attribute should reflect the element reference."); + parentListbox.ariaActiveDescendantElement = i1; + assert_equals(parentListbox.ariaActiveDescendantElement, i1, "getter should return the right element reference."); + assert_equals(parentListbox.getAttribute("aria-activedescendant"), "i1", "content attribute should reflect the element reference."); // Both content and IDL attribute should be nullable. - ancestor.ariaActiveDescendantElement = null; - assert_equals(ancestor.ariaActiveDescendantElement, null); - assert_false(ancestor.hasAttribute("aria-activedescendant")); - assert_equals(ancestor.getAttribute("aria-activedescendant"), null, "nullifying the idl attribute removes the content attribute."); + parentListbox.ariaActiveDescendantElement = null; + assert_equals(parentListbox.ariaActiveDescendantElement, null); + assert_false(parentListbox.hasAttribute("aria-activedescendant")); + assert_equals(parentListbox.getAttribute("aria-activedescendant"), null, "nullifying the idl attribute removes the content attribute."); // Setting content attribute to non-existent or non compatible element should nullify the IDL attribute. // Reset the element to an existant one. - ancestor.setAttribute("aria-activedescendant", "i1"); - assert_equals(ancestor.ariaActiveDescendantElement, i1, "reset attribute."); + parentListbox.setAttribute("aria-activedescendant", "i1"); + assert_equals(parentListbox.ariaActiveDescendantElement, i1, "reset attribute."); - ancestor.setAttribute("aria-activedescendant", "non-existent-element"); - assert_equals(ancestor.getAttribute("aria-activedescendant"), "non-existent-element"); - assert_equals(ancestor.ariaActiveDescendantElement, null,"non-DOM content attribute should null the element reference"); + parentListbox.setAttribute("aria-activedescendant", "non-existent-element"); + assert_equals(parentListbox.getAttribute("aria-activedescendant"), "non-existent-element"); + assert_equals(parentListbox.ariaActiveDescendantElement, null,"non-DOM content attribute should null the element reference"); }, "aria-activedescendant element reflection"); </script> - <div id="parent-listbox-2" role="listbox" aria-activedescendant="option1"> + <div id="parentListbox2" role="listbox" aria-activedescendant="option1"> <div role="option" id="option1">Item 1</div> <div role="option" id="option2">Item 2</div> </div> <script> test(function(t) { - const ancestor = document.getElementById("parent-listbox-2"); const option1 = document.getElementById("option1"); const option2 = document.getElementById("option2"); - assert_equals(ancestor.ariaActiveDescendantElement, option1); - + assert_equals(parentListbox2.ariaActiveDescendantElement, option1); option1.removeAttribute("id"); option2.setAttribute("id", "option1"); const option2Duplicate = document.getElementById("option1"); assert_equals(option2, option2Duplicate); - assert_equals(ancestor.ariaActiveDescendantElement, option2); + assert_equals(parentListbox2.ariaActiveDescendantElement, option2); }, "If the content attribute is set directly, the IDL attribute getter always returns the first element whose ID matches the content attribute."); </script> - <div id="blank-id-parent" role="listbox"> + <div id="blankIdParent" role="listbox"> <div role="option" id="multiple-id"></div> <div role="option" id="multiple-id"></div> </div> <script> test(function(t) { - const ancestor = document.getElementById("blank-id-parent"); - // Get second child of parent. This violates the setting of a reflected element // as it will not be the first child of the parent with that ID, which should // result in an empty string for the content attribute. - ancestor.ariaActiveDescendantElement = ancestor.children[1]; - assert_true(ancestor.hasAttribute("aria-activedescendant")); - assert_equals(ancestor.getAttribute("aria-activedescendant"), ""); - assert_equals(ancestor.ariaActiveDescendantElement, ancestor.children[1]); + blankIdParent.ariaActiveDescendantElement = blankIdParent.children[1]; + assert_true(blankIdParent.hasAttribute("aria-activedescendant")); + assert_equals(blankIdParent.getAttribute("aria-activedescendant"), ""); + assert_equals(blankIdParent.ariaActiveDescendantElement, blankIdParent.children[1]); }, "Setting the IDL attribute to an element which is not the first element in DOM order with its ID causes the content attribute to be an empty string"); </script> - <div id="outer-container"> - <p id="light-paragraph">Hello world!</p> - <span class="shadow-host"> + <div id="outerContainer"> + <p id="lightParagraph">Hello world!</p> + <span id="shadowHost"> </span> </div> <script> test(function(t) { - const shadowElement = document.querySelector(".shadow-host"); - const shadow = shadowElement.attachShadow({mode: "open"}); + const shadow = shadowHost.attachShadow({mode: "open"}); const link = document.createElement("a"); shadow.appendChild(link); - const lightPara = document.getElementById("light-paragraph"); - assert_equals(lightPara.ariaActiveDescendantElement, null); + assert_equals(lightParagraph.ariaActiveDescendantElement, null); // The given element crosses a shadow dom boundary, so it cannot be // set as an element reference. - lightPara.ariaActiveDescendantElement = link; - assert_equals(lightPara.ariaActiveDescendantElement, null); + lightParagraph.ariaActiveDescendantElement = link; + assert_equals(lightParagraph.ariaActiveDescendantElement, null); // The given element crosses a shadow dom boundary (upwards), so // can be used as an element reference, but the content attribute // should reflect the empty string. - link.ariaActiveDescendantElement = lightPara; - assert_equals(link.ariaActiveDescendantElement, lightPara); + link.ariaActiveDescendantElement = lightParagraph; + assert_equals(link.ariaActiveDescendantElement, lightParagraph); assert_equals(link.getAttribute("aria-activedescendant"), ""); }, "Setting an element reference that crosses into a shadow tree is disallowed, but setting one that is in a shadow inclusive ancestor is allowed."); </script> @@ -129,18 +120,15 @@ <script> test(function(t) { - const inputElement = document.getElementById("startTime"); - const errorMessage = document.getElementById("errorMessage"); + startTime.ariaErrorMessageElement = errorMessage; + assert_equals(startTime.getAttribute("aria-errormessage"), "errorMessage"); - inputElement.ariaErrorMessageElement = errorMessage; - assert_equals(inputElement.getAttribute("aria-errormessage"), "errorMessage"); + startTime.ariaErrorMessageElement = null; + assert_equals(startTime.ariaErrorMessageElement, null, "blah"); + assert_false(startTime.hasAttribute("aria-errormessage")); - inputElement.ariaErrorMessageElement = null; - assert_equals(inputElement.ariaErrorMessageElement, null, "blah"); - assert_false(inputElement.hasAttribute("aria-errormessage")); - - inputElement.setAttribute("aria-errormessage", "errorMessage"); - assert_equals(inputElement.ariaErrorMessageElement, errorMessage); + startTime.setAttribute("aria-errormessage", "errorMessage"); + assert_equals(startTime.ariaErrorMessageElement, errorMessage); }, "aria-errormessage"); @@ -148,74 +136,62 @@ <label> Password: - <input id="password-field" type="password" aria-details="pw"> + <input id="passwordField" type="password" aria-details="pw"> </label> <ul> - <li id="list-item-1">First description.</li> - <li id="list-item-2">Second description.</li> + <li id="listItem1">First description.</li> + <li id="listItem2">Second description.</li> </ul> <script> test(function(t) { - const inputElement = document.getElementById("password-field"); - const ul1 = document.getElementById("list-item-1"); - const ul2 = document.getElementById("list-item-2"); - - assert_equals(inputElement.ariaDetailsElement, null); - inputElement.ariaDetailsElement = ul1; - assert_equals(inputElement.getAttribute("aria-details"), "list-item-1"); + assert_equals(passwordField.ariaDetailsElement, null); + passwordField.ariaDetailsElement = listItem1; + assert_equals(passwordField.getAttribute("aria-details"), "listItem1"); - inputElement.ariaDetailsElement = ul2; - assert_equals(inputElement.getAttribute("aria-details"), "list-item-2"); + passwordField.ariaDetailsElement = listItem2; + assert_equals(passwordField.getAttribute("aria-details"), "listItem2"); }, "aria-details"); </script> - <div id="old-parent" role="listbox" aria-activedescendant="content-attr-element"> - <div role="option" id="content-attr-element">Item 1</div> - <div role="option" id="idl-attr-element">Item 2</div> + <div id="deletionParent" role="listbox" aria-activedescendant="contentAttrElement"> + <div role="option" id="contentAttrElement">Item 1</div> + <div role="option" id="idlAttrElement">Item 2</div> </div> <script> test(function(t) { - const deletionParent = document.getElementById("old-parent"); - - const descendant1 = document.getElementById("content-attr-element"); - const descendant2 = document.getElementById("idl-attr-element"); - // Deleting an element set via the content attribute. - assert_equals(deletionParent.getAttribute("aria-activedescendant"), "content-attr-element"); - assert_equals(deletionParent.ariaActiveDescendantElement, descendant1); + assert_equals(deletionParent.getAttribute("aria-activedescendant"), "contentAttrElement"); + assert_equals(deletionParent.ariaActiveDescendantElement, contentAttrElement); - deletionParent.removeChild(descendant1); - assert_equals(deletionParent.getAttribute("aria-activedescendant"), "content-attr-element"); + deletionParent.removeChild(contentAttrElement); + assert_equals(deletionParent.getAttribute("aria-activedescendant"), "contentAttrElement"); assert_equals(deletionParent.ariaActiveDescendantElement, null); // Deleting an element set via the IDL attribute. - deletionParent.ariaActiveDescendantElement = descendant2; - assert_equals(deletionParent.getAttribute("aria-activedescendant"), "idl-attr-element"); + deletionParent.ariaActiveDescendantElement = idlAttrElement; + assert_equals(deletionParent.getAttribute("aria-activedescendant"), "idlAttrElement"); - deletionParent.removeChild(descendant2); + deletionParent.removeChild(idlAttrElement); assert_equals(deletionParent.ariaActiveDescendantElement, null); // The content attribute will still reflect the id. - assert_equals(deletionParent.getAttribute("aria-activedescendant"), "idl-attr-element"); + assert_equals(deletionParent.getAttribute("aria-activedescendant"), "idlAttrElement"); }, "Deleting a reflected element should return null for the IDL attribute and cause the content attribute to become stale."); </script> - <div id="parent" role="listbox" aria-activedescendant="original"> - <div role="option" id="original">Item 1</div> - <div role="option" id="element-with-persistant-id">Item 2</div> + <div id="parentNode" role="listbox" aria-activedescendant="changingIdElement"> + <div role="option" id="changingIdElement">Item 1</div> + <div role="option" id="persistantIDElement">Item 2</div> </div> <script> test(function(t) { - const parentNode = document.getElementById("parent"); - const changingIdElement = document.getElementById("original"); - const persistantIDElement = document.getElementById("element-with-persistant-id"); - + const changingIdElement = document.getElementById("changingIdElement"); assert_equals(parentNode.ariaActiveDescendantElement, changingIdElement); // Modify the id attribute. @@ -223,7 +199,7 @@ // The content attribute still reflects the old id, and we expect the // Element reference to be null as there is no DOM node with id "original" - assert_equals(parentNode.getAttribute("aria-activedescendant"), "original"); + assert_equals(parentNode.getAttribute("aria-activedescendant"), "changingIdElement"); assert_equals(parentNode.ariaActiveDescendantElement, null, "Element set via content attribute with a changed id will return null on getting"); parentNode.ariaActiveDescendantElement = changingIdElement; @@ -238,57 +214,48 @@ }, "Changing the ID of an element causes the content attribute to become out of sync."); </script> - <div id="light-parent" role="listbox"> - <div role="option" id="light-element">Hello world!</div> + <div id="lightParent" role="listbox"> + <div role="option" id="lightElement">Hello world!</div> </div> - <div id="shadowHost"></div> + <div id="shadowHostElement"></div> <script> test(function(t) { - const shadowElement = document.getElementById("shadowHost"); - const shadowHost = shadowElement.attachShadow({mode: "open"}); - const lightParent = document.getElementById("light-parent"); - const optionElement = document.getElementById("light-element"); + const lightElement = document.getElementById("lightElement"); + const shadowRoot = shadowHostElement.attachShadow({mode: "open"}); - lightParent.ariaActiveDescendantElement = optionElement; - assert_equals(lightParent.ariaActiveDescendantElement, optionElement); + lightParent.ariaActiveDescendantElement = lightElement; + assert_equals(lightParent.ariaActiveDescendantElement, lightElement); // Move the referenced element into shadow DOM. - shadowHost.appendChild(optionElement); + shadowRoot.appendChild(lightElement); assert_equals(lightParent.ariaActiveDescendantElement, null); - assert_equals(lightParent.getAttribute("aria-activedescendant"), "light-element"); + assert_equals(lightParent.getAttribute("aria-activedescendant"), "lightElement"); // Move the referenced element back into light DOM. - lightParent.appendChild(optionElement); - assert_equals(lightParent.ariaActiveDescendantElement, optionElement); + lightParent.appendChild(lightElement); + assert_equals(lightParent.ariaActiveDescendantElement, lightElement); }, "Reparenting an element into a descendant shadow scope nullifies the element reference."); </script> - <div id="myBillingId">Billing</div> - + <div id="billingElement">Billing</div> <div> - <div id="myNameId">Name</div> - <input type="text" id="input1" aria-labelledby="myBillingId myNameId"/> + <div id="nameElement">Name</div> + <input type="text" id="input1" aria-labelledby="billingElement nameElement"/> </div> <div> - <div id="myAddressId">Address</div> + <div id="addressElement">Address</div> <input type="text" id="input2"/> </div> <script> test(function(t) { - const billingElement = document.getElementById("myBillingId"); - const nameElement = document.getElementById("myNameId"); - const addressElement = document.getElementById("myAddressId"); - const input1 = document.getElementById("input1"); - const input2 = document.getElementById("input2"); - assert_array_equals(input1.ariaLabelledByElements, [billingElement, nameElement], "parsed content attribute sets element references."); assert_equals(input2.ariaLabelledByElements, null, "Testing empty content attribute after parsing."); input2.ariaLabelledByElements = [billingElement, addressElement]; assert_array_equals(input2.ariaLabelledByElements, [billingElement, addressElement], "Testing IDL setter/getter."); - assert_equals(input2.getAttribute("aria-labelledby"), "myBillingId myAddressId"); + assert_equals(input2.getAttribute("aria-labelledby"), "billingElement addressElement"); billingElement.remove(); assert_array_equals(input2.ariaLabelledByElements, [addressElement]); @@ -312,10 +279,6 @@ <script> test(function(t) { - const link1 = document.getElementById("link1"); - const link2 = document.getElementById("link2"); - const panel1 = document.getElementById("panel1"); - const panel2 = document.getElementById("panel2"); assert_array_equals(link1.ariaControlsElements, [panel1]); assert_equals(link2.ariaControlsElements, null); @@ -333,60 +296,56 @@ }, "aria-controls."); </script> - <a id="described-link" aria-describedby="description1 description2">Fruit</a> + <a id="describedLink" aria-describedby="description1 description2">Fruit</a> <div id="description1">Delicious</div> <div id="description2">Nutritious</div> <script> test(function(t) { - const link = document.getElementById("described-link"); - const description1 = document.getElementById("description1"); - const description2 = document.getElementById("description2"); - assert_array_equals(link.ariaDescribedByElements, [description1, description2]); + assert_array_equals(describedLink.ariaDescribedByElements, [description1, description2]); - link.ariaDescribedByElements = [description1, description2]; - assert_equals(link.getAttribute("aria-describedby"), "description1 description2"); + describedLink.ariaDescribedByElements = [description1, description2]; + assert_equals(describedLink.getAttribute("aria-describedby"), "description1 description2"); - link.ariaDescribedByElements = []; - assert_equals(link.getAttribute("aria-describedby"), ""); + describedLink.ariaDescribedByElements = []; + assert_equals(describedLink.getAttribute("aria-describedby"), ""); - link.setAttribute("aria-describedby", "description1"); - assert_array_equals(link.ariaDescribedByElements, [description1]); + describedLink.setAttribute("aria-describedby", "description1"); + assert_array_equals(describedLink.ariaDescribedByElements, [description1]); - link.removeAttribute("aria-describedby"); - assert_equals(link.ariaDescribedByElements, null); + describedLink.removeAttribute("aria-describedby"); + assert_equals(describedLink.ariaDescribedByElements, null); }, "aria-describedby."); </script> - <h2 id="title-heading" aria-flowto="article1 article2">Title</h2> + <h2 id="titleHeading" aria-flowto="article1 article2">Title</h2> <div>Next</div> <article id="article2">Content2</article> <article id="article1">Content1</article> <script> test(function(t) { - const heading = document.getElementById("title-heading"); const article1 = document.getElementById("article1"); const article2 = document.getElementById("article2"); - assert_array_equals(heading.ariaFlowToElements, [article1, article2]); + assert_array_equals(titleHeading.ariaFlowToElements, [article1, article2]); - heading.ariaFlowToElements = [article1, article2]; - assert_equals(heading.getAttribute("aria-flowto"), "article1 article2"); + titleHeading.ariaFlowToElements = [article1, article2]; + assert_equals(titleHeading.getAttribute("aria-flowto"), "article1 article2"); - heading.ariaFlowToElements = []; - assert_equals(heading.getAttribute("aria-flowto"), ""); + titleHeading.ariaFlowToElements = []; + assert_equals(titleHeading.getAttribute("aria-flowto"), ""); - heading.setAttribute("aria-flowto", "article1"); - assert_array_equals(heading.ariaFlowToElements, [article1]); + titleHeading.setAttribute("aria-flowto", "article1"); + assert_array_equals(titleHeading.ariaFlowToElements, [article1]); - heading.removeAttribute("aria-flowto"); - assert_equals(heading.ariaFlowToElements, null); + titleHeading.removeAttribute("aria-flowto"); + assert_equals(titleHeading.ariaFlowToElements, null); }, "aria-flowto."); </script> <ul> - <li id="li-owner" aria-owns="child1 child2">Parent</li> + <li id="listItemOwner" aria-owns="child1 child2">Parent</li> </ul> <ul> <li id="child1">Child 1</li> @@ -394,51 +353,41 @@ </ul> <script> test(function(t) { - const owner = document.getElementById("li-owner"); - const child1 = document.getElementById("child1"); - const child2 = document.getElementById("child2"); - - assert_array_equals(owner.ariaOwnsElements, [child1, child2]); + assert_array_equals(listItemOwner.ariaOwnsElements, [child1, child2]); - owner.removeAttribute("aria-owns"); - assert_equals(owner.ariaOwnsElements, null); + listItemOwner.removeAttribute("aria-owns"); + assert_equals(listItemOwner.ariaOwnsElements, null); - owner.ariaOwnsElements = [child1, child2]; - assert_equals(owner.getAttribute("aria-owns"), "child1 child2"); + listItemOwner.ariaOwnsElements = [child1, child2]; + assert_equals(listItemOwner.getAttribute("aria-owns"), "child1 child2"); - owner.ariaOwnsElements = []; - assert_equals(owner.getAttribute("aria-owns"), ""); + listItemOwner.ariaOwnsElements = []; + assert_equals(listItemOwner.getAttribute("aria-owns"), ""); - owner.setAttribute("aria-owns", "child1"); - assert_array_equals(owner.ariaOwnsElements, [child1]); + listItemOwner.setAttribute("aria-owns", "child1"); + assert_array_equals(listItemOwner.ariaOwnsElements, [child1]); }, "aria-owns."); </script> - <div id="light-dom-container"> - <h2 id="light-dom-heading" aria-flowto="shadow-child-1 shadow-child-2">Light DOM Heading</h2> - <div id="shadow-dom-host"></div> - <p id="light-dom-text-1">Light DOM text</p> - <p id="light-dom-text-2">Light DOM text</p> + <div id="lightDomContainer"> + <h2 id="lightDomHeading" aria-flowto="shadowChild1 shadowChild2">Light DOM Heading</h2> + <div id="host"></div> + <p id="lightDomText1">Light DOM text</p> + <p id="lightDomText2">Light DOM text</p> </div> <script> test(function(t) { - const shadowHost = document.getElementById("shadow-dom-host"); - const lightDomHeading = document.getElementById("light-dom-heading"); - const lightDomText1 = document.getElementById("light-dom-text-1"); - const lightDomText2 = document.getElementById("light-dom-text-2"); - - const shadowRoot = shadowHost.attachShadow({mode: "open"}); + const shadowRoot = host.attachShadow({mode: "open"}); const shadowChild1 = document.createElement("article"); - shadowChild1.setAttribute("id", "shadow-child-1"); + shadowChild1.setAttribute("id", "shadowChild1"); shadowRoot.appendChild(shadowChild1); const shadowChild2 = document.createElement("article"); - shadowChild2.setAttribute("id", "shadow-child-1"); + shadowChild2.setAttribute("id", "shadowChild1"); shadowRoot.appendChild(shadowChild2); // The elements in the content attribute are in a "darker" tree - they - // enter a shadow encapsulation boundary, so should reflect null for - // the content attribute. + // enter a shadow encapsulation boundary, so not be associated any more. assert_equals(lightDomHeading.ariaFlowToElements, null); // These elements are in a shadow including ancestor, i.e "lighter" tree. @@ -448,14 +397,14 @@ // These IDs belong to a different scope, so the attr-associated-element // cannot be computed. - shadowChild2.setAttribute("aria-flowto", "light-dom-text-1 light-dom-text-2"); + shadowChild2.setAttribute("aria-flowto", "lightDomText1 lightDomText2"); assert_equals(shadowChild2.ariaFlowToElements, null); // Elements that cross into shadow DOM are dropped, only reflect the valid // elements in IDL and in the content attribute. lightDomHeading.ariaFlowToElements = [shadowChild1, shadowChild2, lightDomText1, lightDomText2]; assert_array_equals(lightDomHeading.ariaFlowToElements, [lightDomText1, lightDomText2]); - assert_equals(lightDomHeading.getAttribute("aria-flowto"), "light-dom-text-1 light-dom-text-2", "empty content attribute if any given elements cross shadow boundaries"); + assert_equals(lightDomHeading.getAttribute("aria-flowto"), "lightDomText1 lightDomText2", "empty content attribute if any given elements cross shadow boundaries"); // Using a mixture of elements in the same scope and in a shadow including // ancestor should set the IDL attribute, but should reflect the empty @@ -466,4 +415,124 @@ }, "shadow DOM behaviour for FrozenArray element reflection."); </script> + + <div id="describedButtonContainer"> + <div id="buttonDescription1">Delicious</div> + <div id="buttonDescription2">Nutritious</div> + <div id="outerShadowHost"></div> + </div> + + <script> + test(function(t) { + const description1 = document.getElementById("buttonDescription1"); + const description2 = document.getElementById("buttonDescription2"); + const outerShadowRoot = outerShadowHost.attachShadow({mode: "open"}); + const innerShadowHost = document.createElement("div"); + outerShadowRoot.appendChild(innerShadowHost); + const innerShadowRoot = innerShadowHost.attachShadow({mode: "open"}); + + // Create an element, add some attr associated light DOM elements and append it to the outer shadow root. + const describedElement = document.createElement("button"); + describedButtonContainer.appendChild(describedElement); + describedElement.ariaDescribedByElements = [description1, description2]; + + // All elements were in the same scope, so elements are gettable and the content attribute reflects the ids. + assert_array_equals(describedElement.ariaDescribedByElements, [description1, description2]); + assert_equals(describedElement.getAttribute("aria-describedby"), "buttonDescription1 buttonDescription2"); + + outerShadowRoot.appendChild(describedElement); + + // Explicitly set attr-associated-elements should still be gettable because we are referencing elements in a lighter scope. + // The content attr still reflects the ids from the explicit elements because they were in a valid scope at the time of setting. + assert_array_equals(describedElement.ariaDescribedByElements, [description1, description2]); + assert_equals(describedElement.getAttribute("aria-describedby"), "buttonDescription1 buttonDescription2"); + + // Move the explicitly set elements into a deeper shadow DOM to test the relationship should not be gettable. + innerShadowRoot.appendChild(description1); + innerShadowRoot.appendChild(description2); + + // Explicitly set elements are still present, but are not retrieved. + // content attribute is still stale because all elements were in a valid scope when they were set. + assert_array_equals(describedElement.ariaDescribedByElements, []); + assert_equals(describedElement.getAttribute("aria-describedby"), "buttonDescription1 buttonDescription2"); + + // Move into the same shadow scope as the explicitly set elements to test that the elements are gettable + // and reflect the correct IDs onto the content attribute. + innerShadowRoot.appendChild(describedElement); + assert_array_equals(describedElement.ariaDescribedByElements, [description1, description2]); + assert_equals(describedElement.getAttribute("aria-describedby"), "buttonDescription1 buttonDescription2"); + }, "Moving explicitly set elements across shadow DOM boundaries."); + </script> + + <div id="sameScopeContainer"> + <div id="headingLabel1">Wonderful</div> + <div id="headingLabel2">Fantastic</div> + + <div id="headingShadowHost"></div> + </div> + + <script> + test(function(t) { + const shadowRoot = headingShadowHost.attachShadow({mode: "open"}); + const headingElement = document.createElement("h1"); + const headingLabel1 = document.getElementById("headingLabel1") + const headingLabel2 = document.getElementById("headingLabel2") + shadowRoot.appendChild(headingElement); + + // Explicitly set elements are in a lighter shadow DOM, so that's ok. + headingElement.ariaLabelledByElements = [headingLabel1, headingLabel2]; + assert_array_equals(headingElement.ariaLabelledByElements, [headingLabel1, headingLabel2], "Lighter elements are gettable when explicitly set."); + assert_equals(headingElement.getAttribute("aria-labelledby"), "", "Crosses shadow DOM boundary, so content attribute should be empty string."); + + // Move into Light DOM, explicitly set elements should still be gettable. + // Note that the content attribute still reflects the element ids - when scope changes it becomes stale. + sameScopeContainer.appendChild(headingElement); + assert_array_equals(headingElement.ariaLabelledByElements, [headingLabel1, headingLabel2], "Elements are all in same scope, so gettable."); + assert_equals(headingElement.getAttribute("aria-labelledby"), "", "Content attribute is empty, as on setting the explicitly set elements they were in a different scope."); + + // Reset the association, to update the content attribute. + headingElement.ariaLabelledByElements = [headingLabel1, headingLabel2]; + assert_equals(headingElement.getAttribute("aria-labelledby"), "headingLabel1 headingLabel2", "Elements are set again, so the content attribute is updated."); + + // Remove the referring element from the DOM, elements are not gettable. + // This behaviour is still under discussion. + headingElement.remove(); + assert_array_equals(headingElement.ariaLabelledByElements, [], "Element is no longer in the document, so references should not be gettable."); + assert_equals(headingElement.getAttribute("aria-labelledby"), "headingLabel1 headingLabel2"); + + // Insert it back in. + sameScopeContainer.appendChild(headingElement); + assert_array_equals(headingElement.ariaLabelledByElements, [headingLabel1, headingLabel2]); + assert_equals(headingElement.getAttribute("aria-labelledby"), "headingLabel1 headingLabel2"); + + // Remove everything from the DOM, nothing should be gettable. + headingLabel1.remove(); + headingLabel2.remove(); + assert_array_equals(headingElement.ariaLabelledByElements, []); + assert_equals(headingElement.getAttribute("aria-labelledby"), "headingLabel1 headingLabel2"); + assert_equals(document.getElementById("headingLabel1"), null); + assert_equals(document.getElementById("headingLabel2"), null); + + // Reset the association to update the content attribute. + headingElement.ariaLabelledByElements = [headingLabel1, headingLabel2]; + assert_array_equals(headingElement.ariaLabelledByElements, []); + assert_equals(headingElement.getAttribute("aria-labelledby"), ""); + }, "Moving explicitly set elements around within the same scope, and removing from the DOM."); + </script> + + <input id="input"> + <optgroup> + <option id="first">First option</option> + <option id="second">Second option</option> + </optgroup> + + <script> + test(function(t) { + input.ariaActiveDescendantElement = first; + first.parentElement.appendChild(first); + + // This behaviour is currently under discussion by WHATWG. + // See: https://github.com/whatwg/html/pull/3917#issuecomment-527263562 + assert_equals(input.ariaActiveDescendantElement, first); + }, "Reparenting."); </html> diff --git a/tests/wpt/web-platform-tests/fetch/api/request/destination/fetch-destination-frame.https.html b/tests/wpt/web-platform-tests/fetch/api/request/destination/fetch-destination-frame.https.html new file mode 100644 index 00000000000..f3f9f7856d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/request/destination/fetch-destination-frame.https.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<title>Fetch destination tests for resources with no load event</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> +<script> +let frame; +const kScope = 'resources/dummy.html?dest=frame'; + +// Set up the service worker and the frame. +promise_test(t => { + const kScript = 'resources/fetch-destination-worker-frame.js'; + return service_worker_unregister_and_register(t, kScript, kScope) + .then(registration => { + add_completion_callback(() => { + registration.unregister(); + }); + + return wait_for_state(t, registration.installing, 'activated'); + }); + }, 'Initialize global state'); + +var waitOnMessageFromSW = async t => { + await new Promise((resolve, reject) => { + navigator.serviceWorker.onmessage = t.step_func(event => { + if (event.data == "PASS") { + resolve(); + } else { + reject(); + } + }); + }).catch(() => {; + assert_unreached("Wrong destination."); + }); + t.add_cleanup(() => { frame.contentWindow.navigator.serviceWorker.onmessage = null; }); +} + +// Document destination +/////////////////////// +promise_test(async t => { + var f = document.createElement('frame'); + frame = f; + f.className = 'test-frame'; + f.src = kScope; + document.body.appendChild(f); + await waitOnMessageFromSW(t); + add_completion_callback(() => { f.remove(); }); +}, 'frame fetches with a "frame" Request.destination'); + +</script> diff --git a/tests/wpt/web-platform-tests/fetch/api/request/destination/fetch-destination-iframe.https.html b/tests/wpt/web-platform-tests/fetch/api/request/destination/fetch-destination-iframe.https.html index cb1e9d87cd5..1aa5a5613b1 100644 --- a/tests/wpt/web-platform-tests/fetch/api/request/destination/fetch-destination-iframe.https.html +++ b/tests/wpt/web-platform-tests/fetch/api/request/destination/fetch-destination-iframe.https.html @@ -6,7 +6,7 @@ <script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> <script> let frame; -const kScope = 'resources/dummy.html?dest=document'; +const kScope = 'resources/dummy.html?dest=iframe'; // Set up the service worker and the frame. promise_test(t => { @@ -46,6 +46,6 @@ promise_test(async t => { document.body.appendChild(f); await waitOnMessageFromSW(t); add_completion_callback(() => { f.remove(); }); -}, 'iframe fetches with a "document" Request.destination'); +}, 'iframe fetches with a "iframe" Request.destination'); </script> diff --git a/tests/wpt/web-platform-tests/fetch/api/request/destination/resources/fetch-destination-worker-frame.js b/tests/wpt/web-platform-tests/fetch/api/request/destination/resources/fetch-destination-worker-frame.js new file mode 100644 index 00000000000..b69de0b7df9 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/request/destination/resources/fetch-destination-worker-frame.js @@ -0,0 +1,20 @@ +self.addEventListener('fetch', function(event) { + if (event.request.url.includes('dummy')) { + event.waitUntil(async function() { + let destination = new URL(event.request.url).searchParams.get("dest"); + let clients = await self.clients.matchAll({"includeUncontrolled": true}); + clients.forEach(function(client) { + if (client.url.includes("fetch-destination-frame")) { + if (event.request.destination == destination) { + client.postMessage("PASS"); + } else { + client.postMessage("FAIL"); + } + } + }) + }()); + } + event.respondWith(fetch(event.request)); +}); + + diff --git a/tests/wpt/web-platform-tests/fetch/api/response/response-consume.html b/tests/wpt/web-platform-tests/fetch/api/response/response-consume.html index 4946a4d33a4..7a9c6505d80 100644 --- a/tests/wpt/web-platform-tests/fetch/api/response/response-consume.html +++ b/tests/wpt/web-platform-tests/fetch/api/response/response-consume.html @@ -167,11 +167,22 @@ var urlSearchParamsBlob = new Blob([urlSearchParamsData], { "type": urlSearchParamsType }); formData.append("name", textData); + // https://fetch.spec.whatwg.org/#concept-body-package-data + // "UTF-8 decoded without BOM" is used for formData(), either in + // "multipart/form-data" and "application/x-www-form-urlencoded" cases, + // so BOMs in the values should be kept. + // (The "application/x-www-form-urlencoded" cases are tested in + // url/urlencoded-parser.any.js) + var textDataWithBom = "\uFEFFquick\uFEFFfox\uFEFF"; + var formTextDataWithBom = stringToMultipartFormTextData(multipartBoundary, "name", textDataWithBom); + var formTextDataWithBomExpectedForMultipartFormData = stringToMultipartFormTextData(multipartBoundary, "name", textDataWithBom); + checkResponseBody(responsePromise(textData, textResponseInit), textData, checkBodyText, "from text to text"); checkResponseBody(responsePromise(textData, textResponseInit), textData, checkBodyBlob, "from text to blob"); checkResponseBody(responsePromise(textData, textResponseInit), textData, checkBodyArrayBuffer, "from text to arrayBuffer"); checkResponseBody(responsePromise(textData, textResponseInit), textData, checkBodyJSON, "from text to json"); checkResponseBody(responsePromise(formTextData, formTextResponseInit), formTextData, checkBodyFormDataMultipart, "from text with correct multipart type to formData"); + checkResponseBody(responsePromise(formTextDataWithBom, formTextResponseInit), formTextDataWithBomExpectedForMultipartFormData, checkBodyFormDataMultipart, "from text with correct multipart type to formData with BOM"); checkResponseBody(responsePromise(formTextData, textResponseInit), undefined, checkBodyFormDataError, "from text without correct multipart type to formData (error case)"); checkResponseBody(responsePromise(urlSearchParamsData, urlSearchParamsResponseInit), urlSearchParamsData, checkBodyFormDataUrlencoded, "from text with correct urlencoded type to formData"); checkResponseBody(responsePromise(urlSearchParamsData, textResponseInit), undefined, checkBodyFormDataError, "from text without correct urlencoded type to formData (error case)"); diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep.https.html index 1c04ed30dd7..64994cdfb76 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep.https.html +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep.https.html @@ -40,4 +40,8 @@ coop_coep_test(t, SAME_SITE, variant.coop, variant.coep, `same-site-${variant.title.replace(/ /g,"-")}`, false); }, `Same-site ${variant.title}`); }); + +test(() => { + assert_true(window.crossOriginIsolated); +}, "Bonus: window.crossOriginIsolated"); </script> diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/no-https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/no-https.html index da9efdce777..014ba1f333b 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/no-https.html +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/no-https.html @@ -15,4 +15,8 @@ async_test(t => { t.done(); }, 500); }, "Cross-Origin-Opener-Policy only works over secure contexts"); + +test(() => { + assert_false(window.crossOriginIsolated); +}, "Bonus: window.crossOriginIsolated"); </script> diff --git a/tests/wpt/web-platform-tests/html/dom/usvstring-reflection.html b/tests/wpt/web-platform-tests/html/dom/usvstring-reflection.https.html index b9cafd1fb35..b9cafd1fb35 100644 --- a/tests/wpt/web-platform-tests/html/dom/usvstring-reflection.html +++ b/tests/wpt/web-platform-tests/html/dom/usvstring-reflection.https.html diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js index 96276d74704..a755865911d 100644 --- a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js @@ -16,3 +16,7 @@ if (self.GLOBAL.isWindow()) { assert_throws("DataCloneError", () => self.postMessage(sab)); }, "SharedArrayBuffer over postMessage() without COOP+COEP"); } + +test(() => { + assert_false(self.crossOriginIsolated); +}, "Bonus: self.crossOriginIsolated"); diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-worker-success.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-worker-success.js index 9befc9006e7..ffc3708acb7 100644 --- a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-worker-success.js +++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-worker-success.js @@ -7,4 +7,8 @@ promise_test(t => { return testSharingViaIncrementerScript(t, worker, "parent worker", worker, "sub-worker"); }, "postMessaging to a dedicated sub-worker allows them to see each others' modifications"); +test(() => { + assert_true(self.crossOriginIsolated); +}, "Bonus: self.crossOriginIsolated"); + done(); diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html index 397c95a2391..0bd9f9b2295 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/srcdoc_process_attributes.html @@ -20,7 +20,7 @@ async_test(function(t) { assert_equals(iframe.contentDocument.body.textContent, "src"); iframe.onload = t.step_func_done(function() { - assert_false(isAdded); + assert_true(isAdded); assert_equals(iframe.contentDocument.location.href, "about:srcdoc"); assert_equals(iframe.contentDocument.body.textContent, "srcdoc"); }); @@ -41,7 +41,7 @@ async_test(function(t) { assert_equals(iframe.contentDocument.body.textContent, "old"); iframe.onload = t.step_func_done(function() { - assert_false(isChanged); + assert_true(isChanged); assert_equals(iframe.contentDocument.location.href, "about:srcdoc"); assert_equals(iframe.contentDocument.body.textContent, "new"); }); @@ -51,7 +51,7 @@ async_test(function(t) { }); document.body.appendChild(iframe); -}, "Changing `srcdoc` (via property) triggers attributes processing"); +}, "Setting `srcdoc` (via property) triggers attributes processing"); async_test(function(t) { var iframe = createIFrameWithBlobSrc(); @@ -62,7 +62,7 @@ async_test(function(t) { assert_equals(iframe.contentDocument.body.textContent, "srcdoc"); iframe.onload = t.step_func_done(function() { - assert_false(isRemoved); + assert_true(isRemoved); assert_equals(iframe.contentDocument.location.protocol, "blob:"); assert_equals(iframe.contentDocument.body.textContent, "src"); }); diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html new file mode 100644 index 00000000000..894efd59dc2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-just-once.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/interaction/focus/the-autofocus-attribute/resources/utils.js"></script> +<body> +<dialog> +<input> +<input autofocus> +</dialog> +<script> +// https://github.com/whatwg/html/issues/4788 +promise_test(async () => { + const dialog = document.querySelector('dialog'); + dialog.show(); + assert_equals(document.activeElement, dialog.querySelector('[autofocus]'), + 'dialog.show() should set focus on a descendant element with an ' + + 'autofocus attribute.'); + document.activeElement.blur(); + await waitUntilStableAutofocusState(); + assert_equals(document.activeElement, document.body, + 'Non-dialog autofocus processing should be skipped.'); +}, 'An autofocus element in a dialog element should not try to get focus twice.'); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html new file mode 100644 index 00000000000..2e8563f761d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-focusing-steps-prevent-autofocus.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/interaction/focus/the-autofocus-attribute/resources/utils.js"></script> +<body> +<dialog></dialog> +<script> +// https://github.com/whatwg/html/issues/4788 +promise_test(async () => { + const dialog = document.querySelector('dialog'); + dialog.show(); + dialog.close(); + const input = document.createElement('input'); + input.autofocus = true; + document.body.insertBefore(input, dialog); + await waitUntilStableAutofocusState(); + assert_equals(document.activeElement, document.body, + 'Non-dialog autofocus processing should be skipped.'); +}, 'After showing a dialog, non-dialog autofocus processing won\'t work.'); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/html/webappapis/the-windoworworkerglobalscope-mixin/README.md b/tests/wpt/web-platform-tests/html/webappapis/the-windoworworkerglobalscope-mixin/README.md new file mode 100644 index 00000000000..10ae3e5f036 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/the-windoworworkerglobalscope-mixin/README.md @@ -0,0 +1 @@ +`self.crossOriginIsolated` is tested in `html/cross-origin-opener-policy/coep.https.html`, `html/cross-origin-opener-policy/no-https.html`, `html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js`, and `html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-worker-success.js`. diff --git a/tests/wpt/web-platform-tests/import-maps/builtin-support.tentative/static-import.js b/tests/wpt/web-platform-tests/import-maps/builtin-support.tentative/static-import.js deleted file mode 100644 index 1686fc123a7..00000000000 --- a/tests/wpt/web-platform-tests/import-maps/builtin-support.tentative/static-import.js +++ /dev/null @@ -1 +0,0 @@ -import "{{GET[url]}}"; diff --git a/tests/wpt/web-platform-tests/import-maps/builtin-support.tentative/static-import.py b/tests/wpt/web-platform-tests/import-maps/builtin-support.tentative/static-import.py new file mode 100644 index 00000000000..8d0f5d9f420 --- /dev/null +++ b/tests/wpt/web-platform-tests/import-maps/builtin-support.tentative/static-import.py @@ -0,0 +1,5 @@ +def main(request, response): + return ( + (('Content-Type', 'text/javascript'),), + 'import "{}";\n'.format(request.GET.first('url')) + ) diff --git a/tests/wpt/web-platform-tests/import-maps/core/static-import.js b/tests/wpt/web-platform-tests/import-maps/core/static-import.js deleted file mode 100644 index 1686fc123a7..00000000000 --- a/tests/wpt/web-platform-tests/import-maps/core/static-import.js +++ /dev/null @@ -1 +0,0 @@ -import "{{GET[url]}}"; diff --git a/tests/wpt/web-platform-tests/import-maps/core/static-import.py b/tests/wpt/web-platform-tests/import-maps/core/static-import.py new file mode 100644 index 00000000000..8d0f5d9f420 --- /dev/null +++ b/tests/wpt/web-platform-tests/import-maps/core/static-import.py @@ -0,0 +1,5 @@ +def main(request, response): + return ( + (('Content-Type', 'text/javascript'),), + 'import "{}";\n'.format(request.GET.first('url')) + ) diff --git a/tests/wpt/web-platform-tests/import-maps/resources/test-helper.js b/tests/wpt/web-platform-tests/import-maps/resources/test-helper.js index f21ad935baa..3cb278b7989 100644 --- a/tests/wpt/web-platform-tests/import-maps/resources/test-helper.js +++ b/tests/wpt/web-platform-tests/import-maps/resources/test-helper.js @@ -153,7 +153,7 @@ function testStaticImport(importMapString, importMapBaseURL, specifier, expected const script = document.createElement("script"); script.setAttribute("type", "module"); script.setAttribute("src", - "static-import.js?pipe=sub(none)&url=" + + "static-import.py?url=" + encodeURIComponent("${specifier}")); script.addEventListener("load", handlers[Handler.ScriptLoadEvent]); script.addEventListener("error", handlers[Handler.ScriptErrorEvent]); diff --git a/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-in-promise.html b/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-in-promise.html new file mode 100644 index 00000000000..b2a32facad0 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-in-promise.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Precondition in promise</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +new Promise(() => { + assert_precondition(false); +}); +</script> diff --git a/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-in-setup.html b/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-in-setup.html new file mode 100644 index 00000000000..071f140afb6 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-in-setup.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Precondition in setup</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +setup(() => { + assert_precondition(false); +}); +</script> diff --git a/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-without-setup.html b/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-without-setup.html new file mode 100644 index 00000000000..12188dbdaeb --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition-without-setup.html @@ -0,0 +1,8 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Precondition without wrapping setup</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +assert_precondition(false); +</script> diff --git a/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition.html b/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition.html new file mode 100644 index 00000000000..2e6ddc1d02c --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/expected-fail/precondition.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Preconditions in tests</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_precondition(false, 'precondition 1'); +}, 'test'); + +async_test((t) => { + assert_precondition(false, 'precondition 2'); + t.done(); +}, 'async_test immediate'); + +async_test((t) => { + t.step_timeout(() => { + assert_precondition(false, 'precondition 3'); + t.done(); + }, 100); +}, 'async_test after timeout'); + +promise_test(async () => { + assert_precondition(false, 'precondition 4'); +}, 'promise_test immediate'); + +promise_test(async () => { + await Promise.resolve(); + assert_precondition(false, 'precondition 5'); +}, 'promise_test after await'); +</script> diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-in-promise.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-in-promise.html.ini new file mode 100644 index 00000000000..7210f8dcfe6 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-in-promise.html.ini @@ -0,0 +1,2 @@ +[precondition-in-promise.html] + expected: PRECONDITION_FAILED diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-in-setup.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-in-setup.html.ini new file mode 100644 index 00000000000..a33ebafe650 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-in-setup.html.ini @@ -0,0 +1,2 @@ +[precondition-in-setup.html] + expected: PRECONDITION_FAILED diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-without-setup.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-without-setup.html.ini new file mode 100644 index 00000000000..406db30a095 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition-without-setup.html.ini @@ -0,0 +1,2 @@ +[precondition-without-setup.html] + expected: PRECONDITION_FAILED diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition.html.ini new file mode 100644 index 00000000000..91544eba4c4 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/precondition.html.ini @@ -0,0 +1,15 @@ +[precondition.html] + [test] + expected: PRECONDITION_FAILED + + [async_test immediate] + expected: PRECONDITION_FAILED + + [async_test after timeout] + expected: PRECONDITION_FAILED + + [promise_test immediate] + expected: PRECONDITION_FAILED + + [promise_test after await] + expected: PRECONDITION_FAILED diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini index 0bcdd374f25..40a58e4153e 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/expected-fail/uncaught-exception.html.ini @@ -1,4 +1,2 @@ [uncaught-exception.html] - [Uncaught exception] - expected: FAIL - + expected: ERROR 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 index 39773dfe714..da4fe27e589 100644 --- 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 @@ -1,4 +1,2 @@ [unhandled-rejection.html] - [Unhandled rejection] - expected: FAIL - + expected: ERROR diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini index c3431d687b6..ca095a18785 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini @@ -1,7 +1,6 @@ [context.any.sharedworker.html] - [context] - expected: - if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850 + expected: + if product == "safari" or product == "epiphany" or product == "webkit": ERROR # https://bugs.webkit.org/show_bug.cgi?id=149850 [context.any.serviceworker.html] [context] diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini index 8db9536e38c..23387657b41 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini @@ -1,6 +1,5 @@ [order-of-metas.any.sharedworker.html] - [foo] - expected: - if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850 + expected: + if product == "safari" or product == "epiphany" or product == "webkit": ERROR # https://bugs.webkit.org/show_bug.cgi?id=149850 diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini index 5f5ed991cf1..5b24c9429dc 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini @@ -1,7 +1,6 @@ [secure-context.https.any.sharedworker.html] - [secure-context] - expected: - if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850 + expected: + if product == "safari" or product == "epiphany" or product == "webkit": ERROR # https://bugs.webkit.org/show_bug.cgi?id=149850 [secure-context.https.any.serviceworker.html] [secure-context] diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini index e2a7b5578c3..8cbb5f76493 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini @@ -1,6 +1,5 @@ [title.any.sharedworker.html] - [foobar] - expected: - if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850 + expected: + if product == "safari" or product == "epiphany" or product == "webkit": ERROR # https://bugs.webkit.org/show_bug.cgi?id=149850 diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiTouchPoints.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiTouchPoints.html.ini new file mode 100644 index 00000000000..c7b3482c786 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiTouchPoints.html.ini @@ -0,0 +1,3 @@ +[multiTouchPoints.html] + expected: + if product == "firefox" or product == "safari" or product == "epiphany" or product == "webkit": ERROR diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/virtual_authenticator.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/virtual_authenticator.html.ini new file mode 100644 index 00000000000..88c9bbd4799 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/virtual_authenticator.html.ini @@ -0,0 +1,3 @@ +[virtual_authenticator.html] + expected: + if product == "firefox" or product == "safari" or product == "epiphany" or product == "webkit": ERROR diff --git a/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/multiTouchPoints.html b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/multiTouchPoints.html new file mode 100644 index 00000000000..c8169733306 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/multiTouchPoints.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>TestDriver actions: two touch points with one moving one pause</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<style> +div#test1{ + position: fixed; + top: 0; + left: 0; + width: 100px; + height: 100px; + background-color: blue; +} + +</style> + +<div id="test1"> +</div> + +<script> +let event_type = []; +let event_id = []; + +async_test(t => { + let test1 = document.getElementById("test1"); + document.getElementById("test1").addEventListener("pointerdown", + e => {event_type.push(e.type); event_id.push(e.pointerId);}); + document.getElementById("test1").addEventListener("pointerup", + e => {event_type.push(e.type); event_id.push(e.pointerId);}); + document.getElementById("test1").addEventListener("pointermove", + e => {event_type.push(e.type); event_id.push(e.pointerId);}); + + let actions = new test_driver.Actions() + .addPointer("touchPointer1", "touch") + .addPointer("touchPointer2", "touch") + .pointerMove(0, 0, {origin: test1, sourceName: "touchPointer1"}) + .pointerMove(10, 0, {origin: test1, sourceName: "touchPointer2"}) + .pointerDown({sourceName: "touchPointer1"}) + .pointerDown({sourceName: "touchPointer2"}) + .pointerMove(0, 10, {origin: test1, sourceName: "touchPointer1"}) + .pointerUp({sourceName: "touchPointer1"}) + .pointerUp({sourceName: "touchPointer2"}); + + actions.send() + .then(t.step_func_done(() => {assert_array_equals(event_type, ["pointerdown", "pointerdown", "pointermove", "pointerup", "pointerup"]); + assert_array_equals(event_id, [2, 3, 2, 2, 3]);})) + .catch(e => t.step_func(() => assert_unreached("Actions sequence failed " + e))); +}); +</script> diff --git a/tests/wpt/web-platform-tests/infrastructure/testdriver/virtual_authenticator.html b/tests/wpt/web-platform-tests/infrastructure/testdriver/virtual_authenticator.html new file mode 100644 index 00000000000..339e42665c7 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/testdriver/virtual_authenticator.html @@ -0,0 +1,81 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>TestDriver virtual authenticator methods</title> +<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> +"use strict"; + +// The example attestation private key from the U2F spec at +// https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-raw-message-formats-v1.2-ps-20170411.html#registration-example +// PKCS.8 encoded without encryption, as a base64url string. +const private_key = + "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8_zMDQDYAxlU-Q" + + "hk1Dwkf0v18GZca1DMF3SaJ9HPdmShRANCAASNYX5lyVCOZLzFZzrIKmeZ2jwU" + + "RmgsJYxGP__fWN_S-j5sN4tT15XEpN_7QZnt14YvI6uvAgO0uJEboFaZlOEB"; +let credential_id = btoa("cred-1"); +let credential = { + credentialId: credential_id, + rpId: window.location.hostname, + privateKey: private_key, + signCount: 0, + isResidentCredential: false, +}; + +let authenticator_id; + +promise_test(async t => { + authenticator_id = await test_driver.add_virtual_authenticator({ + protocol: "ctap1/u2f", + transport: "usb", + }); +}, "Can create an authenticator"); + +promise_test(async t => { + return test_driver.add_credential(authenticator_id, credential); +}, "Can add a credential"); + +promise_test(async t => { + let credentials = await test_driver.get_credentials(authenticator_id); + assert_equals(credentials.length, 1); + // The U2F REGISTER operation stores the hash of the rpId, so the rpId + // itself may not be available on the returned credential. + assert_equals(credentials[0].credentialId, credential.credentialId); + assert_equals(credentials[0].privateKey, credential.privateKey); + assert_equals(credentials[0].signCount, credential.signCount); + assert_equals(credentials[0].isResidentCredential, + credential.isResidentCredential); +}, "Can get the credentials"); + +promise_test(async t => { + await test_driver.remove_credential(authenticator_id, credential_id); + let credentials = await test_driver.get_credentials(authenticator_id); + assert_equals(credentials.length, 0); +}, "Can remove a credential"); + +promise_test(async t => { + let credential1 = credential; + let credential2 = + Object.assign({}, credential, {credentialId: btoa("cred-2")}); + await test_driver.add_credential(authenticator_id, credential1); + await test_driver.add_credential(authenticator_id, credential2); + + let credentials = await test_driver.get_credentials(authenticator_id); + assert_equals(credentials.length, 2); + + await test_driver.remove_all_credentials(authenticator_id); + credentials = await test_driver.get_credentials(authenticator_id); + assert_equals(credentials.length, 0); +}, "Can remove all credentials"); + +promise_test(async t => { + await test_driver.set_user_verified(authenticator_id, {isUserVerified: true}); + await test_driver.set_user_verified(authenticator_id, {isUserVerified: false}); +}, "Can set user verified"); + +promise_test(async t => { + await test_driver.remove_virtual_authenticator(authenticator_id); +}, "Can remove a virtual authenticator"); +</script> diff --git a/tests/wpt/web-platform-tests/interfaces/appmanifest.idl b/tests/wpt/web-platform-tests/interfaces/appmanifest.idl index 4a6425829f2..b3a303652f5 100644 --- a/tests/wpt/web-platform-tests/interfaces/appmanifest.idl +++ b/tests/wpt/web-platform-tests/interfaces/appmanifest.idl @@ -42,6 +42,7 @@ dictionary WebAppManifest { ServiceWorkerRegistrationObject serviceworker; sequence<ExternalApplicationResource> related_applications; boolean prefer_related_applications = "false"; + sequence<ShortcutItem> shortcuts; }; enum TextDirectionType { "ltr", "rtl", "auto" }; @@ -61,6 +62,14 @@ dictionary ImageResource { USVString platform; }; +dictionary ShortcutItem { + required USVString name; + USVString short_name; + USVString description; + required USVString url; + sequence<ImageResource> icons; +}; + dictionary ServiceWorkerRegistrationObject { required USVString src; USVString scope; diff --git a/tests/wpt/web-platform-tests/interfaces/fetch.idl b/tests/wpt/web-platform-tests/interfaces/fetch.idl index eacc69d8b9d..9ff4aab4b14 100644 --- a/tests/wpt/web-platform-tests/interfaces/fetch.idl +++ b/tests/wpt/web-platform-tests/interfaces/fetch.idl @@ -70,7 +70,7 @@ dictionary RequestInit { any window; // can only be set to null }; -enum RequestDestination { "", "audio", "audioworklet", "document", "embed", "font", "image", "manifest", "object", "paintworklet", "report", "script", "sharedworker", "style", "track", "video", "worker", "xslt" }; +enum RequestDestination { "", "audio", "audioworklet", "document", "embed", "font", "frame", "iframe", "image", "manifest", "object", "paintworklet", "report", "script", "sharedworker", "style", "track", "video", "worker", "xslt" }; 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" }; diff --git a/tests/wpt/web-platform-tests/interfaces/picture-in-picture.idl b/tests/wpt/web-platform-tests/interfaces/picture-in-picture.idl index 3323fc1f099..3d3bad08219 100644 --- a/tests/wpt/web-platform-tests/interfaces/picture-in-picture.idl +++ b/tests/wpt/web-platform-tests/interfaces/picture-in-picture.idl @@ -31,11 +31,9 @@ interface PictureInPictureWindow : EventTarget { attribute EventHandler onresize; }; -[ - Constructor(DOMString type, EnterPictureInPictureEventInit eventInitDict), - Exposed=Window -] +[Exposed=Window] interface EnterPictureInPictureEvent : Event { + constructor(DOMString type, EnterPictureInPictureEventInit eventInitDict); [SameObject] readonly attribute PictureInPictureWindow pictureInPictureWindow; }; diff --git a/tests/wpt/web-platform-tests/interfaces/resize-observer.idl b/tests/wpt/web-platform-tests/interfaces/resize-observer.idl index d96a348a721..8018fc4b22b 100644 --- a/tests/wpt/web-platform-tests/interfaces/resize-observer.idl +++ b/tests/wpt/web-platform-tests/interfaces/resize-observer.idl @@ -4,7 +4,7 @@ // Source: Resize Observer (https://drafts.csswg.org/resize-observer/) enum ResizeObserverBoxOptions { - "border-box", "content-box" + "border-box", "content-box", "device-pixel-content-box" }; dictionary ResizeObserverOptions { @@ -27,6 +27,7 @@ interface ResizeObserverEntry { readonly attribute DOMRectReadOnly contentRect; readonly attribute ResizeObserverSize borderBoxSize; readonly attribute ResizeObserverSize contentBoxSize; + readonly attribute ResizeObserverSize devicePixelContentBoxSize; }; interface ResizeObserverSize { diff --git a/tests/wpt/web-platform-tests/interfaces/web-animations.idl b/tests/wpt/web-platform-tests/interfaces/web-animations.idl index 6fd172ce425..0d5d40ba74f 100644 --- a/tests/wpt/web-platform-tests/interfaces/web-animations.idl +++ b/tests/wpt/web-platform-tests/interfaces/web-animations.idl @@ -92,11 +92,12 @@ dictionary ComputedEffectTiming : EffectTiming { [Exposed=Window] interface KeyframeEffect : AnimationEffect { - constructor((Element or CSSPseudoElement)? target, + constructor(Element? target, object? keyframes, optional (unrestricted double or KeyframeEffectOptions) options = {}); constructor(KeyframeEffect source); - attribute (Element or CSSPseudoElement)? target; + attribute Element? target; + attribute CSSOMString? pseudoElement; attribute CompositeOperation composite; sequence<object> getKeyframes(); void setKeyframes(object? keyframes); @@ -122,7 +123,8 @@ dictionary BaseKeyframe { }; dictionary KeyframeEffectOptions : EffectTiming { - CompositeOperation composite = "replace"; + CompositeOperation composite = "replace"; + CSSOMString? pseudoElement = null; }; enum CompositeOperation { "replace", "add", "accumulate" }; @@ -153,8 +155,6 @@ partial interface mixin DocumentOrShadowRoot { Element includes Animatable; -CSSPseudoElement includes Animatable; - [Exposed=Window] interface AnimationPlaybackEvent : Event { constructor(DOMString type, optional AnimationPlaybackEventInit eventInitDict = {}); diff --git a/tests/wpt/web-platform-tests/interfaces/web-nfc.idl b/tests/wpt/web-platform-tests/interfaces/web-nfc.idl index 117812a1f27..9f726ece289 100644 --- a/tests/wpt/web-platform-tests/interfaces/web-nfc.idl +++ b/tests/wpt/web-platform-tests/interfaces/web-nfc.idl @@ -52,6 +52,7 @@ interface NDEFWriter { interface NDEFReader : EventTarget { constructor(); + attribute EventHandler onerror; attribute EventHandler onreading; Promise<void> scan(optional NDEFScanOptions options={}); diff --git a/tests/wpt/web-platform-tests/interfaces/web-share.idl b/tests/wpt/web-platform-tests/interfaces/web-share.idl index f433f2314be..a29107f0598 100644 --- a/tests/wpt/web-platform-tests/interfaces/web-share.idl +++ b/tests/wpt/web-platform-tests/interfaces/web-share.idl @@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT // Content was automatically extracted by Reffy into reffy-reports // (https://github.com/tidoust/reffy-reports) -// Source: Web Share API - Level 1 (https://w3c.github.io/web-share/) +// Source: Web Share API (https://w3c.github.io/web-share/) partial interface Navigator { [SecureContext] Promise<void> share(optional ShareData data = {}); diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl b/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl index 2b823047ff1..3e58254baa4 100644 --- a/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl +++ b/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl @@ -78,6 +78,8 @@ dictionary RTCInboundRtpStreamStats : RTCReceivedRtpStreamStats { double framesPerSecond; unsigned long long qpSum; double totalDecodeTime; + double totalInterFrameDelay; + double totalSquaredInterFrameDelay; boolean voiceActivityFlag; DOMHighResTimeStamp lastPacketReceivedTimestamp; double averageRtcpInterval; diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc.idl b/tests/wpt/web-platform-tests/interfaces/webrtc.idl index 5a5eb7b1063..43ee424b7c3 100644 --- a/tests/wpt/web-platform-tests/interfaces/webrtc.idl +++ b/tests/wpt/web-platform-tests/interfaces/webrtc.idl @@ -47,9 +47,7 @@ enum RTCRtcpMuxPolicy { "require" }; -dictionary RTCOfferAnswerOptions { - boolean voiceActivityDetection = true; -}; +dictionary RTCOfferAnswerOptions {}; dictionary RTCOfferOptions : RTCOfferAnswerOptions { boolean iceRestart = false; @@ -111,7 +109,6 @@ interface RTCPeerConnection : EventTarget { readonly attribute RTCPeerConnectionState connectionState; readonly attribute boolean? canTrickleIceCandidates; void restartIce(); - static sequence<RTCIceServer> getDefaultIceServers(); RTCConfiguration getConfiguration(); void setConfiguration(RTCConfiguration configuration); void close(); @@ -266,7 +263,6 @@ dictionary RTCCertificateExpiration { [Exposed=Window, Serializable] interface RTCCertificate { readonly attribute DOMTimeStamp expires; - static sequence<AlgorithmIdentifier> getSupportedAlgorithms(); sequence<RTCDtlsFingerprint> getFingerprints(); }; diff --git a/tests/wpt/web-platform-tests/layout-instability/resources/util.js b/tests/wpt/web-platform-tests/layout-instability/resources/util.js new file mode 100644 index 00000000000..ca430d0a9e2 --- /dev/null +++ b/tests/wpt/web-platform-tests/layout-instability/resources/util.js @@ -0,0 +1,66 @@ +// Utilities for Layout Instability tests. + +// Returns a promise that is resolved when the specified number of animation +// frames has occurred. +waitForAnimationFrames = frameCount => { + return new Promise(resolve => { + const handleFrame = () => { + if (--frameCount <= 0) + resolve(); + else + requestAnimationFrame(handleFrame); + }; + requestAnimationFrame(handleFrame); + }); +}; + +// Returns a promise that is resolved when the next animation frame occurs. +waitForAnimationFrame = () => waitForAnimationFrames(1); + +// Helper to compute an expected layout shift score based on an expected impact +// region and max move distance for a particular animation frame. +computeExpectedScore = (impactRegionArea, moveDistance) => { + const docElement = document.documentElement; + + const viewWidth = docElement.clientWidth; + const viewHeight = docElement.clientHeight; + + const viewArea = viewWidth * viewHeight; + const viewMaxDim = Math.max(viewWidth, viewHeight); + + const impactFraction = impactRegionArea / viewArea; + const distanceFraction = moveDistance / viewMaxDim; + + return impactFraction * distanceFraction; +}; + +// An object that tracks the document cumulative layout shift score. +// Usage: +// +// const watcher = new ScoreWatcher; +// ... +// assert_equals(watcher.score, expectedScore); +// +// The score reflects only layout shifts that occur after the ScoreWatcher is +// constructed. +ScoreWatcher = function() { + if (PerformanceObserver.supportedEntryTypes.indexOf("layout-shift") == -1) + throw new Error("Layout Instability API not supported"); + this.score = 0; + const resetPromise = () => { + this.promise = new Promise(resolve => { + this.resolve = () => { + resetPromise(); + resolve(); + } + }); + }; + resetPromise(); + const observer = new PerformanceObserver(list => { + list.getEntries().forEach(entry => { + this.score += entry.value; + this.resolve(); + }); + }); + observer.observe({entryTypes: ['layout-shift']}); +}; diff --git a/tests/wpt/web-platform-tests/layout-instability/rtl-distance.html b/tests/wpt/web-platform-tests/layout-instability/rtl-distance.html new file mode 100644 index 00000000000..a6f0040e950 --- /dev/null +++ b/tests/wpt/web-platform-tests/layout-instability/rtl-distance.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<title>Layout Instability: movement distance uses starting corner</title> +<link rel="help" href="https://wicg.github.io/layout-instability/" /> +<style> + +#shifter { position: relative; width: 100px; height: 100px; direction: rtl; } + +</style> +<div id='shifter'></div> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/util.js"></script> +<script> + +promise_test(async () => { + const watcher = new ScoreWatcher; + + // Wait for the initial render to complete. + await waitForAnimationFrames(2); + + // Move the left edge rightward by 10px and the right edge leftward by 20px. + document.querySelector("#shifter").style = "width: 70px; left: 10px"; + + // The movement distance should use the displacement of the right edge. + const expectedScore = computeExpectedScore(100 * 100, 20); + + await watcher.promise; + assert_equals(watcher.score, expectedScore); +}, 'RTL element.'); + +</script> diff --git a/tests/wpt/web-platform-tests/layout-instability/simple-block-movement.html b/tests/wpt/web-platform-tests/layout-instability/simple-block-movement.html new file mode 100644 index 00000000000..0f9257e27ce --- /dev/null +++ b/tests/wpt/web-platform-tests/layout-instability/simple-block-movement.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<title>Layout Instability: simple block movement is detected</title> +<link rel="help" href="https://wicg.github.io/layout-instability/" /> +<style> + +#shifter { position: relative; width: 300px; height: 100px; } + +</style> +<div id="shifter"></div> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/util.js"></script> +<script> + +promise_test(async () => { + const watcher = new ScoreWatcher; + + // Wait for the initial render to complete. + await waitForAnimationFrames(2); + + // Modify the position of the div. + document.querySelector("#shifter").style = "top: 60px"; + + // An element of size (300 x 100) has shifted by 60px. + const expectedScore = computeExpectedScore(300 * (100 + 60), 60); + + // Observer fires after the frame is painted. + assert_equals(watcher.score, 0); + await watcher.promise; + assert_equals(watcher.score, expectedScore); +}, 'Simple block movement.'); + +</script> diff --git a/tests/wpt/web-platform-tests/layout-instability/transform.html b/tests/wpt/web-platform-tests/layout-instability/transform.html new file mode 100644 index 00000000000..7ac1c8cafde --- /dev/null +++ b/tests/wpt/web-platform-tests/layout-instability/transform.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<title>Layout Instability: shift inside a transformed container</title> +<link rel="help" href="https://wicg.github.io/layout-instability/" /> +<style> + +body { margin: 0; } +#container { transform: translateX(-300px) translateY(-40px); } +#shifter { position: relative; width: 600px; height: 140px; } + +</style> +<div id="container"> + <div id="shifter"></div> +</div> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/util.js"></script> +<script> + +promise_test(async () => { + const watcher = new ScoreWatcher; + + // Wait for the initial render to complete. + await waitForAnimationFrames(2); + + // Modify the position of the div. + document.querySelector("#shifter").style = "top: 60px"; + + // The shifter has size 600 x 140, but the container's transform + // reduces its viewport overlap. + const expectedScore = computeExpectedScore( + (600 - 300) * (140 - 40 + 60), 60); + + await watcher.promise; + assert_equals(watcher.score, expectedScore); +}, 'Transformed container.'); + +</script> diff --git a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html index ca3e6794919..d50e69eb97d 100644 --- a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html +++ b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html @@ -5,6 +5,7 @@ <title>MathML 'ElementCSSInlineStyle` Dynamic Tests</title> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"/> <link rel="match" href="css-inline-style-dynamic.tentative-ref.html"/> + <script src="/mathml/support/feature-detection.js"></script> <style> #hidden { visibility: hidden; @@ -21,9 +22,17 @@ <script type="text/javascript"> function test() { + MathMLFeatureDetection.ensure_for_match_reftest("has_mspace"); document.body.offsetTop; // Update layout - document.getElementById("hidden").style.visibility = "visible"; - document.getElementById("red").style.backgroundColor = "green"; + + var mspace = document.getElementById("hidden"); + if (mspace.style) + mspace.style.visibility = "visible"; + + mspace = document.getElementById("red"); + if (mspace.style) + mspace.style.backgroundColor = "green"; + document.documentElement.className = ""; } </script> diff --git a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/href-click-3.html b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/href-click-3.html index a8475ea3ff8..1b7f0685e65 100644 --- a/tests/wpt/web-platform-tests/mathml/relations/html5-tree/href-click-3.html +++ b/tests/wpt/web-platform-tests/mathml/relations/html5-tree/href-click-3.html @@ -19,10 +19,20 @@ <mspace width="50px" height="10px" style="background: gray"></mspace> </math> </p> + <a id="badTarget" href="javascript:badHandler()">DON'T CLICK ME</a> <script> var t = async_test("Click element with href"); function handler() { t.done(); } - test_driver.click(document.getElementById("target")); + function badHandler() { + t.step(() => { assert_unreached("Bad handler executed"); }); + t.done(); + } + test_driver.click(document.getElementById("target")).then(() => { + return test_driver.click(document.getElementById("badTarget")); + }).catch(() => { + t.step(() => { assert_unreached("Click failed"); }); + t.done(); + }); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-mimetype.html b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-mimetype.html index ddc56e9cb75..e90bbcced98 100644 --- a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-mimetype.html +++ b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-mimetype.html @@ -12,18 +12,28 @@ <script> function createAudioStream(t) { const ac = new AudioContext(); - const {stream} = ac.createMediaStreamDestination(); - const tracks = stream.getTracks(); - t.add_cleanup(() => tracks.forEach(tr => tr.stop())); - return stream; + const dest = ac.createMediaStreamDestination(); + const osc = ac.createOscillator(); + osc.connect(dest); + osc.start(); + const [track] = dest.stream.getTracks(); + t.add_cleanup(() => track.stop()); + return dest.stream; } function createVideoStream(t) { const canvas = document.getElementById("canvas"); - canvas.getContext('2d'); + const ctx = canvas.getContext('2d'); const stream = canvas.captureStream(); - const tracks = stream.getTracks(); - t.add_cleanup(() => tracks.forEach(tr => tr.stop())); + const [track] = stream.getTracks(); + t.add_cleanup(() => track.stop()); + ctx.fillStyle = 'green'; + requestAnimationFrame(function draw() { + ctx.fillRect(0, 0, canvas.width, canvas.height); + if (track.readyState == "live") { + requestAnimationFrame(draw); + } + }); return stream; } @@ -104,44 +114,56 @@ for (const mimeType of [ } } -test(t => { +promise_test(async t => { const recorder = new MediaRecorder(createAudioStream(t)); recorder.start(); + assert_equals(recorder.mimeType, "", + "MediaRecorder has no MIMEtype after start() for audio"); + + await new Promise(r => recorder.onstart = r); assert_not_equals(recorder.mimeType, "", - "MediaRecorder has a MIMEtype after start() for audio"); + "MediaRecorder has a MIMEtype after 'start' for audio"); assert_regexp_match(recorder.mimeType, /^audio\//, "MIMEtype has an expected media type"); assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+/, "MIMEtype has a container subtype"); assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+; codecs=[^,]+$/, "MIMEtype has one codec"); -}, "MediaRecorder sets a MIMEType after start() for audio"); +}, "MediaRecorder sets a MIMEType after 'start' for audio"); -test(t => { +promise_test(async t => { const recorder = new MediaRecorder(createVideoStream(t)); recorder.start(); + assert_equals(recorder.mimeType, "", + "MediaRecorder has no MIMEtype after start() for video"); + + await new Promise(r => recorder.onstart = r); assert_not_equals(recorder.mimeType, "", - "MediaRecorder has a MIMEtype after start() for video"); + "MediaRecorder has a MIMEtype after 'start' for video"); assert_regexp_match(recorder.mimeType, /^video\//, "MIMEtype has an expected media type"); assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+/, "MIMEtype has a container subtype"); assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+; codecs=[^,]+$/, "MIMEtype has one codec"); -}, "MediaRecorder sets a MIMEType after start() for video"); +}, "MediaRecorder sets a MIMEType after 'start' for video"); -test(t => { +promise_test(async t => { const recorder = new MediaRecorder(createAudioVideoStream(t)); recorder.start(); + assert_equals(recorder.mimeType, "", + "MediaRecorder has no MIMEtype after start() for audio/video"); + + await new Promise(r => recorder.onstart = r); assert_not_equals(recorder.mimeType, "", - "MediaRecorder has a MIMEtype after start() for audio/video"); + "MediaRecorder has a MIMEtype after 'start' for audio/video"); assert_regexp_match(recorder.mimeType, /^video\//, "MIMEtype has an expected media type"); assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+/, "MIMEtype has a container subtype"); assert_regexp_match(recorder.mimeType, /^[a-z]+\/[a-z]+; codecs=[^,]+,[^,]+$/, "MIMEtype has two codecs"); -}, "MediaRecorder sets a MIMEType after start() for audio/video"); +}, "MediaRecorder sets a MIMEType after 'start' for audio/video"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html index 3b16006e0f5..790f73ae7bd 100644 --- a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html +++ b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html @@ -12,6 +12,7 @@ the success callback in getUserMedia can be properly assigned to a video element via the <code>srcObject</code> attribute.</p> +<audio id="aud"></audio> <video id="vid"></video> <div id='log'></div> @@ -21,6 +22,11 @@ via the <code>srcObject</code> attribute.</p> 'use strict'; const vid = document.getElementById("vid"); +function queueTask(f) { + window.onmessage = f; + window.postMessage("hi"); +} + promise_test(async t => { const stream = await navigator.mediaDevices.getUserMedia({video: true}); t.add_cleanup(() => { @@ -231,6 +237,50 @@ promise_test(async t => { "currentTime advanced after stopping"); }, "Tests that a media element with an assigned MediaStream reports the currentTime attribute as expected"); +promise_test(async t => { + const stream = await navigator.mediaDevices.getUserMedia({video: true}); + t.add_cleanup(() => { + vid.srcObject = null; + stream.getTracks().forEach(track => track.stop()); + }); + vid.srcObject = stream; + + await new Promise(r => t.step_timeout(r, 500)); + + vid.play(); + await new Promise(r => vid.ontimeupdate = r); + assert_between_exclusive(vid.currentTime, 0, 0.5, + "currentTime starts at 0 and has progressed at first timeupdate"); +}, "Tests that a media element with an assigned MediaStream starts its timeline at 0 regardless of when the MediaStream was created"); + +promise_test(async t => { + const stream = await navigator.mediaDevices.getUserMedia({video: true}); + t.add_cleanup(() => { + vid.srcObject = null; + stream.getTracks().forEach(track => track.stop()); + }); + vid.srcObject = stream; + + vid.play(); + await new Promise(r => vid.ontimeupdate = r); + + vid.pause(); + const pauseCurrentTime = vid.currentTime; + + await new Promise(r => vid.onpause = r); + vid.ontimeupdate = () => assert_unreached("No timeupdate while paused"); + + await new Promise(r => t.step_timeout(r, 500)); + assert_equals(vid.currentTime, pauseCurrentTime, + "currentTime does not change while paused"); + + vid.play(); + + await new Promise(r => vid.ontimeupdate = r); + assert_between_exclusive(vid.currentTime - pauseCurrentTime, 0, 0.5, + "currentTime does not skip ahead after pause"); +}, "Tests that a media element with an assigned MediaStream does not advance currentTime while paused"); + promise_test(async t => { const stream = await navigator.mediaDevices.getUserMedia({video: true}); @@ -263,6 +313,112 @@ promise_test(async t => { // otherwise the media element sets currentTime to 0 without ending. await new Promise(r => vid.onended = r); }, "Tests that the loop attribute has no effect on a media element with an assigned MediaStream"); + +promise_test(async t => { + const stream = await navigator.mediaDevices.getUserMedia({video: true}); + t.add_cleanup(() => { vid.srcObject = null; }); + vid.srcObject = stream; + + await vid.play(); + + for (const track of stream.getTracks()) { + track.stop(); + } + + assert_false(stream.active, "MediaStream becomes inactive with only ended tracks"); + assert_false(vid.ended, "HTMLMediaElement reports ended the next time the event loop reaches step 1 (sync)"); + + await Promise.resolve(); + assert_false(vid.ended, "HTMLMediaElement reports ended the next time the event loop reaches step 1 (microtask)"); + + let ended = false; + vid.onended = () => ended = true; + await new Promise(r => queueTask(r)); + + assert_true(vid.ended, "HTMLMediaElement becomes ended asynchronously when its MediaStream provider becomes inactive"); + assert_true(ended, "HTMLMediaElement fires the ended event asynchronously when its MediaStream provider becomes inactive"); +}, "Tests that a media element with an assigned MediaStream ends when the MediaStream becomes inactive through tracks ending"); + +promise_test(async t => { + const stream = await navigator.mediaDevices.getUserMedia({audio: true, video: true}); + t.add_cleanup(() => { + aud.srcObject = null; + stream.getTracks().forEach(track => track.stop()); + }); + aud.srcObject = stream; + + await aud.play(); + + for (const track of stream.getAudioTracks()) { + track.stop(); + } + + assert_true(stream.active, "MediaStream is still active with a live video track"); + assert_false(aud.ended, "HTMLMediaElement reports ended the next time the event loop reaches step 1 (sync)"); + + await Promise.resolve(); + assert_false(aud.ended, "HTMLMediaElement reports ended the next time the event loop reaches step 1 (microtask)"); + + let ended = false; + aud.onended = () => ended = true; + await new Promise(r => queueTask(r)); + + assert_true(aud.ended, "HTMLAudioElement becomes ended asynchronously when its MediaStream provider becomes inaudible"); + assert_true(ended, "HTMLAudioElement fires the ended event asynchronously when its MediaStream provider becomes inaudible"); +}, "Tests that an audio element with an assigned MediaStream ends when the MediaStream becomes inaudible through audio tracks ending"); + +promise_test(async t => { + const stream = await navigator.mediaDevices.getUserMedia({video: true}); + t.add_cleanup(() => { vid.srcObject = null; }); + vid.srcObject = stream; + + await vid.play(); + + for (const track of stream.getTracks()) { + stream.removeTrack(track); + } + + assert_false(stream.active, "MediaStream becomes inactive with no tracks"); + assert_false(vid.ended, "HTMLMediaElement reports ended the next time the event loop reaches step 1 (sync)"); + + await Promise.resolve(); + assert_false(vid.ended, "HTMLMediaElement reports ended the next time the event loop reaches step 1 (microtask)"); + + let ended = false; + vid.onended = () => ended = true; + await new Promise(r => queueTask(r)); + + assert_true(vid.ended, "HTMLMediaElement becomes ended asynchronously when its MediaStream provider becomes inactive"); + assert_true(ended, "HTMLMediaElement fires the ended event asynchronously when its MediaStream provider becomes inactive"); +}, "Tests that a media element with an assigned MediaStream ends when the MediaStream becomes inactive through track removal"); + +promise_test(async t => { + const stream = await navigator.mediaDevices.getUserMedia({audio: true, video: true}); + t.add_cleanup(() => { + aud.srcObject = null; + stream.getTracks().forEach(track => track.stop()); + }); + aud.srcObject = stream; + + await aud.play(); + + for (const track of stream.getAudioTracks()) { + stream.removeTrack(track); + } + + assert_true(stream.active, "MediaStream is still active with a live video track"); + assert_false(aud.ended, "HTMLMediaElement reports ended the next time the event loop reaches step 1 (sync)"); + + await Promise.resolve(); + assert_false(aud.ended, "HTMLMediaElement reports ended the next time the event loop reaches step 1 (microtask)"); + + let ended = false; + aud.onended = () => ended = true; + await new Promise(r => queueTask(r)); + + assert_true(aud.ended, "HTMLAudioElement becomes ended asynchronously when its MediaStream provider becomes inaudible"); + assert_true(ended, "HTMLAudioElement fires the ended event asynchronously when its MediaStream provider becomes inaudible"); +}, "Tests that an audio element with an assigned MediaStream ends when the MediaStream becomes inaudible through track removal"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/mixed-content/README.md b/tests/wpt/web-platform-tests/mixed-content/README.md index 407b8960cbe..488432d41ea 100644 --- a/tests/wpt/web-platform-tests/mixed-content/README.md +++ b/tests/wpt/web-platform-tests/mixed-content/README.md @@ -1,4 +1,4 @@ -# Mixed-content Web Platform Tests +# Mixed Content Test Suite The subdirectory `gen/` is generated using the generator at `common/security-features`. See [common/security-features/README.md](../common/security-features/README.md) for how to generate tests. diff --git a/tests/wpt/web-platform-tests/mixed-content/generic/test-case.sub.js b/tests/wpt/web-platform-tests/mixed-content/generic/test-case.sub.js index 9e9e169f15f..661cff12d00 100644 --- a/tests/wpt/web-platform-tests/mixed-content/generic/test-case.sub.js +++ b/tests/wpt/web-platform-tests/mixed-content/generic/test-case.sub.js @@ -1,5 +1,5 @@ /** - * @fileoverview Test case for mixed-content in Web Platform Tests. + * @fileoverview Test case for mixed-content in web-platform-tests. * @author burnik@google.com (Kristijan Burnik) */ diff --git a/tests/wpt/web-platform-tests/permissions/nfc-permission.html b/tests/wpt/web-platform-tests/permissions/nfc-permission.html new file mode 100644 index 00000000000..eeec7251c1c --- /dev/null +++ b/tests/wpt/web-platform-tests/permissions/nfc-permission.html @@ -0,0 +1,14 @@ +<!doctype html> +<meta charset=utf-8> +<title>Test Web NFC Permission.</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<div id="log"></div> + +<script> + promise_test(function(test) { + return navigator.permissions.query({name:'nfc'}).then(function(result) { + assert_true(result instanceof PermissionStatus); + }); + }); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/referrer-policy/README.md b/tests/wpt/web-platform-tests/referrer-policy/README.md index ca9977c89ec..4d6eda97250 100644 --- a/tests/wpt/web-platform-tests/referrer-policy/README.md +++ b/tests/wpt/web-platform-tests/referrer-policy/README.md @@ -1,4 +1,4 @@ -# Referrer-Policy Web Platform Tests +# Referrer Policy Test Suite The Referrer-Policy tests are designed for testing browser implementations and conformance to the [W3 Referrer-Policy Specification](http://w3c.github.io/webappsec/specs/referrer-policy/). 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 8e7c9eef38e..bbee65b0c9e 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 @@ -34,11 +34,11 @@ const WebContactsTest = (() => { }; } - async select(multiple, includeNames, includeEmails, includeTel, includeAddresses) { + async select(multiple, includeNames, includeEmails, includeTel, includeAddresses, includeIcons) { if (this.selectedContacts_ === null) return {contacts: null}; - const contactInfos = this.selectedContacts_.map(contact => { + const contactInfos = await Promise.all(this.selectedContacts_.map(async contact => { const contactInfo = new blink.mojom.ContactInfo(); if (includeNames) contactInfo.name = contact.name || []; @@ -47,11 +47,17 @@ const WebContactsTest = (() => { if (includeTel) contactInfo.tel = contact.tel || []; if (includeAddresses) { - contactInfo.address = contact.address || []; - contactInfo.address = contactInfo.address.map(address => this.formatAddress_(address)); + contactInfo.address = (contact.address || []).map(address => this.formatAddress_(address)); + } + if (includeIcons) { + contactInfo.icon = await Promise.all( + (contact.icon || []).map(async blob => ({ + mimeType: blob.type, + data: (await blob.text()).split('').map(s => s.charCodeAt(0)), + }))); } return contactInfo; - }); + })); if (!contactInfos.length) return {contacts: []}; if (!multiple) return {contacts: [contactInfos[0]]}; diff --git a/tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js b/tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js index aff72bbad02..ce22a9c2cfe 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js +++ b/tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js @@ -28,6 +28,10 @@ function toMojoNDEFRecord(record) { nfcRecord.recordType = record.recordType; nfcRecord.mediaType = record.mediaType; nfcRecord.data = toByteArray(record.data); + if (record.data != null && record.data.records !== undefined) { + // |record.data| may be an NDEFMessageInit, i.e. the payload is a message. + nfcRecord.payloadMessage = toMojoNDEFMessage(record.data); + } return nfcRecord; } @@ -100,8 +104,7 @@ function assertNDEFReaderOptionsEqual(provided, received) { assert_equals(received.mediaType, ''); if (provided.recordType !== undefined) { - assert_equals(!+received.record_filter, true); - assert_equals(provided.recordType, received.recordFilter.recordType); + assert_equals(provided.recordType, received.recordType); } } @@ -111,8 +114,8 @@ function matchesWatchOptions(message, options) { if (!matchesWebNfcId(message.url, options.url)) return false; // Matches any record / media type. - if ((options.mediaType == null || options.mediaType === "") - && options.recordFilter == null) { + if ((options.mediaType == null || options.mediaType === '') && + options.recordType == null) { return true; } @@ -122,8 +125,8 @@ function matchesWatchOptions(message, options) { && options.mediaType !== record.mediaType) { return false; } - if (options.recordFilter != null && - options.recordFilter.recordType !== record.recordType) { + if (options.recordType != null && + options.recordType !== record.recordType) { return false; } } diff --git a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js index d87b3420a85..653dcac79f8 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js +++ b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js @@ -144,9 +144,20 @@ class MockVRService { // Find and return the first successful result. for (let i = 0; i < results.length; i++) { if (results[i].session) { + // Construct a dummy metrics recorder + let metricsRecorderPtr = new device.mojom.XRSessionMetricsRecorderPtr(); + let metricsRecorderRequest = mojo.makeRequest(metricsRecorderPtr); + let metricsRecorderBinding = new mojo.Binding( + device.mojom.XRSessionMetricsRecorder, new MockXRSessionMetricsRecorder(), metricsRecorderRequest); + + let success = { + session: results[i].session, + metricsRecorder: metricsRecorderPtr, + }; + return { result: { - session : results[i].session, + success : success, $tag : 0 } }; @@ -163,6 +174,10 @@ class MockVRService { }); } + exitPresent() { + return Promise.resolve(); + } + supportsSession(sessionOptions) { let requests = []; // Check supports on all the runtimes. @@ -624,6 +639,12 @@ class MockRuntime { }; } +class MockXRSessionMetricsRecorder { + reportFeatureUsed(feature) { + // Do nothing + } +} + class MockXRInputSource { constructor(fakeInputSourceInit, id, pairedDevice) { this.source_id_ = id; diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html b/tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html index 02009f856f6..e4246e7faba 100644 --- a/tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html +++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html @@ -28,6 +28,24 @@ } on_event(window, "load", windowLoad); + test(function() { + var sequence = []; + var outer = document.createElement("div"); + var inner = document.createElement("div"); + outer.appendChild(inner); + document.body.appendChild(outer); + inner.addEventListener("click", function() { + sequence.push("inner"); + }, false); + + on_event(outer, "click", function() { + sequence.push("outer"); + }); + inner.click(); + + assert_array_equals(sequence, ["inner", "outer"]); + }, "on_event does not use event capture"); + // see the body onload below var load_test_attr = async_test("body element fires the onload event set from the attribute"); </script> @@ -432,6 +450,12 @@ "name": "window onload event fires when set from the handler", "message": null, "properties": {} + }, + { + "status_string": "PASS", + "name": "on_event does not use event capture", + "message": null, + "properties": {} } ], "type": "complete" diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-fail.html b/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-fail.html index 5826a2ef15c..9169a5a54e2 100644 --- a/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-fail.html +++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-fail.html @@ -6,6 +6,7 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script> +setup({ single_test: true }); onload = function() { assert_true(false); done(); diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-assertions.html b/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-assertions.html index f3140dd492c..f1b18923de4 100644 --- a/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-assertions.html +++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-assertions.html @@ -6,6 +6,7 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script> +setup({ single_test: true }); done(); </script> <script type="text/json" id="expected"> diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-body.html b/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-body.html index 82f3e18a44c..0f3d4adf44b 100644 --- a/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-body.html +++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-no-body.html @@ -6,6 +6,7 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script> +setup({ single_test: true }); assert_true(true); done(); </script> diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-pass.html b/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-pass.html index 9d5f776d541..e47250d763c 100644 --- a/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-pass.html +++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/single-page-test-pass.html @@ -6,6 +6,7 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script> +setup({ single_test: true }); onload = function() { assert_true(true); done(); diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/worker-uncaught-single.js b/tests/wpt/web-platform-tests/resources/test/tests/functional/worker-uncaught-single.js index d7f00382c0b..c04542b2f57 100644 --- a/tests/wpt/web-platform-tests/resources/test/tests/functional/worker-uncaught-single.js +++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/worker-uncaught-single.js @@ -1,6 +1,8 @@ importScripts("/resources/testharness.js"); -// Because this script does not define any sub-tests, it should be interpreted -// as a single-page test, and the uncaught exception should be reported as a -// test failure (harness status: OK). +setup({ single_test: true }); + +// Because this script enables the `single_test` configuration option, it +// should be interpreted as a single-page test, and the uncaught exception +// should be reported as a test failure (harness status: OK). throw new Error("This failure is expected."); diff --git a/tests/wpt/web-platform-tests/resources/test/tests/unit/exceptional-cases.html b/tests/wpt/web-platform-tests/resources/test/tests/unit/exceptional-cases.html index 236970cbea9..2be4dacaaec 100644 --- a/tests/wpt/web-platform-tests/resources/test/tests/unit/exceptional-cases.html +++ b/tests/wpt/web-platform-tests/resources/test/tests/unit/exceptional-cases.html @@ -70,12 +70,39 @@ function getEnumProp(object, value) { promise_test(() => { return makeTest( + () => { done(); } + ).then(({harness, tests}) => { + assert_equals(harness, 'ERROR'); + assert_array_equals(Object.keys(tests), []); + }); +}, 'completion signaled before testing begins'); + +promise_test(() => { + return makeTest( + () => { assert_true(true); done(); } + ).then(({harness, tests}) => { + assert_equals(harness, 'ERROR'); + assert_array_equals(Object.keys(tests), []); + }); +}, 'passing assertion before testing begins'); + +promise_test(() => { + return makeTest( + () => { assert_false(true); } + ).then(({harness, tests}) => { + assert_equals(harness, 'ERROR'); + assert_array_equals(Object.keys(tests), []); + }); +}, 'failing assertion before testing begins'); + +promise_test(() => { + return makeTest( () => { throw new Error('this error is expected'); } ).then(({harness, tests}) => { - assert_equals(harness, 'OK'); - assert_equals(tests['Document title'], 'FAIL'); + assert_equals(harness, 'ERROR'); + assert_array_equals(Object.keys(tests), []); }); -}, 'uncaught exception during single-page test'); +}, 'uncaught exception before testing begins'); promise_test(() => { return makeTest( @@ -165,10 +192,10 @@ if ('onunhandledrejection' in window) { return makeTest( () => { Promise.reject(new Error('this error is expected')); } ).then(({harness, tests}) => { - assert_equals(harness, 'OK'); - assert_equals(tests['Document title'], 'FAIL'); + assert_equals(harness, 'ERROR'); + assert_array_equals(Object.keys(tests), []); }); - }, 'unhandled rejection during single-page test'); + }, 'unhandled rejection before testing begins'); promise_test(() => { return makeTest( diff --git a/tests/wpt/web-platform-tests/resources/testdriver.js b/tests/wpt/web-platform-tests/resources/testdriver.js index 031be1b7e55..bd38e3e006a 100644 --- a/tests/wpt/web-platform-tests/resources/testdriver.js +++ b/tests/wpt/web-platform-tests/resources/testdriver.js @@ -208,7 +208,126 @@ */ generate_test_report: function(message) { return window.test_driver_internal.generate_test_report(message); - } + }, + + /** + * Creates a virtual authenticator + * + * This function creates a virtual authenticator for use with the U2F + * and WebAuthn APIs as described in {@link + * https://w3c.github.io/webauthn/#sctn-automation-add-virtual-authenticator} + * + * @param {Object} config - an [Authenticator Configuration]{@link + * https://w3c.github.io/webauthn/#authenticator-configuration} + * object + * @returns {Promise} fulfilled after the authenticator is added, or + * rejected in the cases the WebDriver command + * errors. Returns the ID of the authenticator + */ + add_virtual_authenticator: function(config) { + return window.test_driver_internal.add_virtual_authenticator(config); + }, + + /** + * Removes a virtual authenticator + * + * This function removes a virtual authenticator that has been created + * by add_virtual_authenticator + * https://w3c.github.io/webauthn/#sctn-automation-remove-virtual-authenticator + * + * @param {String} authenticator_id - the ID of the authenticator to be + * removed. + * + * @returns {Promise} fulfilled after the authenticator is removed, or + * rejected in the cases the WebDriver command + * errors + */ + remove_virtual_authenticator: function(authenticator_id) { + return window.test_driver_internal.remove_virtual_authenticator(authenticator_id); + }, + + /** + * Adds a credential to a virtual authenticator + * + * https://w3c.github.io/webauthn/#sctn-automation-add-credential + * + * @param {String} authenticator_id - the ID of the authenticator + * @param {Object} credential - A [Credential Parameters]{@link + * https://w3c.github.io/webauthn/#credential-parameters} + * object + * + * @returns {Promise} fulfilled after the credential is added, or + * rejected in the cases the WebDriver command + * errors + */ + add_credential: function(authenticator_id, credential) { + return window.test_driver_internal.add_credential(authenticator_id, credential); + }, + + /** + * Gets all the credentials stored in an authenticator + * + * This function retrieves all the credentials (added via the U2F API, + * WebAuthn, or the add_credential function) stored in a virtual + * authenticator + * https://w3c.github.io/webauthn/#sctn-automation-get-credentials + * + * @param {String} authenticator_id - the ID of the authenticator + * + * @returns {Promise} fulfilled after the credentials are returned, or + * rejected in the cases the WebDriver command + * errors. Returns an array of [Credential + * Parameters]{@link + * https://w3c.github.io/webauthn/#credential-parameters} + */ + get_credentials: function(authenticator_id) { + return window.test_driver_internal.get_credentials(authenticator_id); + }, + + /** + * Remove a credential stored in an authenticator + * + * https://w3c.github.io/webauthn/#sctn-automation-remove-credential + * + * @param {String} authenticator_id - the ID of the authenticator + * @param {String} credential_id - the ID of the credential + * + * @returns {Promise} fulfilled after the credential is removed, or + * rejected in the cases the WebDriver command + * errors. + */ + remove_credential: function(authenticator_id, credential_id) { + return window.test_driver_internal.remove_credential(authenticator_id, credential_id); + }, + + /** + * Removes all the credentials stored in a virtual authenticator + * + * https://w3c.github.io/webauthn/#sctn-automation-remove-all-credentials + * + * @param {String} authenticator_id - the ID of the authenticator + * + * @returns {Promise} fulfilled after the credentials are removed, or + * rejected in the cases the WebDriver command + * errors. + */ + remove_all_credentials: function(authenticator_id) { + return window.test_driver_internal.remove_all_credentials(authenticator_id); + }, + + /** + * Sets the User Verified flag on an authenticator + * + * Sets whether requests requiring user verification will succeed or + * fail on a given virtual authenticator + * https://w3c.github.io/webauthn/#sctn-automation-set-user-verified + * + * @param {String} authenticator_id - the ID of the authenticator + * @param {boolean} uv - the User Verified flag + */ + set_user_verified: function(authenticator_id, uv) { + return window.test_driver_internal.set_user_verified(authenticator_id, uv); + }, }; window.test_driver_internal = { @@ -306,6 +425,105 @@ */ generate_test_report: function(message) { return Promise.reject(new Error("unimplemented")); - } + }, + + /** + * Creates a virtual authenticator + * + * @param {Object} config - the authenticator configuration + * @returns {Promise} fulfilled after the authenticator is added, or + * rejected in the cases the WebDriver command + * errors. + */ + add_virtual_authenticator: function(config) { + return Promise.reject(new Error("unimplemented")); + }, + + /** + * Removes a virtual authenticator + * + * @param {String} authenticator_id - the ID of the authenticator to be + * removed. + * + * @returns {Promise} fulfilled after the authenticator is removed, or + * rejected in the cases the WebDriver command + * errors + */ + remove_virtual_authenticator: function(authenticator_id) { + return Promise.reject(new Error("unimplemented")); + }, + + /** + * Adds a credential to a virtual authenticator + * + * @param {String} authenticator_id - the ID of the authenticator + * @param {Object} credential - A [Credential Parameters]{@link + * https://w3c.github.io/webauthn/#credential-parameters} + * object + * + * @returns {Promise} fulfilled after the credential is added, or + * rejected in the cases the WebDriver command + * errors + * + */ + add_credential: function(authenticator_id, credential) { + return Promise.reject(new Error("unimplemented")); + }, + + /** + * Gets all the credentials stored in an authenticator + * + * @param {String} authenticator_id - the ID of the authenticator + * + * @returns {Promise} fulfilled after the credentials are returned, or + * rejected in the cases the WebDriver command + * errors. Returns an array of [Credential + * Parameters]{@link + * https://w3c.github.io/webauthn/#credential-parameters} + * + */ + get_credentials: function(authenticator_id) { + return Promise.reject(new Error("unimplemented")); + }, + + /** + * Remove a credential stored in an authenticator + * + * @param {String} authenticator_id - the ID of the authenticator + * @param {String} credential_id - the ID of the credential + * + * @returns {Promise} fulfilled after the credential is removed, or + * rejected in the cases the WebDriver command + * errors. + * + */ + remove_credential: function(authenticator_id, credential_id) { + return Promise.reject(new Error("unimplemented")); + }, + + /** + * Removes all the credentials stored in a virtual authenticator + * + * @param {String} authenticator_id - the ID of the authenticator + * + * @returns {Promise} fulfilled after the credentials are removed, or + * rejected in the cases the WebDriver command + * errors. + * + */ + remove_all_credentials: function(authenticator_id) { + return Promise.reject(new Error("unimplemented")); + }, + + /** + * Sets the User Verified flag on an authenticator + * + * @param {String} authenticator_id - the ID of the authenticator + * @param {boolean} uv - the User Verified flag + * + */ + set_user_verified: function(authenticator_id, uv) { + return Promise.reject(new Error("unimplemented")); + }, }; })(); diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js index a44185c1eaf..93809664ea3 100644 --- a/tests/wpt/web-platform-tests/resources/testharness.js +++ b/tests/wpt/web-platform-tests/resources/testharness.js @@ -792,7 +792,16 @@ policies and contribution forms [3]. function done() { if (tests.tests.length === 0) { - tests.set_file_is_test(); + // `done` is invoked after handling uncaught exceptions, so if the + // harness status is already set, the corresponding message is more + // descriptive than the generic message defined here. + if (tests.status.status === null) { + tests.status.status = tests.status.ERROR; + tests.status.message = "done() was called without first defining any tests"; + } + + tests.complete(); + return; } if (tests.file_is_test) { // file is test files never have asynchronous cleanup logic, @@ -815,6 +824,12 @@ policies and contribution forms [3]. }); } + /* + * Register a function as a DOM event listener to the given object for the + * event bubbling phase. + * + * This function was deprecated in November of 2019. + */ function on_event(object, event, callback) { object.addEventListener(event, callback, false); @@ -1806,6 +1821,13 @@ policies and contribution forms [3]. } expose(assert_any, "assert_any"); + function assert_precondition(precondition, description) { + if (!precondition) { + throw new PreconditionFailedError(description); + } + } + expose(assert_precondition, "assert_precondition"); + function Test(name, properties) { if (tests.file_is_test && tests.tests.length) { @@ -1850,7 +1872,8 @@ policies and contribution forms [3]. PASS:0, FAIL:1, TIMEOUT:2, - NOTRUN:3 + NOTRUN:3, + PRECONDITION_FAILED:4 }; Test.prototype = merge({}, Test.statuses); @@ -1910,10 +1933,11 @@ policies and contribution forms [3]. if (this.phase >= this.phases.HAS_RESULT) { return; } + var status = e instanceof PreconditionFailedError ? this.PRECONDITION_FAILED : this.FAIL; var message = String((typeof e === "object" && e !== null) ? e.message : e); var stack = e.stack ? e.stack : null; - this.set_status(this.FAIL, message, stack); + this.set_status(status, message, stack); this.phase = this.phases.HAS_RESULT; this.done(); } @@ -2384,7 +2408,8 @@ policies and contribution forms [3]. TestsStatus.statuses = { OK:0, ERROR:1, - TIMEOUT:2 + TIMEOUT:2, + PRECONDITION_FAILED:3 }; TestsStatus.prototype = merge({}, TestsStatus.statuses); @@ -2490,7 +2515,7 @@ policies and contribution forms [3]. try { func(); } catch (e) { - this.status.status = this.status.ERROR; + this.status.status = e instanceof PreconditionFailedError ? this.status.PRECONDITION_FAILED : this.status.ERROR; this.status.message = String(e); this.status.stack = e.stack ? e.stack : null; this.complete(); @@ -3048,12 +3073,14 @@ policies and contribution forms [3]. status_text_harness[harness_status.OK] = "OK"; status_text_harness[harness_status.ERROR] = "Error"; status_text_harness[harness_status.TIMEOUT] = "Timeout"; + status_text_harness[harness_status.PRECONDITION_FAILED] = "Precondition Failed"; var status_text = {}; status_text[Test.prototype.PASS] = "Pass"; status_text[Test.prototype.FAIL] = "Fail"; status_text[Test.prototype.TIMEOUT] = "Timeout"; status_text[Test.prototype.NOTRUN] = "Not Run"; + status_text[Test.prototype.PRECONDITION_FAILED] = "Precondition Failed"; var status_number = {}; forEach(tests, @@ -3373,9 +3400,6 @@ policies and contribution forms [3]. */ function assert(expected_true, function_name, description, error, substitutions) { - if (tests.tests.length === 0) { - tests.set_file_is_test(); - } if (expected_true !== true) { var msg = make_message(function_name, description, error, substitutions); @@ -3438,6 +3462,13 @@ policies and contribution forms [3]. return lines.slice(i).join("\n"); } + function PreconditionFailedError(message) + { + AssertionError.call(this, message); + } + PreconditionFailedError.prototype = Object.create(AssertionError.prototype); + expose(PreconditionFailedError, "PreconditionFailedError"); + function make_message(function_name, description, error, substitutions) { for (var p in substitutions) { @@ -3665,20 +3696,19 @@ policies and contribution forms [3]. var tests = new Tests(); if (global_scope.addEventListener) { - var error_handler = function(message, stack) { - if (tests.tests.length === 0 && !tests.allow_uncaught_exception) { - tests.set_file_is_test(); - } - + var error_handler = function(error, message, stack) { + var precondition_failed = error instanceof PreconditionFailedError; if (tests.file_is_test) { var test = tests.tests[0]; if (test.phase >= test.phases.HAS_RESULT) { return; } - test.set_status(test.FAIL, message, stack); + var status = precondition_failed ? test.PRECONDITION_FAILED : test.FAIL; + test.set_status(status, message, stack); test.phase = test.phases.HAS_RESULT; } else if (!tests.allow_uncaught_exception) { - tests.status.status = tests.status.ERROR; + var status = precondition_failed ? tests.status.PRECONDITION_FAILED : tests.status.ERROR; + tests.status.status = status; tests.status.message = message; tests.status.stack = stack; } @@ -3700,19 +3730,21 @@ policies and contribution forms [3]. } else { stack = e.filename + ":" + e.lineno + ":" + e.colno; } - error_handler(message, stack); + error_handler(e.error, message, stack); }, false); addEventListener("unhandledrejection", function(e) { - var reason; - if (e.reason) { - reason = e.reason.message ? e.reason.message : e.reason; + var message; + if (e.reason && e.reason.message) { + message = "Unhandled rejection: " + e.reason.message; } else { - reason = e; + message = "Unhandled rejection"; + } + var stack; + if (e.reason && e.reason.stack) { + stack = e.reason.stack; } - var message = "Unhandled rejection: " + reason; - // There's no stack for unhandled rejections. - error_handler(message); + error_handler(e.reason, message, stack); }, false); } @@ -3750,7 +3782,7 @@ table#results {\ \ table#results th:first-child,\ table#results td:first-child {\ - width:4em;\ + width:8em;\ }\ \ table#results th:last-child,\ @@ -3791,7 +3823,11 @@ tr.notrun > td:first-child {\ color:blue;\ }\ \ -.pass > td:first-child, .fail > td:first-child, .timeout > td:first-child, .notrun > td:first-child {\ +tr.preconditionfailed > td:first-child {\ + color:blue;\ +}\ +\ +.pass > td:first-child, .fail > td:first-child, .timeout > td:first-child, .notrun > td:first-child, .preconditionfailed > td:first-child {\ font-variant:small-caps;\ }\ \ diff --git a/tests/wpt/web-platform-tests/screen_enumeration/getScreens.tentative.https.any.js b/tests/wpt/web-platform-tests/screen_enumeration/getScreens.tentative.https.any.js new file mode 100644 index 00000000000..0b8c226ddbd --- /dev/null +++ b/tests/wpt/web-platform-tests/screen_enumeration/getScreens.tentative.https.any.js @@ -0,0 +1,30 @@ +// META: global=window,dedicatedworker,sharedworker,serviceworker +'use strict'; + +promise_test(async testCase => { + assert_class_string(navigator.screen, 'ScreenManager'); + assert_equals(typeof navigator.screen.getScreens, 'function'); +}, 'navigator.screen.getScreens is present'); + +promise_test(async testCase => { + const screens = await navigator.screen.getScreens(); + assert_greater_than(screens.length, 0); + + assert_equals(typeof screens[0].availWidth, 'number'); + assert_equals(typeof screens[0].availHeight, 'number'); + assert_equals(typeof screens[0].width, 'number'); + assert_equals(typeof screens[0].height, 'number'); + assert_equals(typeof screens[0].colorDepth, 'number'); + assert_equals(typeof screens[0].pixelDepth, 'number'); + + assert_equals(typeof screens[0].availLeft, 'number'); + assert_equals(typeof screens[0].availTop, 'number'); + assert_equals(typeof screens[0].left, 'number'); + assert_equals(typeof screens[0].top, 'number'); + assert_equals(typeof screens[0].orientation, 'object'); + + assert_equals(typeof screens[0].primary, 'boolean'); + assert_equals(typeof screens[0].internal, 'boolean'); + assert_equals(typeof screens[0].scaleFactor, 'number'); + assert_equals(typeof screens[0].name, 'string'); +}, 'navigator.screen.getScreens returns at least 1 Screen');
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/screen_enumeration/requestDisplays.tentative.https.any.js b/tests/wpt/web-platform-tests/screen_enumeration/requestDisplays.tentative.https.any.js deleted file mode 100644 index e2a5bc427de..00000000000 --- a/tests/wpt/web-platform-tests/screen_enumeration/requestDisplays.tentative.https.any.js +++ /dev/null @@ -1,21 +0,0 @@ -// META: global=window,dedicatedworker,sharedworker,serviceworker -'use strict'; - -promise_test(async testCase => { - assert_class_string(navigator.screen, 'ScreenManager'); - assert_equals(typeof navigator.screen.requestDisplays, 'function'); -}, 'navigator.screen.requestDisplays is present'); - -promise_test(async testCase => { - const displays = await navigator.screen.requestDisplays(); - assert_greater_than(displays.length, 0); - assert_equals(typeof displays[0].name, 'string'); - assert_equals(typeof displays[0].scaleFactor, 'number'); - assert_equals(typeof displays[0].width, 'number'); - assert_equals(typeof displays[0].height, 'number'); - assert_equals(typeof displays[0].left, 'number'); - assert_equals(typeof displays[0].top, 'number'); - assert_equals(typeof displays[0].colorDepth, 'number'); - assert_equals(typeof displays[0].isPrimary, 'boolean'); - assert_equals(typeof displays[0].isInternal, 'boolean'); -}, 'navigator.screen.requestDisplays returns at least 1 Display');
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-api.html b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-api.html new file mode 100644 index 00000000000..8b1dea6f331 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-api.html @@ -0,0 +1,32 @@ +<!doctype html> +<title>Fragment directive API</title> +<meta charset=utf-8> +<link rel="help" href="https://wicg.github.io/ScrollToTextFragment/"> +<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> +test(t => { + assert_equals(typeof(window.location.fragmentDirective), 'object', 'window.location.fragmentDirective is defined'); +}, 'Scroll to text is feature detectable via window.location.fragmentDirective'); + +test(t =>{ + window.location.fragmentDirective = 'text=test'; + assert_equals(window.scrollY, 0, 'Setting window.location.fragmentDirective did not have an effect on scroll position'); + assert_equals(typeof(window.location.fragmentDirective), 'object', 'window.location.fragmentDirective is still an object type'); + assert_equals(Object.keys(window.location.fragmentDirective).length, 0, 'window.location.fragmentDirective has no properties'); +}, 'Setting window.location.fragmentDirective has no effect'); +</script> +<style> + body { + height: 3200px; + } + #text { + position: absolute; + top: 3000px; + } +</style> +<body> + <p id="text">This is a test page</p> +</body> diff --git a/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-same-doc.html b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-same-doc.html new file mode 100644 index 00000000000..3bfd45382e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-same-doc.html @@ -0,0 +1,57 @@ +<!doctype html> +<title>Navigating to a same-document text fragment directive</title> +<meta charset=utf-8> +<link rel="help" href="https://wicg.github.io/ScrollToTextFragment/"> +<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> +function isInView(element) { + let rect = element.getBoundingClientRect(); + return rect.top >= 0 && rect.top <= window.innerHeight; +} + +function checkScroll(resolve) { + let position = 'unknown'; + if (window.scrollY == 0) + position = 'top'; + else if (isInView(document.getElementById('text'))) + position = 'text'; + + resolve(position); +} + +function runTest() { + promise_test(t => new Promise(resolve => { + window.location.href = "#:~:text=test"; + requestAnimationFrame(function() { + checkScroll(resolve); + }); + }).then(position => { + assert_equals(position, 'top'); + assert_equals(window.location.href.indexOf(':~:'), -1, 'Expected fragment directive to be stripped from the URL.'); + }), 'Test that a text fragment directive cannot be activated on a same-document navigation'); + + promise_test(t => new Promise(resolve => { + window.location.href = "#text"; + requestAnimationFrame(function() { + checkScroll(resolve); + }); + }).then(position => { + assert_equals(position, 'text'); + }), 'Sanity check that the text element can be navigated by element ID'); +} +</script> +<style> + body { + height: 3200px; + } + #text { + position: absolute; + top: 3000px; + } +</style> +<body onload="runTest()"> + <p id="text">This is a test page</p> +</body> diff --git a/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html index bc513126ae6..1ef9dbba519 100644 --- a/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html +++ b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html @@ -2,40 +2,67 @@ <title>Navigating to a text fragment anchor</title> <script> function isInView(element) { - return (element.offsetTop >= window.scrollY) && - (element.offsetTop <= (window.scrollY + window.innerHeight)); + let rect = element.getBoundingClientRect(); + return rect.top >= 0 && rect.top <= window.innerHeight; } function checkScroll() { let bc = new BroadcastChannel('scroll-to-text-fragment'); - var position = 'unknown'; + let position = 'unknown'; if (window.scrollY == 0) position = 'top'; else if (isInView(document.getElementById('element'))) position = 'element'; else if (isInView(document.getElementById('text'))) position = 'text'; + else if (isInView(document.getElementById('more-text'))) + position = 'more-text'; + else if (isInView(document.getElementById('cross-node-context'))) + position = 'cross-node-context'; + else if (isInView(document.getElementById('text-directive-parameters'))) + position = 'text-directive-parameters'; - bc.postMessage({ scrollPosition: position }); + bc.postMessage({ scrollPosition: position, href: window.location.href }); bc.close(); window.close(); } </script> <style> body { - height: 3200px; + height: 6200px; } - p { + #element { + position: absolute; + top: 2000px; + } + #text { position: absolute; top: 3000px; } - #element { + #more-text { position: absolute; - top: 2000px; + top: 4000px; + } + #cross-node-context { + position: absolute; + top: 5000px; + } + #text-directive-parameters { + position: absolute; + top: 6000px; } </style> <body onload="window.requestAnimationFrame(checkScroll)"> <div id="element">Element</div> - <p id="text">This is a test page</p> + <p id="text">This is a test page !$'()*+./:;=?@_~ &,- ♥</p> + <p id="more-text">More test page text</p> + <div id="cross-node-context"> + <div> + <p>prefix</p> + <p>test page</p> + </div> + <div><p>suffix</p></div> + </div> + <p id="text-directive-parameters">this,is,test,page</p> </body> diff --git a/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment.html b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment.html index e05210f1ea0..b3a35f489ac 100644 --- a/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment.html +++ b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment.html @@ -1,5 +1,7 @@ <!doctype html> -<title>Navigating to a text fragment anchor</title> +<title>Navigating to a text fragment directive</title> +<meta charset=utf-8> +<link rel="help" href="https://wicg.github.io/ScrollToTextFragment/"> <meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> @@ -7,39 +9,245 @@ <script src="/resources/testdriver-vendor.js"></script> <script> let test_cases = [ - { fragment: '#', expect_position: 'top' }, - { fragment: '#:~:text=test', expect_position: 'text' }, - { fragment: '#:~:text=this,page', expect_position: 'text' }, - { fragment: '#:~:text=this-,is,test', expect_position: 'text' }, - { fragment: '#:~:text=this-,is,test,-page', expect_position: 'text' }, - { fragment: '#:~:text=this-,is,page,-none', expect_position: 'top' }, - { fragment: '#:~:text=this,test,-page', expect_position: 'text' }, - { fragment: '#:~:text=this%20is%20a%20test%20page', expect_position: 'text' }, - { fragment: '#:~:text=this&text=test,page', expect_position: 'text' }, - { fragment: '#:~:text=tes&text=age', expect_position: 'top' }, - { fragment: '#pagestate:~:text=test', expect_position: 'text' }, - { fragment: '#pagestate:~:text=nomatch', expect_position: 'top' }, - { fragment: '#element:~:text=nomatch', expect_position: 'element' }, - { fragment: '#element:~:directive', expect_position: 'element' }, + // Test non-text fragment directives + { + fragment: '#', + expect_position: 'top', + description: 'Empty hash' + }, + { + fragment: '#:~:text=this,is,test,page', + expect_position: 'top', + description: 'Text directive with invalid syntax, context terms without "-"' + }, + { + fragment: '#element:~:directive', + expect_position: 'element', + description: 'Generic fragment directive with existing element fragment' + }, + // Test exact text matching, with all combinations of context terms + { + fragment: '#:~:text=test', + expect_position: 'text', + description: 'Exact text with no context' + }, + { + fragment: '#:~:text=this is a-,test', + expect_position: 'text', + description: 'Exact text with prefix' + }, + { + fragment: '#:~:text=test,-page', + expect_position: 'text', + description: 'Exact text with suffix' + }, + { + fragment: '#:~:text=this is a-,test,-page', + expect_position: 'text', + description: 'Exact text with prefix and suffix' + }, + // Test text range matching, with all combinations of context terms + { + fragment: '#:~:text=this,page', + expect_position: 'text', + description: 'Text range with no context' + }, + { + fragment: '#:~:text=this-,is,test', + expect_position: 'text', + description: 'Text range with prefix' + }, + { + fragment: '#:~:text=this,test,-page', + expect_position: 'text', + description: 'Text range with suffix' + }, + { + fragment: '#:~:text=this-,is,test,-page', + expect_position: 'text', + description: 'Text range with prefix and suffix' + }, + // Test partially non-matching text ranges + { + fragment: '#:~:text=this,none', + expect_position: 'top', + description: 'Text range with non-matching endText' + }, + { + fragment: '#:~:text=none,page', + expect_position: 'top', + description: 'Text range with non-matching startText' + }, + // Test non-matching context terms + { + fragment: '#:~:text=this-,is,page,-none', + expect_position: 'top', + description: 'Text range with prefix and nonmatching suffix' + }, + { + fragment: '#:~:text=none-,this,test,-page', + expect_position: 'top', + description: 'Text range with nonmatching prefix and matching suffix' + }, + // Test percent encoded characters + { + fragment: '#:~:text=this%20is%20a%20test%20page', + expect_position: 'text', + description: 'Exact text with percent encoded spaces' + }, + { + fragment: '#:~:text=test%20pag', + expect_position: 'top', + description: 'Non-whole-word exact text with spaces' + }, + { + fragment: '#:~:text=%26%2C%2D', + expect_position: 'text', + description: 'Fragment directive with percent encoded syntactical characters "&,-"' + }, + { + fragment: '#:~:text=%2665', + expect_position: 'text', + description: 'Fragment directive with percent encoded non-ASCII unicode character' + }, + { + fragment: '#:~:text=!$\'()*+./:;=?@_~', + expect_position: 'text', + description: 'Fragment directive with all TextMatchChars' + }, + // Test multiple text directives + { + fragment: '#:~:text=this&text=test,page', + expect_position: 'text', + description: 'Multiple matching exact texts' + }, + { + fragment: '#:~:text=tes&text=age', + expect_position: 'top', + description: 'Multiple non-whole-word exact texts' + }, + // Test text directive behavior when there's an element fragment identifier + { + fragment: '#element:~:text=test', + expect_position: 'text', + description: 'Text directive with existing element fragment' + }, + { + fragment: '#pagestate:~:text=test', + expect_position: 'text', + description: 'Text directive with nonexistent element fragment' + }, + { + fragment: '#element:~:text=nomatch', + expect_position: 'element', + description: 'Non-matching text directive with existing element fragment' + }, + { + fragment: '#pagestate:~:text=nomatch', + expect_position: 'top', + description: 'Non-matching text directive with nonexistent element fragment' + }, + // Test ambiguous text matches disambiguated by context terms + { + fragment: '#:~:text=more-,test%20page', + expect_position: 'more-text', + description: 'Multiple match text directive disambiguated by prefix' + }, + { + fragment: '#:~:text=test%20page,-text', + expect_position: 'more-text', + description: 'Multiple match text directive disambiguated by suffix' + }, + { + fragment: '#:~:text=more-,test%20page,-text', + expect_position: 'more-text', + description: 'Multiple match text directive disambiguated by prefix and suffix' + }, + // Test context terms separated by node boundaries + { + fragment: '#:~:text=prefix-,test%20page,-suffix', + expect_position: 'cross-node-context', + description: 'Text directive with context terms separated by node boundaries' + }, ]; -test(t => { - assert_equals(typeof(window.location.fragmentDirective), 'object', 'window.location.fragmentDirective is defined'); -}, 'Scroll to text is feature detectable via window.location.fragmentDirective'); - for (const test_case of test_cases) { promise_test(t => new Promise(resolve => { let channel = new BroadcastChannel('scroll-to-text-fragment'); channel.addEventListener("message", e => { - resolve(e.data.scrollPosition); + resolve(e.data); }, {once: true}); - test_driver.bless('Open a URL with a text fragment anchor', () => { + test_driver.bless('Open a URL with a text fragment directive', () => { window.open('scroll-to-text-fragment-target.html' + test_case.fragment, '_blank', 'noopener'); }); - }).then(scrollPosition => { - assert_equals(scrollPosition, test_case.expect_position, - 'Expected ' + test_case.fragment + ' to scroll to ' + test_case.expect_position); - }), 'Test navigation with text fragment anchor ' + test_case.fragment); + }).then(data => { + assert_equals(data.href.indexOf(':~:'), -1, 'Expected fragment directive to be stripped from the URL.'); + assert_equals(data.scrollPosition, test_case.expect_position, + `Expected ${test_case.fragment} (${test_case.description}) to scroll to ${test_case.expect_position}.`); + }), `Test navigation with fragment: ${test_case.description}`); } + +promise_test(t => new Promise(resolve => { + let channel = new BroadcastChannel('scroll-to-text-fragment'); + channel.addEventListener("message", e => { + assert_equals(e.data.href.indexOf(':~:'), -1, 'Expected fragment directive to be stripped from the URL.'); + + // The first navigation has no user activation. + assert_equals(e.data.scrollPosition, 'top', 'Expected window.open() with no user activation to not activate text fragment directive.'); + + // Now ensure that a navigation with a user activation does activate the text fragment directive. + test_driver.bless('Open a URL with a text fragment directive', () => { + window.open('scroll-to-text-fragment-target.html#:~:text=test', '_blank', 'noopener'); + }); + channel.addEventListener("message", e => { + resolve(e.data.scrollPosition); + }, {once: true}); + }, {once: true}); + + window.open('scroll-to-text-fragment-target.html#:~:text=test', '_blank', 'noopener'); +}).then(scrollPosition => { + assert_equals(scrollPosition, 'text', 'Expected window.open() with a user activation to scroll to text.'); +}), 'Test that a text fragment directive is not activated without a user activation'); + +promise_test(t => new Promise(resolve => { + let channel = new BroadcastChannel('scroll-to-text-fragment'); + channel.addEventListener("message", e => { + assert_equals(e.data.href.indexOf(':~:'), -1, 'Expected fragment directive to be stripped from the URL.'); + + // The first navigation has an opener. + assert_equals(e.data.scrollPosition, 'top', 'Expected window.open() with opener to not activate text fragment directive.'); + + // Now ensure that a navigation with noopener does activate the text fragment directive. + test_driver.bless('Open a URL with a text fragment directive', () => { + window.open('scroll-to-text-fragment-target.html#:~:text=test', '_blank', 'noopener'); + }); + channel.addEventListener("message", e => { + resolve(e.data.scrollPosition); + }, {once: true}); + }, {once: true}); + + test_driver.bless('Open a URL with a text fragment directive', () => { + window.open('scroll-to-text-fragment-target.html#:~:text=test', '_blank'); + }); +}).then(scrollPosition => { + assert_equals(scrollPosition, 'text', 'Expected window.open() with noopener to scroll to text.'); +}), 'Test that a text fragment directive is not activated when there is a window opener.'); + +promise_test(t => new Promise(resolve => { + let channel = new BroadcastChannel('scroll-to-text-fragment'); + channel.addEventListener("message", e => { + resolve(e.data); + }, {once: true}); + + let frame = document.createElement('iframe'); + document.body.appendChild(frame); + + test_driver.bless('Navigate the iframe with a text fragment directive', () => { + frame.src = 'scroll-to-text-fragment-target.html#:~:text=test'; + }); +}).then(data => { + assert_equals(data.href.indexOf(':~:'), -1, 'Expected fragment directive to be stripped from the URL.'); + assert_equals(data.scrollPosition, 'top', 'Expected iframe navigation to not activate text fragment directive.'); +}), 'Test that a text fragment directive is not activated within an iframe.'); </script> diff --git a/tests/wpt/web-platform-tests/sms/README.md b/tests/wpt/web-platform-tests/sms/README.md index 7cd98964c24..1f34178beac 100644 --- a/tests/wpt/web-platform-tests/sms/README.md +++ b/tests/wpt/web-platform-tests/sms/README.md @@ -1,3 +1,3 @@ # SMS Receiver API -This directory contains Web platform tests of the SMS Receiver API. For more details, refer to [this README file](https://cs.chromium.org/chromium/src/content/browser/sms/README.md). +This directory contains tests for the SMS Receiver API. For more details, refer to [this README file](https://cs.chromium.org/chromium/src/content/browser/sms/README.md). diff --git a/tests/wpt/web-platform-tests/speech-api/SpeechSynthesis-speak-events.html b/tests/wpt/web-platform-tests/speech-api/SpeechSynthesis-speak-events.html index babfe3c388e..c559da1f929 100644 --- a/tests/wpt/web-platform-tests/speech-api/SpeechSynthesis-speak-events.html +++ b/tests/wpt/web-platform-tests/speech-api/SpeechSynthesis-speak-events.html @@ -5,14 +5,18 @@ <script src="/resources/testdriver-vendor.js"></script> <body> <script> -async_test(t => { - test_driver.bless('speechSynthesis.speak', t.step_func(() => { - const utter = new SpeechSynthesisUtterance('test'); - utter.onerror = t.unreached_func('error event'); - speechSynthesis.speak(utter); - utter.onstart = t.step_func(() => { - utter.onend = t.step_func_done(); - }); - })); +async function runStartEndTest(t, utterance) { + const eventWatcher = new EventWatcher(t, utterance, ['start', 'end', 'error']); + await test_driver.bless('speechSynthesis.speak', + () => speechSynthesis.speak(utterance)); + await eventWatcher.wait_for(['start', 'end']); +} +promise_test(async (t) => { + const utterance = new SpeechSynthesisUtterance(); + await runStartEndTest(t, utterance); +}, 'speechSynthesis.speak() fires start and end events with empty utterance'); +promise_test(async (t) => { + const utterance = new SpeechSynthesisUtterance('test'); + await runStartEndTest(t, utterance); }, 'speechSynthesis.speak() fires start and end events'); </script> diff --git a/tests/wpt/web-platform-tests/speech-api/historical.html b/tests/wpt/web-platform-tests/speech-api/historical.html index 207d3e016ed..9da70c44de9 100644 --- a/tests/wpt/web-platform-tests/speech-api/historical.html +++ b/tests/wpt/web-platform-tests/speech-api/historical.html @@ -18,11 +18,7 @@ }); test(() => { - if (!window.SpeechRecognition) { - // TODO(foolip): use `t.skip()` after - // https://github.com/web-platform-tests/rfcs/pull/16 is done. - return; - } + assert_precondition('SpeechRecognition' in window, 'SpeechRecognition exposed'); assert_false("serviceURI" in SpeechRecognition.prototype); }, "SpeechRecognition's serviceURI attribute should not exist"); @@ -31,11 +27,7 @@ test(() => { "emma", ].forEach(name => { test(() => { - if (!window.SpeechRecognitionEvent) { - // TODO(foolip): use `t.skip()` after - // https://github.com/web-platform-tests/rfcs/pull/16 is done. - return; - } + assert_precondition('SpeechRecognitionEvent' in window, 'SpeechRecognitionEvent exposed'); assert_false(name in SpeechRecognitionEvent.prototype); }, `SpeechRecognitionEvent's ${name} attribute should not exist`); }); diff --git a/tests/wpt/web-platform-tests/storage-access-api/META.yml b/tests/wpt/web-platform-tests/storage-access-api/META.yml new file mode 100644 index 00000000000..cb059fe6bb1 --- /dev/null +++ b/tests/wpt/web-platform-tests/storage-access-api/META.yml @@ -0,0 +1,2 @@ +suggested_reviewers: + - Brandr0id diff --git a/tests/wpt/web-platform-tests/streams/piping/throwing-options.any.js b/tests/wpt/web-platform-tests/streams/piping/throwing-options.any.js new file mode 100644 index 00000000000..6fab32cc6dc --- /dev/null +++ b/tests/wpt/web-platform-tests/streams/piping/throwing-options.any.js @@ -0,0 +1,64 @@ +// META: global=worker,jsshell + +class ThrowingOptions { + constructor(whatShouldThrow) { + this.whatShouldThrow = whatShouldThrow; + this.touched = []; + } + + get preventClose() { + this.maybeThrow('preventClose'); + return false; + } + + get preventAbort() { + this.maybeThrow('preventAbort'); + return false; + } + + get preventCancel() { + this.maybeThrow('preventCancel'); + return false; + } + + get signal() { + this.maybeThrow('signal'); + return undefined; + } + + maybeThrow(forWhat) { + this.touched.push(forWhat); + if (this.whatShouldThrow === forWhat) { + throw new Error(this.whatShouldThrow); + } + } +} + +const checkOrder = ['preventClose', 'preventAbort', 'preventCancel', 'signal']; + +for (let i = 0; i < checkOrder.length; ++i) { + const whatShouldThrow = checkOrder[i]; + const whatShouldBeTouched = checkOrder.slice(0, i + 1); + + promise_test(t => { + const options = new ThrowingOptions(whatShouldThrow); + return promise_rejects( + t, new Error(), + new ReadableStream().pipeTo(new WritableStream(), options), + 'pipeTo should reject') + .then(() => assert_array_equals( + options.touched, whatShouldBeTouched, + 'options should be touched in the right order')); + }, `pipeTo should stop after getting ${whatShouldThrow} throws`); + + test(() => { + const options = new ThrowingOptions(whatShouldThrow); + assert_throws( + new Error(), + () => new ReadableStream().pipeThrough(new TransformStream(), options), + 'pipeThrough should throw'); + assert_array_equals( + options.touched, whatShouldBeTouched, + 'options should be touched in the right order'); + }, `pipeThrough should stop after getting ${whatShouldThrow} throws`); +} diff --git a/tests/wpt/web-platform-tests/svg/animations/short-simple-duration-and-fractional-repeatcount.html b/tests/wpt/web-platform-tests/svg/animations/short-simple-duration-and-fractional-repeatcount.html new file mode 100644 index 00000000000..025dd5092d3 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/animations/short-simple-duration-and-fractional-repeatcount.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<title>Short simple duration and fractional repeatCount does not hang</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<svg> + <rect width="100" height="100" fill="blue"> + <animate attributeName="fill" from="red" to="orange" + begin="-10ms" dur="0.001ms" repeatCount="0.5"/> + </rect> +</svg> +<script> + async_test(t => { + onload = t.step_func(() => { + requestAnimationFrame(t.step_func(() => { + requestAnimationFrame(t.step_func_done(() => { + let rect = document.querySelector("rect"); + assert_equals(getComputedStyle(rect).fill, 'rgb(0, 0, 255)'); + })); + })); + }); + }); +</script> diff --git a/tests/wpt/web-platform-tests/svg/animations/switching-animated-target-to-unknown-element.html b/tests/wpt/web-platform-tests/svg/animations/switching-animated-target-to-unknown-element.html new file mode 100644 index 00000000000..fef86a723ee --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/animations/switching-animated-target-to-unknown-element.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<title>Switching animated target to an unknown element</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<svg height="0"> + <path id="path"> + <animateMotion/> + </path> + <unknown id="unknown"></unknown> +</svg> +<script> + async_test(t => { + let path = document.getElementById("path"); + let anim = path.firstElementChild; + t.step_timeout(() => { + path.appendChild(document.createElementNS('http://www.w3.org/2000/svg', 'animateMotion')); + anim.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', '#unknown'); + requestAnimationFrame(t.step_func(() => { + requestAnimationFrame(t.step_func_done()); + })); + }); + }); +</script> diff --git a/tests/wpt/web-platform-tests/svg/layout/svg-with-precent-dimensions-relayout-ref.html b/tests/wpt/web-platform-tests/svg/layout/svg-with-precent-dimensions-relayout-ref.html new file mode 100644 index 00000000000..1a15a9f2b89 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/layout/svg-with-precent-dimensions-relayout-ref.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<link rel="help" href="https://crbug.com/1016759"> +<body> +<span style="position:relative; font-size:100px;"> + <br> + <svg style="position:absolute; border:1px solid black; width:100%; height:100%;"> + <rect x="10" y="10" width="100" height="100" fill="red" id="child" stroke="blue" stroke-width="5px"/> + </svg> +</span> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/svg/layout/svg-with-precent-dimensions-relayout.html b/tests/wpt/web-platform-tests/svg/layout/svg-with-precent-dimensions-relayout.html new file mode 100644 index 00000000000..9d04f412b70 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/layout/svg-with-precent-dimensions-relayout.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title> + Ensure SVGs with percentage dimensions do not overflow auto-sized parents on + child-initiated re-layout. +</title> +<link rel="help" href="https://crbug.com/1016759"> +<link rel=match href="svg-with-precent-dimensions-relayout-ref.html"> +<body> +<span style="position:relative; font-size:100px;"> + <br> + <svg style="position:absolute; border:1px solid black; width:100%; height:100%;"> + <rect x="10" y="10" width="100" height="100" fill="red" id="child" stroke="blue" stroke-width="20px"/> + </svg> +</span> +</body> +<script> + document.body.offsetTop; + document.getElementById("child").setAttribute('stroke-width', '5px'); +</script> +</html> diff --git a/tests/wpt/web-platform-tests/tools/requirements_flake8.txt b/tests/wpt/web-platform-tests/tools/requirements_flake8.txt index 16e35cf5aa9..ae35da67e53 100644 --- a/tests/wpt/web-platform-tests/tools/requirements_flake8.txt +++ b/tests/wpt/web-platform-tests/tools/requirements_flake8.txt @@ -1,4 +1,4 @@ flake8==3.7.9 pycodestyle==2.5.0 pyflakes==2.1.1 -pep8-naming==0.8.2 +pep8-naming==0.9.0 diff --git a/tests/wpt/web-platform-tests/tools/tox.ini b/tests/wpt/web-platform-tests/tools/tox.ini index 63fb8ed9832..a330d052348 100644 --- a/tests/wpt/web-platform-tests/tools/tox.ini +++ b/tests/wpt/web-platform-tests/tools/tox.ini @@ -14,6 +14,7 @@ commands = pytest {posargs} passenv = HYPOTHESIS_PROFILE PY_COLORS + TASKCLUSTER_ROOT_URL [testenv:py27-flake8] deps = -rrequirements_flake8.txt diff --git a/tests/wpt/web-platform-tests/tools/webdriver/README.md b/tests/wpt/web-platform-tests/tools/webdriver/README.md index 72de3b2ae8b..2795ff1fcf3 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/README.md +++ b/tests/wpt/web-platform-tests/tools/webdriver/README.md @@ -9,7 +9,7 @@ implementation compliance to the specification in mind, so that different remote end drivers can determine whether they meet the recognised standard. The client is used for the WebDriver specification tests -in the [Web Platform Tests](https://github.com/web-platform-tests/wpt). +in [web-platform-tests](https://github.com/web-platform-tests/wpt). ## Installation @@ -24,11 +24,11 @@ which is useful if you want to contribute patches back: % cd /path/to/wdclient % python - Python 2.7.12+ (default, Aug 4 2016, 20:04:34) + Python 2.7.12+ (default, Aug 4 2016, 20:04:34) [GCC 6.1.1 20160724] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import webdriver - >>> + >>> If you are writing WebDriver specification tests for [WPT](https://github.com/web-platform-tests/wpt), diff --git a/tests/wpt/web-platform-tests/tools/wpt/run.py b/tests/wpt/web-platform-tests/tools/wpt/run.py index 25255320fa9..44dfbc25fa5 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/run.py +++ b/tests/wpt/web-platform-tests/tools/wpt/run.py @@ -347,6 +347,10 @@ class Chrome(BrowserSetup): kwargs["binary_args"].append("--enable-experimental-web-platform-features") # HACK(Hexcles): work around https://github.com/web-platform-tests/wpt/issues/16448 kwargs["webdriver_args"].append("--disable-build-check") + if os.getenv("TASKCLUSTER_ROOT_URL"): + # We are on Taskcluster, where our Docker container does not have + # enough capabilities to run Chrome with sandboxing. (gh-20133) + kwargs["binary_args"].append("--no-sandbox") class ChromeAndroid(BrowserSetup): diff --git a/tests/wpt/web-platform-tests/tools/wpt/tox.ini b/tests/wpt/web-platform-tests/tools/wpt/tox.ini index d0dead55d9a..6a044473a6b 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/tox.ini +++ b/tests/wpt/web-platform-tests/tools/wpt/tox.ini @@ -14,3 +14,6 @@ deps = commands = pytest {posargs} + +passenv = + TASKCLUSTER_ROOT_URL diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt index d8a6c898d24..60775f8259e 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt @@ -5,4 +5,4 @@ mozdebug==0.1.1 pillow==6.2.1 urllib3[secure]==1.25.6 requests==2.22.0 -six==1.12.0 +six==1.13.0 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_epiphany.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_epiphany.txt index 9115b7ac4e8..470aaf9a939 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_epiphany.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_epiphany.txt @@ -1 +1 @@ -mozprocess == 0.26 +mozprocess==1.0.0 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt index 85efd35486d..f49102b8a89 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt @@ -8,4 +8,4 @@ mozprocess==1.0.0 mozprofile==2.4.0 mozrunner==7.7.0 mozversion==2.2.0 -psutil==5.6.3 +psutil==5.6.5 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_webkit.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_webkit.txt index f85779a40bd..470aaf9a939 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_webkit.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_webkit.txt @@ -1 +1 @@ -mozprocess==0.26 +mozprocess==1.0.0 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini b/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini index 5d343751c54..f82dbc6b8a8 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini +++ b/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini @@ -24,3 +24,6 @@ deps = commands = pytest {posargs} setenv = CURRENT_TOX_ENV = {envname} + +passenv = + TASKCLUSTER_ROOT_URL diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py index 004b92b4b66..f20f735528c 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py @@ -58,12 +58,14 @@ def strip_server(url): class TestharnessResultConverter(object): harness_codes = {0: "OK", 1: "ERROR", - 2: "TIMEOUT"} + 2: "TIMEOUT", + 3: "PRECONDITION_FAILED"} test_codes = {0: "PASS", 1: "FAIL", 2: "TIMEOUT", - 3: "NOTRUN"} + 3: "NOTRUN", + 4: "PRECONDITION_FAILED"} def __call__(self, test, result, extra=None): """Convert a JSON result into a (TestResult, [SubtestResult]) tuple""" @@ -597,7 +599,14 @@ class CallbackHandler(object): "click": ClickAction(self.logger, self.protocol), "send_keys": SendKeysAction(self.logger, self.protocol), "action_sequence": ActionSequenceAction(self.logger, self.protocol), - "generate_test_report": GenerateTestReportAction(self.logger, self.protocol) + "generate_test_report": GenerateTestReportAction(self.logger, self.protocol), + "add_virtual_authenticator": AddVirtualAuthenticatorAction(self.logger, self.protocol), + "remove_virtual_authenticator": RemoveVirtualAuthenticatorAction(self.logger, self.protocol), + "add_credential": AddCredentialAction(self.logger, self.protocol), + "get_credentials": GetCredentialsAction(self.logger, self.protocol), + "remove_credential": RemoveCredentialAction(self.logger, self.protocol), + "remove_all_credentials": RemoveAllCredentialsAction(self.logger, self.protocol), + "set_user_verified": SetUserVerifiedAction(self.logger, self.protocol), } def __call__(self, result): @@ -692,3 +701,80 @@ class GenerateTestReportAction(object): message = payload["message"] self.logger.debug("Generating test report: %s" % message) self.protocol.generate_test_report.generate_test_report(message) + +class AddVirtualAuthenticatorAction(object): + def __init__(self, logger, protocol): + self.logger = logger + self.protocol = protocol + + def __call__(self, payload): + self.logger.debug("Adding virtual authenticator") + config = payload["config"] + authenticator_id = self.protocol.virtual_authenticator.add_virtual_authenticator(config) + self.logger.debug("Authenticator created with ID %s" % authenticator_id) + return authenticator_id + +class RemoveVirtualAuthenticatorAction(object): + def __init__(self, logger, protocol): + self.logger = logger + self.protocol = protocol + + def __call__(self, payload): + authenticator_id = payload["authenticator_id"] + self.logger.debug("Removing virtual authenticator %s" % authenticator_id) + return self.protocol.virtual_authenticator.remove_virtual_authenticator(authenticator_id) + + +class AddCredentialAction(object): + def __init__(self, logger, protocol): + self.logger = logger + self.protocol = protocol + + def __call__(self, payload): + authenticator_id = payload["authenticator_id"] + credential = payload["credential"] + self.logger.debug("Adding credential to virtual authenticator %s " % authenticator_id) + return self.protocol.virtual_authenticator.add_credential(authenticator_id, credential) + +class GetCredentialsAction(object): + def __init__(self, logger, protocol): + self.logger = logger + self.protocol = protocol + + def __call__(self, payload): + authenticator_id = payload["authenticator_id"] + self.logger.debug("Getting credentials from virtual authenticator %s " % authenticator_id) + return self.protocol.virtual_authenticator.get_credentials(authenticator_id) + +class RemoveCredentialAction(object): + def __init__(self, logger, protocol): + self.logger = logger + self.protocol = protocol + + def __call__(self, payload): + authenticator_id = payload["authenticator_id"] + credential_id = payload["credential_id"] + self.logger.debug("Removing credential %s from authenticator %s" % (credential_id, authenticator_id)) + return self.protocol.virtual_authenticator.remove_credential(authenticator_id, credential_id) + +class RemoveAllCredentialsAction(object): + def __init__(self, logger, protocol): + self.logger = logger + self.protocol = protocol + + def __call__(self, payload): + authenticator_id = payload["authenticator_id"] + self.logger.debug("Removing all credentials from authenticator %s" % authenticator_id) + return self.protocol.virtual_authenticator.remove_all_credentials(authenticator_id) + +class SetUserVerifiedAction(object): + def __init__(self, logger, protocol): + self.logger = logger + self.protocol = protocol + + def __call__(self, payload): + authenticator_id = payload["authenticator_id"] + uv = payload["uv"] + self.logger.debug( + "Setting user verified flag on authenticator %s to %s" % (authenticator_id, uv["isUserVerified"])) + return self.protocol.virtual_authenticator.set_user_verified(authenticator_id, uv) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py index a2601978b57..344debf8aa6 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py @@ -22,7 +22,8 @@ from .protocol import (BaseProtocolPart, SendKeysProtocolPart, ActionSequenceProtocolPart, TestDriverProtocolPart, - GenerateTestReportProtocolPart) + GenerateTestReportProtocolPart, + VirtualAuthenticatorProtocolPart) from ..testrunner import Stop import webdriver as client @@ -202,6 +203,31 @@ class WebDriverGenerateTestReportProtocolPart(GenerateTestReportProtocolPart): json_message = {"message": message} self.webdriver.send_session_command("POST", "reporting/generate_test_report", json_message) +class WebDriverVirtualAuthenticatorProtocolPart(VirtualAuthenticatorProtocolPart): + def setup(self): + self.webdriver = self.parent.webdriver + + def add_virtual_authenticator(self, config): + return self.webdriver.send_session_command("POST", "webauthn/authenticator", config) + + def remove_virtual_authenticator(self, authenticator_id): + return self.webdriver.send_session_command("DELETE", "webauthn/authenticator/%s" % authenticator_id) + + def add_credential(self, authenticator_id, credential): + return self.webdriver.send_session_command("POST", "webauthn/authenticator/%s/credential" % authenticator_id, credential) + + def get_credentials(self, authenticator_id): + return self.webdriver.send_session_command("GET", "webauthn/authenticator/%s/credentials" % authenticator_id) + + def remove_credential(self, authenticator_id, credential_id): + return self.webdriver.send_session_command("DELETE", "webauthn/authenticator/%s/credentials/%s" % (authenticator_id, credential_id)) + + def remove_all_credentials(self, authenticator_id): + return self.webdriver.send_session_command("DELETE", "webauthn/authenticator/%s/credentials" % authenticator_id) + + def set_user_verified(self, authenticator_id, uv): + return self.webdriver.send_session_command("POST", "webauthn/authenticator/%s/uv" % authenticator_id, uv) + class WebDriverProtocol(Protocol): implements = [WebDriverBaseProtocolPart, @@ -211,7 +237,8 @@ class WebDriverProtocol(Protocol): WebDriverSendKeysProtocolPart, WebDriverActionSequenceProtocolPart, WebDriverTestDriverProtocolPart, - WebDriverGenerateTestReportProtocolPart] + WebDriverGenerateTestReportProtocolPart, + WebDriverVirtualAuthenticatorProtocolPart] def __init__(self, executor, browser, capabilities, **kwargs): super(WebDriverProtocol, self).__init__(executor, browser) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py index 77a705ffb47..0758312d65f 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py @@ -365,3 +365,62 @@ class CoverageProtocolPart(ProtocolPart): def dump(self): """Dump coverage counters""" pass + +class VirtualAuthenticatorProtocolPart(ProtocolPart): + """Protocol part for creating and manipulating virtual authenticators""" + __metaclass__ = ABCMeta + + name = "virtual_authenticator" + + @abstractmethod + def add_virtual_authenticator(self, config): + """Add a virtual authenticator + + :param config: The Authenticator Configuration""" + pass + + @abstractmethod + def remove_virtual_authenticator(self, authenticator_id): + """Remove a virtual authenticator + + :param str authenticator_id: The ID of the authenticator to remove""" + pass + + @abstractmethod + def add_credential(self, authenticator_id, credential): + """Inject a credential onto an authenticator + + :param str authenticator_id: The ID of the authenticator to add the credential to + :param credential: The credential to inject""" + pass + + @abstractmethod + def get_credentials(self, authenticator_id): + """Get the credentials stored in an authenticator + + :param str authenticator_id: The ID of the authenticator + :returns: An array with the credentials stored on the authenticator""" + pass + + @abstractmethod + def remove_credential(self, authenticator_id, credential_id): + """Remove a credential stored in an authenticator + + :param str authenticator_id: The ID of the authenticator + :param str credential_id: The ID of the credential""" + pass + + @abstractmethod + def remove_all_credentials(self, authenticator_id): + """Remove all the credentials stored in an authenticator + + :param str authenticator_id: The ID of the authenticator""" + pass + + @abstractmethod + def set_user_verified(self, authenticator_id, uv): + """Sets the user verified flag on an authenticator + + :param str authenticator_id: The ID of the authenticator + :param bool uv: the user verified flag""" + pass diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js index 9f97fac9a0c..278f226dbd2 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js @@ -108,7 +108,7 @@ else action.frame = {frame: frame}; action.origin = {selector: get_selector(action.origin)}; - } + } } } } @@ -125,4 +125,67 @@ window.__wptrunner_message_queue.push({"type": "action", "action": "generate_test_report", "message": message}); return pending_promise; }; + + window.test_driver_internal.add_virtual_authenticator = function(config) { + const pending_promise = new Promise(function(resolve, reject) { + pending_resolve = resolve; + pending_reject = reject; + }); + window.__wptrunner_message_queue.push({"type": "action", "action": "add_virtual_authenticator", config}); + return pending_promise; + }; + + window.test_driver_internal.remove_virtual_authenticator = function(authenticator_id) { + const pending_promise = new Promise(function(resolve, reject) { + pending_resolve = resolve; + pending_reject = reject; + }); + window.__wptrunner_message_queue.push({"type": "action", "action": "remove_virtual_authenticator", authenticator_id}); + return pending_promise; + }; + + window.test_driver_internal.add_credential = function(authenticator_id, credential) { + const pending_promise = new Promise(function(resolve, reject) { + pending_resolve = resolve; + pending_reject = reject; + }); + window.__wptrunner_message_queue.push({"type": "action", "action": "add_credential", authenticator_id, credential}); + return pending_promise; + }; + + window.test_driver_internal.get_credentials = function(authenticator_id) { + const pending_promise = new Promise(function(resolve, reject) { + pending_resolve = resolve; + pending_reject = reject; + }); + window.__wptrunner_message_queue.push({"type": "action", "action": "get_credentials", authenticator_id}); + return pending_promise; + }; + + window.test_driver_internal.remove_credential = function(authenticator_id, credential_id) { + const pending_promise = new Promise(function(resolve, reject) { + pending_resolve = resolve; + pending_reject = reject; + }); + window.__wptrunner_message_queue.push({"type": "action", "action": "remove_credential", authenticator_id, credential_id}); + return pending_promise; + }; + + window.test_driver_internal.remove_all_credentials = function(authenticator_id) { + const pending_promise = new Promise(function(resolve, reject) { + pending_resolve = resolve; + pending_reject = reject; + }); + window.__wptrunner_message_queue.push({"type": "action", "action": "remove_all_credentials", authenticator_id}); + return pending_promise; + }; + + window.test_driver_internal.set_user_verified = function(authenticator_id, uv) { + const pending_promise = new Promise(function(resolve, reject) { + pending_resolve = resolve; + pending_reject = reject; + }); + window.__wptrunner_message_queue.push({"type": "action", "action": "set_user_verified", authenticator_id, uv}); + return pending_promise; + }; })(); diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py index 80db17a3c72..e5c28bc4731 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py @@ -47,12 +47,12 @@ class SubtestResult(object): class TestharnessResult(Result): default_expected = "OK" - statuses = {"OK", "ERROR", "INTERNAL-ERROR", "TIMEOUT", "EXTERNAL-TIMEOUT", "CRASH"} + statuses = {"OK", "ERROR", "INTERNAL-ERROR", "TIMEOUT", "EXTERNAL-TIMEOUT", "CRASH", "PRECONDITION_FAILED"} class TestharnessSubtestResult(SubtestResult): default_expected = "PASS" - statuses = {"PASS", "FAIL", "TIMEOUT", "NOTRUN"} + statuses = {"PASS", "FAIL", "TIMEOUT", "NOTRUN", "PRECONDITION_FAILED"} class ReftestResult(Result): diff --git a/tests/wpt/web-platform-tests/trusted-types/support/navigation-report-only-support.html b/tests/wpt/web-platform-tests/trusted-types/support/navigation-report-only-support.html new file mode 100644 index 00000000000..d00d0538753 --- /dev/null +++ b/tests/wpt/web-platform-tests/trusted-types/support/navigation-report-only-support.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<head> +</head> +<body> +<p>Support page for trusted-types-navigation-report-only.*.html tests.</p> +<a id="anchor" href="#">link</a> +<script> + if (location.search == "?defaultpolicy") { + trustedTypes.createPolicy("default", { + createScript: s => s.replace("continue", "defaultpolicywashere"), + }); + } + + function bounceEventToOpener(e) { + const msg = {}; + for (const field of ["effectiveDirective", "sample", "type"]) { + msg[field] = e[field]; + } + msg["uri"] = location.href; + window.opener.postMessage(msg, "*"); + } + + // If a navigation is blocked by Trusted Types, we expect this window to + // throw a SecurityPolicyViolationEvent. If it's not blocked, we expect the + // loaded frame to through DOMContentLoaded. In either case there should be + // _some_ event that we can expect. + document.addEventListener("DOMContentLoaded", bounceEventToOpener); + document.addEventListener("securitypolicyviolation", bounceEventToOpener); + + // Navigate to the non-report-only version of the test. That has the same + // event listening setup as this, but is a different target URI. + const target_script = `location.href='${location.href.replace("-report-only", "") + "#continue"}';`; + const target = `javascript:"<script>${target_script}</scri${""}pt>"`; + + // Navigate the anchor, but only after the content is loaded (so that we + // won't disturb delivery of that event to the opener. + const anchor = document.getElementById("anchor"); + anchor.href = target; + if (!location.hash) { + document.addEventListener("DOMContentLoaded", _ => anchor.click()); + } +</script> +</body> + diff --git a/tests/wpt/web-platform-tests/trusted-types/support/navigation-report-only-support.html.headers b/tests/wpt/web-platform-tests/trusted-types/support/navigation-report-only-support.html.headers new file mode 100644 index 00000000000..fa87952ae48 --- /dev/null +++ b/tests/wpt/web-platform-tests/trusted-types/support/navigation-report-only-support.html.headers @@ -0,0 +1 @@ +Content-Security-Policy-Report-Only: trusted-types * diff --git a/tests/wpt/web-platform-tests/trusted-types/support/navigation-support.html b/tests/wpt/web-platform-tests/trusted-types/support/navigation-support.html new file mode 100644 index 00000000000..cd41f3968e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/trusted-types/support/navigation-support.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<head> +</head> +<body> +<p>Support page for trusted-types-navigation.*.html tests.</p> +<a id="anchor" href="#">link</a> +<script> + if (location.search == "?defaultpolicy") { + trustedTypes.createPolicy("default", { + createScript: s => s.replace("continue", "defaultpolicywashere"), + }); + } + + function bounceEventToOpener(e) { + const msg = {}; + for (const field of ["effectiveDirective", "sample", "type"]) { + msg[field] = e[field]; + } + msg["uri"] = location.href; + window.opener.postMessage(msg, "*"); + } + + // If a navigation is blocked by Trusted Types, we expect this window to + // throw a SecurityPolicyViolationEvent. If it's not blocked, we expect the + // loaded frame to through DOMContentLoaded. In either case there should be + // _some_ event that we can expect. + document.addEventListener("DOMContentLoaded", bounceEventToOpener); + document.addEventListener("securitypolicyviolation", bounceEventToOpener); + + // We'll use a javascript:-url to navigate to ourselves, so that we can + // re-use the messageing mechanisms above. In order to not end up in a loop, + // we'll only click if we don't find fragment in the current URL. + const target_script = `location.href='${location.href}&continue';`; + const target = `javascript:"<script>${target_script}</scri${""}pt>"`; + + const anchor = document.getElementById("anchor"); + anchor.href = target; + if (!location.hash) + document.addEventListener("DOMContentLoaded", _ => anchor.click()); +</script> +</body> + diff --git a/tests/wpt/web-platform-tests/trusted-types/support/navigation-support.html.headers b/tests/wpt/web-platform-tests/trusted-types/support/navigation-support.html.headers new file mode 100644 index 00000000000..1bc33add09b --- /dev/null +++ b/tests/wpt/web-platform-tests/trusted-types/support/navigation-support.html.headers @@ -0,0 +1 @@ +Content-Security-Policy: trusted-types * diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-createHTMLDocument.tentative.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-createHTMLDocument.tentative.html new file mode 100644 index 00000000000..7a43b1f7b35 --- /dev/null +++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-createHTMLDocument.tentative.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/content-security-policy/support/testharness-helper.js"></script> + <meta http-equiv="Content-Security-Policy" content="trusted-types *"> +</head> +<body> +<script> + +test(t => { + function try_assign(doc) { + doc.createElement("script").textContent = "2+2"; + } + assert_throws(new TypeError(), + _ => try_assign(document), + "Trusted Type assignment throws in main document"); + assert_throws(new TypeError(), + _ => try_assign(document.implementation.createHTMLDocument("")), + "Trusted Type assignment throws in created document"); +}, "Trusted Types work in createHTMLDocument"); + +test(t => { + const policy = trustedTypes.createPolicy("policy", {createHTML: x => x }); + const value = policy.createHTML("hello"); + const doc = document.implementation.createHTMLDocument(""); + doc.body.innerHTML = value; + assert_equals(doc.body.textContent, "hello"); + assert_throws(new TypeError(), + _ => { doc.body.innerHTML = "world"; }, + "Cannot assign text value."); + assert_equals(doc.body.textContent, "hello"); +}, "Trusted Type instances can be used in createHTMLDocument"); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-navigation.tentative.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-navigation.tentative.html new file mode 100644 index 00000000000..7f17c64e570 --- /dev/null +++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-navigation.tentative.html @@ -0,0 +1,65 @@ +<!DOCTYPE html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> +</head> +<body> +<script> + function expectMessage(filter) { + return new Promise(resolve => { + window.addEventListener("message", e => { if (filter(e)) resolve(); }); + }); + } + + function expectViolationAsMessage(sample) { + const filter = e => (e.data.effectiveDirective == "trusted-types" && + (!sample || e.data.sample.startsWith(sample))); + return new expectMessage(filter); + } + + function expectLoadedAsMessage(uri) { + const filter = e => (e.data.type == "DOMContentLoaded" && + (!uri || e.data.uri.endsWith(uri))); + return new expectMessage(filter); + } + + function openWindow(test, uri) { + const win = window.open(uri); + test.add_cleanup(_ => win.close()); + } + + promise_test(t => { + openWindow(t, "support/navigation-support.html"); + return Promise.all([ + expectLoadedAsMessage("navigation-support.html"), + expectViolationAsMessage("Location.href"), + ]); + }, "Navigate a window with javascript:-urls in enforcing mode."); + + promise_test(t => { + openWindow(t, "support/navigation-support.html?defaultpolicy"); + return Promise.all([ + expectLoadedAsMessage("navigation-support.html?defaultpolicy"), + expectLoadedAsMessage("navigation-support.html?defaultpolicy&defaultpolicywashere"), + ]); + }, "Navigate a window with javascript:-urls w/ default policy in enforcing mode."); + + promise_test(t => { + const page = "navigation-report-only-support.html" + openWindow(t, `support/${page}`); + return Promise.all([ + expectLoadedAsMessage(page), + expectLoadedAsMessage("navigation-support.html#continue"), + ]); + }, "Navigate a window with javascript:-urls in report-only mode."); + + promise_test(t => { + const page = "navigation-report-only-support.html?defaultpolicy"; + openWindow(t, `support/${page}`); + return Promise.all([ + expectLoadedAsMessage(page), + expectLoadedAsMessage("navigation-support.html?defaultpolicy#defaultpolicywashere"), + ]); + }, "Navigate a window with javascript:-urls w/ default policy in report-only mode."); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/upgrade-insecure-requests/README.md b/tests/wpt/web-platform-tests/upgrade-insecure-requests/README.md index 516e8e262f4..7b7ac65c990 100644 --- a/tests/wpt/web-platform-tests/upgrade-insecure-requests/README.md +++ b/tests/wpt/web-platform-tests/upgrade-insecure-requests/README.md @@ -1,4 +1,4 @@ -# Upgrade-insecure-requests Web Platform Tests +# Upgrade Insecure Requests Test Suite The subdirectory `gen/` is generated using the generator at `common/security-features`. See [common/security-features/README.md](../common/security-features/README.md) for how to generate tests. diff --git a/tests/wpt/web-platform-tests/vibration/invalid-values.html b/tests/wpt/web-platform-tests/vibration/invalid-values.html index 6740a44a8ed..9381dadcc06 100644 --- a/tests/wpt/web-platform-tests/vibration/invalid-values.html +++ b/tests/wpt/web-platform-tests/vibration/invalid-values.html @@ -8,6 +8,7 @@ <div id='log'></div> <script> test(function() { + assert_precondition(navigator.vibrate, 'navigator.vibrate exists'); assert_throws(new TypeError(), function() { navigator.vibrate(); }, 'Argument is required, so was expecting a TypeError.'); diff --git a/tests/wpt/web-platform-tests/visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini b/tests/wpt/web-platform-tests/visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini index 75e29ae4c42..f8d682fbf90 100644 --- a/tests/wpt/web-platform-tests/visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini +++ b/tests/wpt/web-platform-tests/visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini @@ -1,4 +1,6 @@ [viewport-no-resize-event-on-overflow-recalc.html] expected: TIMEOUT [Resize event not fired at window.visualViewport when content is added] - expected: NOTRUN + expected: + if (os == "android"): ["PASS", "NOTRUN"] + NOTRUN diff --git a/tests/wpt/web-platform-tests/web-animations/idlharness.window.js b/tests/wpt/web-platform-tests/web-animations/idlharness.window.js new file mode 100644 index 00000000000..c32016280e6 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/idlharness.window.js @@ -0,0 +1,20 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js + +'use strict'; + +idl_test( + ['web-animations'], + ['dom', 'html'], + idl_array => { + idl_array.add_objects({ + Animation: ['new Animation()'], + AnimationPlaybackEvent: ['new AnimationPlaybackEvent("cancel")'], + Document: ['document'], + DocumentTimeline: ['document.timeline'], + KeyframeEffect: ['new KeyframeEffect(null, null)'], + ShadowRoot: ['shadowRoot'], + }); + self.shadowRoot = document.createElement("div").attachShadow({mode: "open"}); + } +); diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/idlharness.window.js b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/idlharness.window.js deleted file mode 100644 index 14b8395a217..00000000000 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/idlharness.window.js +++ /dev/null @@ -1,21 +0,0 @@ -// META: script=/resources/WebIDLParser.js -// META: script=/resources/idlharness.js - -// https://w3c.github.io/web-animations/#animation - -'use strict'; - -promise_test(async () => { - const srcs = ['web-animations', 'dom', 'html']; - const [idl, dom, html] = await Promise.all( - srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text()))); - - const idlArray = new IdlArray(); - idlArray.add_idls(idl, {only: ['Animation', 'AnimationPlayState']}); - idlArray.add_dependency_idls(idl); - idlArray.add_dependency_idls(dom); - idlArray.add_dependency_idls(html); - idlArray.add_untested_idls('interface CSSPseudoElement {};'); - idlArray.add_objects( { Animation: ['new Animation()'] } ); - idlArray.test(); -}, 'Animation interface.'); diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationPlaybackEvent/idlharness.window.js b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationPlaybackEvent/idlharness.window.js deleted file mode 100644 index 5124e509572..00000000000 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationPlaybackEvent/idlharness.window.js +++ /dev/null @@ -1,26 +0,0 @@ -// META: script=/resources/WebIDLParser.js -// META: script=/resources/idlharness.js - -// https://w3c.github.io/web-animations/#animationplaybackevent - -'use strict'; - -promise_test(async () => { - const srcs = ['web-animations', 'dom']; - const [idl, dom] = await Promise.all( - srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text()))); - - const idlArray = new IdlArray(); - idlArray.add_idls(idl, { - only: [ - 'AnimationPlaybackEventInit', - 'AnimationPlaybackEvent', - ] - }); - idlArray.add_dependency_idls(dom); - idlArray.add_objects({ - AnimationPlaybackEvent: ['new AnimationPlaybackEvent("cancel")'], - }); - - idlArray.test(); -}, 'AnimationPlaybackEvent interface.'); diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/DocumentTimeline/idlharness.window.js b/tests/wpt/web-platform-tests/web-animations/interfaces/DocumentTimeline/idlharness.window.js deleted file mode 100644 index 395d133f482..00000000000 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/DocumentTimeline/idlharness.window.js +++ /dev/null @@ -1,22 +0,0 @@ -// META: script=/resources/WebIDLParser.js -// META: script=/resources/idlharness.js - -// https://w3c.github.io/web-animations/#documenttimeline - -'use strict'; - -promise_test(async () => { - const text = await fetch('/interfaces/web-animations.idl').then(r => r.text()); - const idlArray = new IdlArray(); - idlArray.add_idls(text, { - only: [ - 'AnimationTimeline', - 'DocumentTimelineOptions', - 'DocumentTimeline', - ] - }); - idlArray.add_objects({ DocumentTimeline: ['document.timeline'] }); - - idlArray.test(); - done(); -}, 'DocumentTimeline interface.'); diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/idlharness.window.js b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/idlharness.window.js deleted file mode 100644 index 22548861ae3..00000000000 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/idlharness.window.js +++ /dev/null @@ -1,31 +0,0 @@ -// META: script=/resources/WebIDLParser.js -// META: script=/resources/idlharness.js - -// https://w3c.github.io/web-animations/#keyframeeffect - -'use strict'; - -promise_test(async () => { - const srcs = ['web-animations', 'html']; - const [idl, html] = await Promise.all( - srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text()))); - - const idlArray = new IdlArray(); - idlArray.add_idls(idl, { - only: [ - 'IterationCompositeOperation', - 'CompositeOperation', - 'KeyframeEffectOptions', - 'KeyframeEffect', - ] - }); - idlArray.add_untested_idls('interface CSSPseudoElement {};'); - idlArray.add_dependency_idls(idl); - idlArray.add_dependency_idls(html); - idlArray.add_objects({ - KeyframeEffect: ['new KeyframeEffect(null, null)'], - }); - - idlArray.test(); - done(); -}, 'KeyframeEffect interface.'); diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFMessage_constructor.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFMessage_constructor.https.html index a6a2e6bd67c..ce212136023 100644 --- a/tests/wpt/web-platform-tests/web-nfc/NDEFMessage_constructor.https.html +++ b/tests/wpt/web-platform-tests/web-nfc/NDEFMessage_constructor.https.html @@ -30,13 +30,6 @@ const decoder = new TextDecoder(); assert_equals(decoder.decode(message.records[0].data), test_text_data, 'data contains the same text content'); - assert_true(typeof message.records[0].text() === 'string'); - assert_equals(message.records[0].text(), test_text_data, - 'text() contains the same text content'); - assert_true(message.records[0].arrayBuffer() instanceof ArrayBuffer, - 'arrayBuffer() returns an ArrayBuffer'); - assert_equals(message.records[0].json(), null, - 'json() returns null'); }, 'NDEFMessage constructor with a text record'); </script> diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFReader_options.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFReader_options.https.html index 389fff9e041..b1452c0240d 100644 --- a/tests/wpt/web-platform-tests/web-nfc/NDEFReader_options.https.html +++ b/tests/wpt/web-platform-tests/web-nfc/NDEFReader_options.https.html @@ -16,56 +16,49 @@ const NDEFReaderOptionTests = desc: "Test that reading data succeed when NDEFScanOptions'" + " recordType is set to 'empty'.", scanOptions: {recordType: "empty"}, - unmatchedScanOptions: {recordType: "json"}, + unmatchedScanOptions: {recordType: "mime"}, message: createMessage([createRecord('empty', '')]) }, { desc: "Test that reading data succeed when NDEFScanOptions'" + - " recordType is set to 'json'.", - scanOptions: {recordType: "json"}, + " recordType is set to 'mime'.", + scanOptions: {recordType: "mime"}, unmatchedScanOptions: {recordType: "url"}, - message: createMessage([createJsonRecord(test_json_data)]) - }, - { - desc: "Test that reading data succeed when NDEFScanOptions'" + - " recordType is set to 'opaque'.", - scanOptions: {recordType: "opaque"}, - unmatchedScanOptions: {recordType: "json"}, - message: createMessage([createOpaqueRecord(test_buffer_data)]) + message: createMessage([createMimeRecord(test_buffer_data)]) }, { desc: "Test that reading data succeed when NDEFScanOptions'" + " recordType is set to 'unknown'.", scanOptions: {recordType: "unknown"}, - unmatchedScanOptions: {recordType: "json"}, + unmatchedScanOptions: {recordType: "mime"}, message: createMessage([createUnknownRecord(test_buffer_data)]) }, { desc: "Test that reading data succeed when NDEFScanOptions'" + " recordType is set to 'text'.", scanOptions: {recordType: "text"}, - unmatchedScanOptions: {recordType: "json"}, + unmatchedScanOptions: {recordType: "url"}, message: createMessage([createTextRecord(test_text_data)]) }, { desc: "Test that reading data succeed when NDEFScanOptions'" + " recordType is set to 'url'.", scanOptions: {recordType: "url"}, - unmatchedScanOptions: {recordType: "json"}, + unmatchedScanOptions: {recordType: "absolute-url"}, message: createMessage([createUrlRecord(test_url_data)]) }, { desc: "Test that reading data succeed when NDEFScanOptions'" + " recordType is set to 'absolute-url'.", scanOptions: {recordType: "absolute-url"}, - unmatchedScanOptions: {recordType: "json"}, + unmatchedScanOptions: {recordType: "url"}, message: createMessage([createUrlRecord(test_url_data, true)]) }, { desc: "Test that reading data succeed when NDEFScanOptions'" + " recordType is set to a custom type for external type records.", scanOptions: {recordType: "w3.org:xyz"}, - unmatchedScanOptions: {recordType: "opaque"}, + unmatchedScanOptions: {recordType: "mime"}, message: createMessage([createRecord('w3.org:xyz', 'application/octet-stream', test_buffer_data)]) }, @@ -82,7 +75,7 @@ const NDEFReaderOptionTests = " sources correctly.", scanOptions: {mediaType: "application/octet-stream"}, unmatchedScanOptions: {mediaType: "application/json"}, - message: createMessage([createOpaqueRecord(test_buffer_data)]) + message: createMessage([createMimeRecord(test_buffer_data)]) } ]; @@ -93,21 +86,14 @@ const ReadMultiMessagesTests = " correctly with NDEFScanOptions' recordType is set to 'empty'.", scanOptions: {recordType: "empty"}, message: createMessage([createRecord('empty', '')]), - unmatchedMessage: createMessage([createJsonRecord(test_json_data)]), - }, - { - desc: "Test that filtering 'json' record from different messages" + - " correctly with NDEFScanOptions' recordType is set to 'json'.", - scanOptions: {recordType: "json"}, - message: createMessage([createJsonRecord(test_json_data)]), - unmatchedMessage: createMessage([createUrlRecord(test_url_data)]) + unmatchedMessage: createMessage([createMimeRecordFromJson(test_json_data)]), }, { - desc: "Test that filtering 'opaque' record from different messages" + - " correctly with NDEFScanOptions' recordType is set to 'opaque'.", - scanOptions: {recordType: "opaque"}, - message: createMessage([createOpaqueRecord(test_buffer_data)]), - unmatchedMessage: createMessage([createJsonRecord(test_json_data)]) + desc: "Test that filtering 'mime' record from different messages" + + " correctly with NDEFScanOptions' recordType is set to 'mime'.", + scanOptions: {recordType: "mime"}, + message: createMessage([createMimeRecord(test_buffer_data)]), + unmatchedMessage: createMessage([createUnknownRecord(test_buffer_data)]) }, { desc: "Test that filtering 'unknown' record from different messages" + @@ -155,11 +141,11 @@ const ReadMultiMessagesTests = records: [createUrlRecord(test_url_data)]} }, { - desc: "Test that filtering 'opaque' record from different messages" + + desc: "Test that filtering 'mime' record from different messages" + " correctly with NDEFScanOptions' mediaType set.", scanOptions: {mediaType: "application/octet-stream"}, - message: createMessage([createOpaqueRecord(test_buffer_data)]), - unmatchedMessage: createMessage([createJsonRecord(test_json_data)]) + message: createMessage([createMimeRecord(test_buffer_data)]), + unmatchedMessage: createMessage([createMimeRecordFromJson(test_json_data)]) } ]; diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFReader_scan.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFReader_scan.https.html index 3fe95cc9147..a26a548c639 100644 --- a/tests/wpt/web-platform-tests/web-nfc/NDEFReader_scan.https.html +++ b/tests/wpt/web-platform-tests/web-nfc/NDEFReader_scan.https.html @@ -183,6 +183,33 @@ nfc_test(async (t, mockNFC) => { }, "Synchronously signaled abort."); +nfc_test(async (t, mockNFC) => { + const reader = new NDEFReader(); + const controller = new AbortController(); + const readerWatcher = new EventWatcher(t, reader, ["reading", "error"]); + + const payloadMessage = createMessage([createTextRecord(test_text_data)]); + const message = createMessage([createRecord('example.com:payloadIsMessage', + undefined, payloadMessage)]); + mockNFC.setReadingMessage(message); + + reader.scan({signal : controller.signal}); + const event = await readerWatcher.wait_for("reading"); + controller.abort(); + assert_true(event instanceof NDEFReadingEvent); + // The message contains only an external type record. + assert_equals(event.message.records.length, 1); + assert_equals(event.message.records[0].recordType, 'example.com:payloadIsMessage', 'recordType'); + // The external type record's payload is a message, which contains only a text record. + const embeddedRecords = event.message.records[0].toRecords(); + assert_equals(embeddedRecords.length, 1); + assert_equals(embeddedRecords[0].recordType, 'text', 'recordType'); + assert_equals(embeddedRecords[0].mediaType, 'text/plain', 'mediaType'); + const decoder = new TextDecoder(); + assert_equals(decoder.decode(embeddedRecords[0].data), test_text_data, + 'data has the same content with the original dictionary'); +}, "NDEFRecord.toRecords returns its embedded records correctly."); + test(() => { const reader = new NDEFReader(); invalid_signals.forEach(invalid_signal => { diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFReadingEvent_constructor.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFReadingEvent_constructor.https.html index c23a68a2f79..15ef6e466aa 100644 --- a/tests/wpt/web-platform-tests/web-nfc/NDEFReadingEvent_constructor.https.html +++ b/tests/wpt/web-platform-tests/web-nfc/NDEFReadingEvent_constructor.https.html @@ -12,13 +12,13 @@ }, 'NDEFReadingEvent constructor without init dict'); test(() => { - const message = createMessage([createJsonRecord(test_json_data)]); + const message = createMessage([createMimeRecordFromJson(test_buffer_data)]); const event = new NDEFReadingEvent('type', {serialNumber: null, message: message}); assert_equals(event.serialNumber, '', 'serialNumber'); }, 'NDEFReadingEvent constructor with null serialNumber'); test(() => { - const message = createMessage([createJsonRecord(test_json_data)]); + const message = createMessage([createMimeRecordFromJson(test_buffer_data)]); const event = new NDEFReadingEvent('type', {message: message}); assert_equals(event.serialNumber, '', 'serialNumber'); }, 'NDEFReadingEvent constructor with serialNumber not present'); @@ -30,7 +30,7 @@ }, 'NDEFReadingEvent constructor with null message'); test(() => { - const message = createMessage([createJsonRecord(test_json_data)]); + const message = createMessage([createMimeRecord(test_buffer_data)]); const event = new NDEFReadingEvent('type', {serialNumber: '', message: message}); assert_equals(event.type, 'type', 'type'); assert_equals(event.serialNumber, '', 'serialNumber'); diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFRecord_constructor.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFRecord_constructor.https.html index 1206afb4713..6028e970b87 100644 --- a/tests/wpt/web-platform-tests/web-nfc/NDEFRecord_constructor.https.html +++ b/tests/wpt/web-platform-tests/web-nfc/NDEFRecord_constructor.https.html @@ -92,8 +92,6 @@ const decoder = new TextDecoder(); assert_equals(decoder.decode(record.data), test_url_data, 'data has the same content with the original dictionary'); - assert_equals(record.text(), test_url_data, - 'text() has the same content with the original dictionary'); }, 'NDEFRecord constructor with url record type'); test(() => { @@ -103,63 +101,41 @@ const decoder = new TextDecoder(); assert_equals(decoder.decode(record.data), test_url_data, 'data has the same content with the original dictionary'); - assert_equals(record.text(), test_url_data, - 'text() has the same content with the original dictionary'); }, 'NDEFRecord constructor with absolute-url record type'); test(() => { - let buffer = new ArrayBuffer(4); - let buffer_view = new Uint8Array(buffer); - let original_data = new Uint8Array([1, 2, 3, 4]); - buffer_view.set(original_data); - const record = new NDEFRecord(createOpaqueRecord(buffer)); - assert_equals(record.recordType, 'opaque', 'recordType'); - assert_equals(record.mediaType, 'application/octet-stream', 'mediaType'); - assert_array_equals(new Uint8Array(record.data.buffer), original_data, - 'data has the same content with the original buffer'); + assert_throws(new TypeError, () => new NDEFRecord( + createMimeRecord("A string is not a BufferSource")), + 'Only BufferSource is allowed to be the record data.'); - const data_1 = record.arrayBuffer(); - assert_true(data_1 instanceof ArrayBuffer); - assert_not_equals(data_1, buffer, 'arrayBuffer() returns a new object'); - assert_array_equals(new Uint8Array(data_1), original_data, - 'arrayBuffer() has the same content with the original buffer'); - - const data_2 = record.arrayBuffer(); - assert_true(data_2 instanceof ArrayBuffer); - assert_not_equals(data_2, data_1, - 'arrayBuffer() again returns another new object'); - assert_array_equals(new Uint8Array(data_2), original_data, - 'arrayBuffer() has the same content with the original buffer'); - - buffer_view.set([4, 3, 2, 1]); - const data_3 = record.arrayBuffer(); - assert_true(data_3 instanceof ArrayBuffer); - assert_array_equals(new Uint8Array(data_1), original_data, - 'Modifying the original buffer does not affect arrayBuffer() content'); - assert_array_equals(new Uint8Array(data_2), original_data, - 'Modifying the original buffer does not affect arrayBuffer() content'); - assert_array_equals(new Uint8Array(data_3), original_data, - 'Modifying the original buffer does not affect arrayBuffer() content'); - }, 'NDEFRecord constructor with opaque record type'); + let buffer = new ArrayBuffer(4); + new Uint8Array(buffer).set([1, 2, 3, 4]); + // Feed ArrayBuffer. + { + const record = new NDEFRecord(createMimeRecord(buffer)); + assert_equals(record.recordType, 'mime', 'recordType'); + assert_equals(record.mediaType, 'application/octet-stream', 'mediaType'); + assert_array_equals(new Uint8Array(record.data.buffer), [1, 2, 3, 4], + 'data has the same content with the original buffer'); + } + // Feed ArrayBufferView. + { + let buffer_view = new Uint8Array(buffer, 1); + const record = new NDEFRecord(createMimeRecord(buffer_view)); + assert_equals(record.recordType, 'mime', 'recordType'); + assert_array_equals(new Uint8Array(record.data.buffer), [2, 3, 4], + 'data has the same content with the original buffer view'); + } + }, 'NDEFRecord constructor with mime record type and stream data'); test(() => { - const record = new NDEFRecord(createJsonRecord(test_json_data)); - assert_equals(record.recordType, 'json', 'recordType'); + const record = new NDEFRecord(createMimeRecordFromJson(test_json_data)); + assert_equals(record.recordType, 'mime', 'recordType'); assert_equals(record.mediaType, 'application/json', 'mediaType'); - - const data_1 = record.json(); - assert_true(typeof data_1 === 'object'); - assert_not_equals(data_1, test_json_data, 'json() returns a new object'); - assert_object_equals(data_1, test_json_data, - 'json() has the same content with the original dictionary'); - - const data_2 = record.json(); - assert_true(typeof data_2 === 'object'); - assert_not_equals(data_2, data_1, - 'json() again returns another new object'); - assert_object_equals(data_2, test_json_data, - 'json() has the same content with the original dictionary'); - }, 'NDEFRecord constructor with JSON record type'); + assert_object_equals(JSON.parse(new TextDecoder().decode(record.data)), + test_json_data, + 'data has the same content with the original json'); + }, 'NDEFRecord constructor with mime record type and json data'); test(() => { assert_throws(new TypeError, () => new NDEFRecord( @@ -193,29 +169,8 @@ const record = new NDEFRecord(createRecord('foo.eXamPle.coM:bAr*-', undefined, buffer)); assert_equals(record.recordType, 'foo.example.com:bAr*-', 'recordType'); assert_equals(record.mediaType, 'application/octet-stream', 'mediaType'); - - const data_1 = record.arrayBuffer(); - assert_true(data_1 instanceof ArrayBuffer); - assert_not_equals(data_1, buffer, 'arrayBuffer() returns a new object'); - assert_array_equals(new Uint8Array(data_1), original_data, - 'arrayBuffer() has the same content with the original buffer'); - - const data_2 = record.arrayBuffer(); - assert_true(data_2 instanceof ArrayBuffer); - assert_not_equals(data_2, data_1, - 'arrayBuffer() again returns another new object'); - assert_array_equals(new Uint8Array(data_2), original_data, - 'arrayBuffer() has the same content with the original buffer'); - - buffer_view.set([4, 3, 2, 1]); - const data_3 = record.arrayBuffer(); - assert_true(data_3 instanceof ArrayBuffer); - assert_array_equals(new Uint8Array(data_1), original_data, - 'Modifying the original buffer does not affect arrayBuffer() content'); - assert_array_equals(new Uint8Array(data_2), original_data, - 'Modifying the original buffer does not affect arrayBuffer() content'); - assert_array_equals(new Uint8Array(data_3), original_data, - 'Modifying the original buffer does not affect arrayBuffer() content'); + assert_array_equals(new Uint8Array(record.data.buffer), original_data, + 'data has the same content with the original buffer'); }, 'NDEFRecord constructor with external record type'); test(() => { diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html index 2be655fbbf9..f8b461c42d5 100644 --- a/tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html +++ b/tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html @@ -39,10 +39,6 @@ const invalid_type_messages = // NDEFRecord.lang length for 'text' record must be lower than 64. createMessage([createTextRecord(test_text_data, undefined /* encoding */, [...Array(64)].map(_ => 'a'))]), - // https://w3c.github.io/web-nfc/#dfn-map-a-json-object-to-ndef - // NDEFRecord must have data. - createMessage([createJsonRecord()]), - // https://w3c.github.io/web-nfc/#dfn-map-a-url-to-ndef // NDEFRecord must have data. createMessage([createUrlRecord()]), @@ -63,12 +59,12 @@ const invalid_type_messages = // https://w3c.github.io/web-nfc/#dfn-map-binary-data-to-ndef // NDEFRecord must have data. - createMessage([createOpaqueRecord()]), + createMessage([createMimeRecord()]), - // NDEFRecord.data for 'opaque' record must be ArrayBuffer. - createMessage([createOpaqueRecord(test_text_data)]), - createMessage([createOpaqueRecord(test_number_data)]), - createMessage([createOpaqueRecord(test_json_data)]), + // NDEFRecord.data for 'mime' record must be BufferSource. + createMessage([createMimeRecord(test_text_data)]), + createMessage([createMimeRecord(test_number_data)]), + createMessage([createMimeRecord(test_json_data)]), // NDEFRecord must have data. createMessage([createUnknownRecord()]), @@ -88,7 +84,7 @@ const invalid_type_messages = createMessage([createRecord('w3.org:xyz', '', test_json_data)]), // https://w3c.github.io/web-nfc/#the-ndefrecordtype-string - // The record type is neither a known type ('text', 'json' etc.) nor a + // The record type is neither a known type ('text', 'mime' etc.) nor a // valid custom type for an external type record. createMessage([createRecord('unmatched_type', '', test_buffer_data)]) ]; @@ -102,12 +98,6 @@ const invalid_syntax_messages = // Data for 'url' or 'absolute-url' record, must be a valid URL. createMessage([createUrlRecord('Invalid URL:// Data')]), createMessage([createUrlRecord('Invalid URL:// Data', true)]), - - // A JSON MIME type is any MIME type whose subtype ends in "+json" or - // whose essence is "application/json" or "text/json". - createMessage([createRecord('json', 'image/png', test_json_data)]), - createMessage([createRecord('json', 'application/x+y', test_json_data)]), - createMessage([createRecord('json', 'custom/app+jsonx', test_json_data)]), ]; const invalid_signals = [ @@ -249,13 +239,6 @@ provided URL."); promise_test(async t => { const writer = new NDEFWriter(); - const message = createMessage([createRecord('json','application/json', - { get x(){ return this; } })]); - await promise_rejects(t, new TypeError(), writer.push(message)); -}, "Reject promise with exceptions thrown from serializing the 'json' record data."); - -promise_test(async t => { - const writer = new NDEFWriter(); await promise_rejects( t, new TypeError(), writer.push(test_text_data, {target: "invalid"})); }, "NDEFWriter.push should fail with TypeError when invalid target value is \ @@ -306,9 +289,8 @@ nfc_test(async () => { nfc_test(async (t, mockNFC) => { const writer = new NDEFWriter(); let message = createMessage([createTextRecord(test_text_data), - createJsonRecord(test_json_data), - createJsonRecord(test_number_data), - createOpaqueRecord(test_buffer_data), + createMimeRecordFromJson(test_json_data), + createMimeRecord(test_buffer_data), createUnknownRecord(test_buffer_data), createUrlRecord(test_url_data), createUrlRecord(test_url_data, true), @@ -316,7 +298,7 @@ nfc_test(async (t, mockNFC) => { test_message_origin); await writer.push(message); assertNDEFMessagesEqual(message, mockNFC.pushedMessage()); -}, "NDEFWriter.push NDEFMessage containing text, json, opaque, unknown, url, absolute-url \ +}, "NDEFWriter.push NDEFMessage containing text, mime, unknown, url, absolute-url \ and external records with default NDEFPushOptions."); nfc_test(async (t, mockNFC) => { @@ -427,17 +409,8 @@ nfc_test(async (t, mockNFC) => { const writer = new NDEFWriter(); await writer.push({ records: [{ data: test_buffer_data}] }); assertNDEFMessagesEqual(test_buffer_data, mockNFC.pushedMessage()); -}, "Test that recordType should be set to 'opaque' if NDEFRecordInit.record's \ -recordType is undefined and NDEFRecordInit.record's data is ArrayBuffer."); - -nfc_test(async (t, mockNFC) => { - const writer = new NDEFWriter(); - await writer.push({ records: [{ data: test_json_data }] }); - const message = createMessage([createJsonRecord(test_json_data)]); - assertNDEFMessagesEqual(message, mockNFC.pushedMessage()); -}, "Test that recordType should be set to 'json' if NDEFRecordInit.record's \ -recordType is undefined and NDEFRecordInit.record's data is not DOMString or \ -ArrayBuffer."); +}, "Test that recordType should be set to 'mime' if NDEFRecordInit.record's \ +recordType is undefined and NDEFRecordInit.record's data is not DOMString."); nfc_test(async (t, mockNFC) => { const writer = new NDEFWriter(); @@ -448,19 +421,10 @@ recordType is 'text' and NDEFRecordInit.record's mediaType is undefined."); nfc_test(async (t, mockNFC) => { const writer = new NDEFWriter(); - await writer.push({ records: [{ recordType: "opaque", data: test_buffer_data }] }); + await writer.push({ records: [{ recordType: "mime", data: test_buffer_data }] }); assertNDEFMessagesEqual(test_buffer_data, mockNFC.pushedMessage()); }, "Test that mediaType should be set to 'application/octet-stream' if \ -NDEFRecordInit.record's recordType is 'opaque' and NDEFRecordInit.record's \ -mediaType is undefined."); - -nfc_test(async (t, mockNFC) => { - const writer = new NDEFWriter(); - await writer.push({ records: [{ recordType: "json", data: test_json_data }] }); - const message = createMessage([createJsonRecord(test_json_data)]); - assertNDEFMessagesEqual(message, mockNFC.pushedMessage()); -}, "Test that mediaType should be set to 'application/json' if \ -NDEFRecordInit.record's recordType is 'json' and NDEFRecordInit.record's \ +NDEFRecordInit.record's recordType is 'mime' and NDEFRecordInit.record's \ mediaType is undefined."); nfc_test(async (t, mockNFC) => { diff --git a/tests/wpt/web-platform-tests/web-nfc/resources/nfc-helpers.js b/tests/wpt/web-platform-tests/web-nfc/resources/nfc-helpers.js index cf9b510f304..bdd8290d9eb 100644 --- a/tests/wpt/web-platform-tests/web-nfc/resources/nfc-helpers.js +++ b/tests/wpt/web-platform-tests/web-nfc/resources/nfc-helpers.js @@ -103,12 +103,14 @@ function createTextRecord(data, encoding, lang) { return createRecord('text', 'text/plain', data, encoding, lang); } -function createJsonRecord(json) { - return createRecord('json', 'application/json', json); +function createMimeRecordFromJson(json) { + return createRecord( + 'mime', 'application/json', + new TextEncoder('utf-8').encode(JSON.stringify(json))); } -function createOpaqueRecord(buffer) { - return createRecord('opaque', 'application/octet-stream', buffer); +function createMimeRecord(buffer) { + return createRecord('mime', 'application/octet-stream', buffer); } function createUnknownRecord(buffer) { @@ -136,7 +138,7 @@ function assertNDEFMessagesEqual(providedMessage, receivedMessage) { let provided = providedMessage; if (providedMessage instanceof ArrayBuffer || ArrayBuffer.isView(providedMessage)) - provided = createMessage([createOpaqueRecord(providedMessage)]); + provided = createMessage([createMimeRecord(providedMessage)]); else if (typeof providedMessage === 'string') provided = createMessage([createTextRecord(providedMessage)]); @@ -166,23 +168,6 @@ function assertWebNDEFMessagesEqual(message, expectedMessage) { // Compares record data assert_array_equals(new Uint8Array(record.data), new Uint8Array(expectedRecord.data)); - assert_equals(record.text(), expectedRecord.text()); - assert_array_equals(new Uint8Array(record.arrayBuffer()), - new Uint8Array(expectedRecord.arrayBuffer())); - let json; - try { - json = record.json(); - } catch (e) { - } - let expectedJson; - try { - expectedJson = expectedRecord.json(); - } catch (e) { - } - if (json === undefined || json === null) - assert_equals(json, expectedJson); - else - assert_object_equals(json, expectedJson); } } diff --git a/tests/wpt/web-platform-tests/webaudio/refresh_idl.rb b/tests/wpt/web-platform-tests/webaudio/refresh_idl.rb deleted file mode 100755 index a07847535ad..00000000000 --- a/tests/wpt/web-platform-tests/webaudio/refresh_idl.rb +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env ruby -require 'nokogiri' - -def base_dir - File.dirname(__FILE__) -end - -def output_directory - File.join(base_dir, 'idl') -end - -def specification - file = File.open(File.join(base_dir, 'specification.html')) - doc = Nokogiri::XML(file) - file.close - doc -end - -def write_node_inner_text_to_file(filename, node) - File.open(filename, 'w') { |file| file.write(node.inner_text.strip) } - puts "Wrote: #{filename}" -end - -def load_idl(id) - file = File.join(output_directory, id) - return false if !File.exist?(file) - File.read(file) -end - -# Parse the specification writing each block of idl to its own file -specification.css(".idl-code").each do |idl_block| - id = idl_block["id"] - write_node_inner_text_to_file(File.join(output_directory, id), idl_block) if id -end - -# Update the idl in the pre blocks for each idl test -idl_test_files = [ - File.join(base_dir, 'the-audio-api', 'the-gainnode-interface', 'idl-test.html'), - File.join(base_dir, 'the-audio-api', 'the-audiodestinationnode-interface', 'idl-test.html'), - File.join(base_dir, 'the-audio-api', 'the-delaynode-interface', 'idl-test.html'), - File.join(base_dir, 'the-audio-api', 'the-audiobuffer-interface', 'idl-test.html'), -] - -idl_test_files.each do |fn| - file = File.open(fn) - doc = Nokogiri::HTML(file) - file.close - - doc.css('pre').each do |node| - node_id = node["id"] - if idl = load_idl(node_id) - node.content = idl - end - end - - File.open(fn, 'w') { |file| file.write(doc.to_html)} -end diff --git a/tests/wpt/web-platform-tests/webdriver/tests/find_element_from_element/find.py b/tests/wpt/web-platform-tests/webdriver/tests/find_element_from_element/find.py index 56e216bb646..b107a8957e0 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/find_element_from_element/find.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/find_element_from_element/find.py @@ -1,3 +1,4 @@ +# META: timeout=long import pytest from webdriver.transport import Response diff --git a/tests/wpt/web-platform-tests/webgpu/cts.html b/tests/wpt/web-platform-tests/webgpu/cts.html index b60faec9623..13d8b7c8324 100644 --- a/tests/wpt/web-platform-tests/webgpu/cts.html +++ b/tests/wpt/web-platform-tests/webgpu/cts.html @@ -3,18 +3,23 @@ This test suite is built from the TypeScript sources at: https://github.com/gpuweb/cts + If you are debugging WebGPU conformance tests, it's highly recommended that + you use the standalone interactive runner in that repository, which + provides tools for easier debugging and editing (source maps, debug + logging, warn/skip functionality, etc.) + NOTE: - The WPT version of this file is generated with *one test spec per variant*. - If your harness needs more fine-grained suppressions, you'll need to + The WPT version of this file is generated with *one variant per test spec + file*. If your harness needs more fine-grained suppressions, you'll need to generate your own variants list from your suppression list. For example, if test file cts:a/b: has 3 tests and you need to suppress a single case, you might break it out into the following variants: - - cts:a/b:test1~ - - cts:a/b:test2={"x":1} - - cts:a/b:test2={"x":2} // <- suppress this one - - cts:a/b:test2={"x":3} - - cts:a/b:test3~ + - cts:a/b:test1~ + - cts:a/b:test2={"x":1} + - cts:a/b:test2={"x":2} // <- suppress this one + - cts:a/b:test2={"x":3} + - cts:a/b:test3~ When run under browser CI, the original cts.html should be skipped, and this alternate version should be run instead, under a non-exported WPT test @@ -34,6 +39,17 @@ width: 100%; height: 15em; } + +/* Test Name column */ +#results > tbody > tr > td:nth-child(2) { + word-break: break-word; +} + +/* Message column */ +#results > tbody > tr > td:nth-child(3) { + white-space: pre-wrap; + word-break: break-word; +} </style> <textarea id=results></textarea> @@ -69,4 +85,4 @@ <meta name=variant content='?q=cts:validation/setStencilReference:'> <meta name=variant content='?q=cts:validation/setVertexBuffer:'> <meta name=variant content='?q=cts:validation/setViewport:'> -<meta name=variant content='?q=cts:validation/vertex_input:'> +<meta name=variant content='?q=cts:validation/vertex_state:'> diff --git a/tests/wpt/web-platform-tests/webgpu/framework/fixture.js b/tests/wpt/web-platform-tests/webgpu/framework/fixture.js index 2c1ea831468..d976fa46880 100644 --- a/tests/wpt/web-platform-tests/webgpu/framework/fixture.js +++ b/tests/wpt/web-platform-tests/webgpu/framework/fixture.js @@ -4,9 +4,10 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -// A Fixture is a class used to instantiate each test case at run time. +export class SkipTestCase extends Error {} // A Fixture is a class used to instantiate each test case at run time. // A new instance of the Fixture is created for every single test case // (i.e. every time the test function is run). + export class Fixture { constructor(rec, params) { _defineProperty(this, "params", void 0); @@ -26,11 +27,11 @@ export class Fixture { async init() {} debug(msg) { - this.rec.debug(msg); + this.rec.debug(new Error(msg)); } - log(msg) { - this.rec.log(msg); + skip(msg) { + throw new SkipTestCase(msg); } async finalize() { @@ -42,11 +43,11 @@ export class Fixture { } warn(msg) { - this.rec.warn(msg); + this.rec.warn(new Error(msg)); } fail(msg) { - this.rec.fail(msg); + this.rec.fail(new Error(msg)); } async immediateAsyncExpectation(fn) { @@ -57,35 +58,40 @@ export class Fixture { } eventualAsyncExpectation(fn) { - const promise = fn(); + const promise = fn(new Error()); this.eventualExpectations.push(promise); return promise; } - expectErrorValue(expectedName, ex, m) { + expectErrorValue(expectedName, ex, niceStack) { if (!(ex instanceof Error)) { - this.fail('THREW NON-ERROR'); + niceStack.message = 'THREW non-error value, of type ' + typeof ex + niceStack.message; + this.rec.fail(niceStack); return; } const actualName = ex.name; if (actualName !== expectedName) { - this.fail(`THREW ${actualName} INSTEAD OF ${expectedName}${m}`); + niceStack.message = `THREW ${actualName}, instead of ${expectedName}` + niceStack.message; + this.rec.fail(niceStack); } else { - this.debug(`OK: threw ${actualName}${m}`); + niceStack.message = 'OK: threw ' + actualName + niceStack.message; + this.rec.debug(niceStack); } } shouldReject(expectedName, p, msg) { - this.eventualAsyncExpectation(async () => { + this.eventualAsyncExpectation(async niceStack => { const m = msg ? ': ' + msg : ''; try { await p; - this.fail('DID NOT THROW' + m); + niceStack.message = 'DID NOT THROW' + m; + this.rec.fail(niceStack); } catch (ex) { - this.expectErrorValue(expectedName, ex, m); + niceStack.message = m; + this.expectErrorValue(expectedName, ex, niceStack); } }); } @@ -95,18 +101,18 @@ export class Fixture { try { fn(); - this.fail('DID NOT THROW' + m); + this.rec.fail(new Error('DID NOT THROW' + m)); } catch (ex) { - this.expectErrorValue(expectedName, ex, m); + this.expectErrorValue(expectedName, ex, new Error(m)); } } expect(cond, msg) { if (cond) { const m = msg ? ': ' + msg : ''; - this.debug('expect OK' + m); + this.rec.debug(new Error('expect OK' + m)); } else { - this.rec.fail(msg); + this.rec.fail(new Error(msg)); } return cond; diff --git a/tests/wpt/web-platform-tests/webgpu/framework/logger.js b/tests/wpt/web-platform-tests/webgpu/framework/logger.js index e8542924736..5536e736f06 100644 --- a/tests/wpt/web-platform-tests/webgpu/framework/logger.js +++ b/tests/wpt/web-platform-tests/webgpu/framework/logger.js @@ -4,10 +4,39 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +import { SkipTestCase } from './fixture.js'; import { makeQueryString } from './url_query.js'; import { extractPublicParams } from './url_query.js'; import { getStackTrace, now } from './util/index.js'; import { version } from './version.js'; + +class LogMessageWithStack extends Error { + constructor(name, ex) { + super(ex.message); + this.name = name; + this.stack = ex.stack; + } + + toJSON() { + let m = this.name; + + if (this.message) { + m += ': ' + this.message; + } + + m += '\n' + getStackTrace(this); + return m; + } + +} + +class LogMessageWithoutStack extends LogMessageWithStack { + toJSON() { + return this.message; + } + +} + export class Logger { constructor() { _defineProperty(this, "results", []); @@ -49,13 +78,20 @@ export class TestSpecRecorder { } } +var PassState; + +(function (PassState) { + PassState[PassState["pass"] = 0] = "pass"; + PassState[PassState["skip"] = 1] = "skip"; + PassState[PassState["warn"] = 2] = "warn"; + PassState[PassState["fail"] = 3] = "fail"; +})(PassState || (PassState = {})); + export class TestCaseRecorder { constructor(result) { _defineProperty(this, "result", void 0); - _defineProperty(this, "failed", false); - - _defineProperty(this, "warned", false); + _defineProperty(this, "state", PassState.pass); _defineProperty(this, "startTime", -1); @@ -69,8 +105,7 @@ export class TestCaseRecorder { start(debug = false) { this.startTime = now(); this.logs = []; - this.failed = false; - this.warned = false; + this.state = PassState.pass; this.debugging = debug; } @@ -82,50 +117,46 @@ export class TestCaseRecorder { const endTime = now(); // Round to next microsecond to avoid storing useless .xxxx00000000000002 in results. this.result.timems = Math.ceil((endTime - this.startTime) * 1000) / 1000; - this.result.status = this.failed ? 'fail' : this.warned ? 'warn' : 'pass'; + this.result.status = PassState[this.state]; this.result.logs = this.logs; this.debugging = false; } - debug(msg) { + debug(ex) { if (!this.debugging) { return; } - this.log('DEBUG: ' + msg); + this.logs.push(new LogMessageWithoutStack('DEBUG', ex)); } - log(msg) { - this.logs.push(msg); + warn(ex) { + this.setState(PassState.warn); + this.logs.push(new LogMessageWithStack('WARN', ex)); } - warn(msg) { - this.warned = true; - let m = 'WARN'; - - if (msg) { - m += ': ' + msg; - } - - m += ' ' + getStackTrace(new Error()); - this.log(m); + fail(ex) { + this.setState(PassState.fail); + this.logs.push(new LogMessageWithStack('FAIL', ex)); } - fail(msg) { - this.failed = true; - let m = 'FAIL'; + skipped(ex) { + this.setState(PassState.skip); + this.logs.push(new LogMessageWithStack('SKIP', ex)); + } - if (msg) { - m += ': ' + msg; + threw(ex) { + if (ex instanceof SkipTestCase) { + this.skipped(ex); + return; } - m += ' ' + getStackTrace(new Error()); - this.log(m); + this.setState(PassState.fail); + this.logs.push(new LogMessageWithStack('EXCEPTION', ex)); } - threw(e) { - this.failed = true; - this.log('EXCEPTION: ' + e.name + ': ' + e.message + '\n' + getStackTrace(e)); + setState(state) { + this.state = Math.max(this.state, state); } } diff --git a/tests/wpt/web-platform-tests/webgpu/framework/test_group.js b/tests/wpt/web-platform-tests/webgpu/framework/test_group.js index 69d8cc04017..68527a5b2cf 100644 --- a/tests/wpt/web-platform-tests/webgpu/framework/test_group.js +++ b/tests/wpt/web-platform-tests/webgpu/framework/test_group.js @@ -136,20 +136,18 @@ class RunCaseSpecific { try { const inst = new this.fixture(rec, this.params || {}); - await inst.init(); try { + await inst.init(); await this.fn(inst); - } catch (ex) { - // There was an exception from the test itself. - rec.threw(ex); - } // Runs as long as constructor and init succeeded, even if the test rejected. - - - await inst.finalize(); + } finally { + // Runs as long as constructor succeeded, even if initialization or the test failed. + await inst.finalize(); + } } catch (ex) { - // There was an exception from constructor, init, or finalize. - // (An error from finalize may have been an eventualAsyncExpectation failure.) + // There was an exception from constructor, init, test, or finalize. + // An error from init or test may have been a SkipTestCase. + // An error from finalize may have been an eventualAsyncExpectation failure. rec.threw(ex); } diff --git a/tests/wpt/web-platform-tests/webgpu/framework/util/stack.js b/tests/wpt/web-platform-tests/webgpu/framework/util/stack.js index ae99ac904a1..bd51d545094 100644 --- a/tests/wpt/web-platform-tests/webgpu/framework/util/stack.js +++ b/tests/wpt/web-platform-tests/webgpu/framework/util/stack.js @@ -24,10 +24,9 @@ export function getStackTrace(e) { } if (isSuites) { + stack.push(part); found = true; } - - stack.push(part); } return stack.join('\n'); diff --git a/tests/wpt/web-platform-tests/webgpu/framework/version.js b/tests/wpt/web-platform-tests/webgpu/framework/version.js index 55a72f5efb0..e2c91190305 100644 --- a/tests/wpt/web-platform-tests/webgpu/framework/version.js +++ b/tests/wpt/web-platform-tests/webgpu/framework/version.js @@ -1,3 +1,3 @@ // AUTO-GENERATED - DO NOT EDIT. See tools/gen_version. -export const version = 'ba0a130a078256d45504069de88f0d91d4631578'; +export const version = 'e114192747a54f34157eb65754e037701fbdf98b'; diff --git a/tests/wpt/web-platform-tests/webgpu/runtime/wpt.js b/tests/wpt/web-platform-tests/webgpu/runtime/wpt.js index c87f9167bbe..fd02f09471b 100644 --- a/tests/wpt/web-platform-tests/webgpu/runtime/wpt.js +++ b/tests/wpt/web-platform-tests/webgpu/runtime/wpt.js @@ -39,8 +39,9 @@ import { TestWorker } from './helper/test_worker.js'; } this.step(() => { + // Unfortunately, it seems not possible to surface any logs for warn/skip. if (r.status === 'fail') { - throw (r.logs || []).join('\n'); + throw (r.logs || []).map(s => s.toJSON()).join('\n\n'); } }); this.done(); diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/canvas/context_creation.spec.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/canvas/context_creation.spec.js index ba0d4722853..a693b002769 100644 --- a/tests/wpt/web-platform-tests/webgpu/suites/cts/canvas/context_creation.spec.js +++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/canvas/context_creation.spec.js @@ -3,15 +3,12 @@ **/ export const description = ``; -import { TestGroup } from '../../../framework/index.js'; -import { GPUTest } from '../gpu_test.js'; // TODO: doesn't need to use GPUTest - -export const g = new TestGroup(GPUTest); -g.test('getContext returns GPUCanvasContext', async t => { +import { Fixture, TestGroup } from '../../../framework/index.js'; +export const g = new TestGroup(Fixture); +g.test('canvas element getContext returns GPUCanvasContext', async t => { if (typeof document === 'undefined') { // Skip if there is no document (Workers, Node) - // TODO: Use t.skip() - return; + t.skip('DOM is not available to create canvas element'); } const canvas = document.createElement('canvas'); diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/compute/basic.spec.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/compute/basic.spec.js index 8fcc7ef9309..8a5fc168a4d 100644 --- a/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/compute/basic.spec.js +++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/compute/basic.spec.js @@ -48,7 +48,7 @@ g.test('memcpy', async t => { }], layout: bgl }); - const module = t.device.createShaderModule({ + const module = t.createShaderModule({ code: /* GLSL( * 'compute', diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/rendering.spec.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/rendering.spec.js index 46829a8d07c..54c627dfd35 100644 --- a/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/rendering.spec.js +++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/rendering.spec.js @@ -21,7 +21,7 @@ g.test('fullscreen quad', async t => { usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.OUTPUT_ATTACHMENT }); const colorAttachmentView = colorAttachment.createView(); - const vertexModule = t.device.createShaderModule({ + const vertexModule = t.createShaderModule({ code: /* GLSL( * 'vertex', @@ -36,7 +36,7 @@ g.test('fullscreen quad', async t => { */ new Uint32Array([119734787, 66304, 524295, 39, 0, 131089, 1, 393227, 1, 1280527431, 1685353262, 808793134, 0, 196622, 0, 1, 458767, 0, 4, 1852399981, 0, 10, 26, 196611, 1, 310, 262149, 4, 1852399981, 0, 393221, 8, 1348430951, 1700164197, 2019914866, 0, 393222, 8, 0, 1348430951, 1953067887, 7237481, 458758, 8, 1, 1348430951, 1953393007, 1702521171, 0, 196613, 10, 0, 393221, 26, 1449094247, 1702130277, 1684949368, 30821, 327685, 29, 1701080681, 1818386808, 101, 327752, 8, 0, 11, 0, 327752, 8, 1, 11, 1, 196679, 8, 2, 262215, 26, 11, 42, 131091, 2, 196641, 3, 2, 196630, 6, 32, 262167, 7, 6, 4, 262174, 8, 7, 6, 262176, 9, 3, 8, 262203, 9, 10, 3, 262165, 11, 32, 1, 262187, 11, 12, 0, 262167, 13, 6, 2, 262165, 14, 32, 0, 262187, 14, 15, 3, 262172, 16, 13, 15, 262187, 6, 17, 3212836864, 262187, 6, 18, 3225419776, 327724, 13, 19, 17, 18, 262187, 6, 20, 1077936128, 262187, 6, 21, 1065353216, 327724, 13, 22, 20, 21, 327724, 13, 23, 17, 21, 393260, 16, 24, 19, 22, 23, 262176, 25, 1, 11, 262203, 25, 26, 1, 262176, 28, 7, 16, 262176, 30, 7, 13, 262187, 6, 33, 0, 262176, 37, 3, 7, 327734, 2, 4, 0, 3, 131320, 5, 262203, 28, 29, 7, 262205, 11, 27, 26, 196670, 29, 24, 327745, 30, 31, 29, 27, 262205, 13, 32, 31, 327761, 6, 34, 32, 0, 327761, 6, 35, 32, 1, 458832, 7, 36, 34, 35, 33, 21, 327745, 37, 38, 10, 12, 196670, 38, 36, 65789, 65592]) }); - const fragmentModule = t.device.createShaderModule({ + const fragmentModule = t.createShaderModule({ code: /* GLSL( * 'fragment', @@ -73,7 +73,7 @@ g.test('fullscreen quad', async t => { alphaBlend: {}, colorBlend: {} }], - vertexInput: { + vertexState: { indexFormat: 'uint16', vertexBuffers: [] } diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/storeop.spec.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/storeop.spec.js index 0b38debc134..0326cf65ad6 100644 --- a/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/storeop.spec.js +++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/command_buffer/render/storeop.spec.js @@ -18,7 +18,7 @@ g.test('storeOp controls whether 1x1 drawn quad is stored', async t => { usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.OUTPUT_ATTACHMENT }); // create render pipeline - const vertexModule = t.device.createShaderModule({ + const vertexModule = t.createShaderModule({ code: /* GLSL( * 'vertex', @@ -36,7 +36,7 @@ g.test('storeOp controls whether 1x1 drawn quad is stored', async t => { */ new Uint32Array([119734787, 66304, 524295, 39, 0, 131089, 1, 393227, 1, 1280527431, 1685353262, 808793134, 0, 196622, 0, 1, 458767, 0, 4, 1852399981, 0, 13, 26, 196611, 2, 450, 262149, 4, 1852399981, 0, 393221, 11, 1348430951, 1700164197, 2019914866, 0, 393222, 11, 0, 1348430951, 1953067887, 7237481, 458758, 11, 1, 1348430951, 1953393007, 1702521171, 0, 458758, 11, 2, 1130327143, 1148217708, 1635021673, 6644590, 458758, 11, 3, 1130327143, 1147956341, 1635021673, 6644590, 196613, 13, 0, 393221, 26, 1449094247, 1702130277, 1684949368, 30821, 327685, 29, 1701080681, 1818386808, 101, 327752, 11, 0, 11, 0, 327752, 11, 1, 11, 1, 327752, 11, 2, 11, 3, 327752, 11, 3, 11, 4, 196679, 11, 2, 262215, 26, 11, 42, 131091, 2, 196641, 3, 2, 196630, 6, 32, 262167, 7, 6, 4, 262165, 8, 32, 0, 262187, 8, 9, 1, 262172, 10, 6, 9, 393246, 11, 7, 6, 10, 10, 262176, 12, 3, 11, 262203, 12, 13, 3, 262165, 14, 32, 1, 262187, 14, 15, 0, 262167, 16, 6, 2, 262187, 8, 17, 3, 262172, 18, 16, 17, 262187, 6, 19, 1065353216, 262187, 6, 20, 3212836864, 327724, 16, 21, 19, 20, 327724, 16, 22, 19, 19, 327724, 16, 23, 20, 19, 393260, 18, 24, 21, 22, 23, 262176, 25, 1, 14, 262203, 25, 26, 1, 262176, 28, 7, 18, 262176, 30, 7, 16, 262187, 6, 33, 0, 262176, 37, 3, 7, 327734, 2, 4, 0, 3, 131320, 5, 262203, 28, 29, 7, 262205, 14, 27, 26, 196670, 29, 24, 327745, 30, 31, 29, 27, 262205, 16, 32, 31, 327761, 6, 34, 32, 0, 327761, 6, 35, 32, 1, 458832, 7, 36, 34, 35, 33, 19, 327745, 37, 38, 13, 15, 196670, 38, 36, 65789, 65592]) }); - const fragmentModule = t.device.createShaderModule({ + const fragmentModule = t.createShaderModule({ code: /* GLSL( * 'fragment', diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/gpu_test.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/gpu_test.js index 96f109d3043..a324e8839e5 100644 --- a/tests/wpt/web-platform-tests/webgpu/suites/cts/gpu_test.js +++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/gpu_test.js @@ -6,8 +6,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope import { getGPU } from '../../framework/gpu/implementation.js'; import { Fixture } from '../../framework/index.js'; -let glslangInstance; // TODO: Should this gain some functionality currently only in UnitTest? - +let glslangInstance; export class GPUTest extends Fixture { constructor(...args) { super(...args); @@ -15,6 +14,10 @@ export class GPUTest extends Fixture { _defineProperty(this, "device", undefined); _defineProperty(this, "queue", undefined); + + _defineProperty(this, "initialized", false); + + _defineProperty(this, "supportsSPIRV", true); } async init() { @@ -23,31 +26,53 @@ export class GPUTest extends Fixture { const adapter = await gpu.requestAdapter(); this.device = await adapter.requestDevice(); this.queue = this.device.getQueue(); + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); + + if (isSafari) { + this.supportsSPIRV = false; + } + + try { + await this.device.popErrorScope(); + throw new Error('There was an error scope on the stack at the beginning of the test'); + } catch (ex) {} + this.device.pushErrorScope('out-of-memory'); this.device.pushErrorScope('validation'); + this.initialized = true; } async finalize() { super.finalize(); - const gpuValidationError = await this.device.popErrorScope(); - if (gpuValidationError !== null) { - if (!(gpuValidationError instanceof GPUValidationError)) throw new Error(); - this.fail(`Unexpected validation error occurred: ${gpuValidationError.message}`); - } + if (this.initialized) { + const gpuValidationError = await this.device.popErrorScope(); + + if (gpuValidationError !== null) { + if (!(gpuValidationError instanceof GPUValidationError)) throw new Error(); + this.fail(`Unexpected validation error occurred: ${gpuValidationError.message}`); + } - const gpuOutOfMemoryError = await this.device.popErrorScope(); + const gpuOutOfMemoryError = await this.device.popErrorScope(); - if (gpuOutOfMemoryError !== null) { - if (!(gpuOutOfMemoryError instanceof GPUOutOfMemoryError)) throw new Error(); - this.fail('Unexpected out-of-memory error occurred'); + if (gpuOutOfMemoryError !== null) { + if (!(gpuOutOfMemoryError instanceof GPUOutOfMemoryError)) throw new Error(); + this.fail('Unexpected out-of-memory error occurred'); + } } } async initGLSL() { if (!glslangInstance) { const glslangPath = '../../glslang.js'; - const glslangModule = (await import(glslangPath)).default; + let glslangModule; + + try { + glslangModule = (await import(glslangPath)).default; + } catch (ex) { + this.skip('glslang is not available'); + } + await new Promise(resolve => { glslangModule().then(glslang => { glslangInstance = glslang; @@ -57,12 +82,20 @@ export class GPUTest extends Fixture { } } - makeShaderModule(stage, source) { + createShaderModule(desc) { + if (!this.supportsSPIRV) { + this.skip('SPIR-V not available'); + } + + return this.device.createShaderModule(desc); + } + + makeShaderModuleFromGLSL(stage, glsl) { if (!glslangInstance) { - throw new Error('GLSL is not instantiated. Run `await t.initGLSL()` first'); + throw new Error('GLSL compiler is not instantiated. Run `await t.initGLSL()` first'); } - const code = glslangInstance.compileGLSL(source, stage, false); + const code = glslangInstance.compileGLSL(glsl, stage, false); return this.device.createShaderModule({ code }); @@ -79,41 +112,61 @@ export class GPUTest extends Fixture { const c = this.device.createCommandEncoder(); c.copyBufferToBuffer(src, 0, dst, 0, size); this.queue.submit([c.finish()]); - this.eventualAsyncExpectation(async () => { + this.eventualAsyncExpectation(async niceStack => { const actual = new Uint8Array((await dst.mapReadAsync())); - this.expectBuffer(actual, exp); + const check = this.checkBuffer(actual, exp); + + if (check !== undefined) { + niceStack.message = check; + this.rec.fail(niceStack); + } + dst.destroy(); }); } expectBuffer(actual, exp) { + const check = this.checkBuffer(actual, exp); + + if (check !== undefined) { + this.rec.fail(new Error(check)); + } + } + + checkBuffer(actual, exp) { const size = exp.byteLength; if (actual.byteLength !== size) { - this.rec.fail('size mismatch'); - return; + return 'size mismatch'; } + const lines = []; let failedPixels = 0; for (let i = 0; i < size; ++i) { if (actual[i] !== exp[i]) { if (failedPixels > 4) { - this.rec.fail('... and more'); + lines.push('... and more'); break; } failedPixels++; - this.rec.fail(`at [${i}], expected ${exp[i]}, got ${actual[i]}`); + lines.push(`at [${i}], expected ${exp[i]}, got ${actual[i]}`); } } if (size <= 256 && failedPixels > 0) { const expHex = Array.from(exp).map(x => x.toString(16).padStart(2, '0')).join(''); const actHex = Array.from(actual).map(x => x.toString(16).padStart(2, '0')).join(''); - this.rec.log('EXPECT: ' + expHex); - this.rec.log('ACTUAL: ' + actHex); + lines.push('EXPECT: ' + expHex); + lines.push('ACTUAL: ' + actHex); } + + if (failedPixels) { + return lines.join('\n'); + } + + return undefined; } } diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/index.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/index.js index 33934cdd38c..d38bcc5b6b5 100644 --- a/tests/wpt/web-platform-tests/webgpu/suites/cts/index.js +++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/index.js @@ -130,7 +130,7 @@ export const listing = [ "description": "setViewport validation tests." }, { - "path": "validation/vertex_input", - "description": "vertexInput validation tests." + "path": "validation/vertex_state", + "description": "vertexState validation tests." } ]; diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/createRenderPipeline.spec.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/createRenderPipeline.spec.js index cc838fc6515..b66dabf285a 100644 --- a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/createRenderPipeline.spec.js +++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/createRenderPipeline.spec.js @@ -38,7 +38,7 @@ class F extends ValidationTest { getVertexStage() { return { - module: this.device.createShaderModule({ + module: this.createShaderModule({ code: /* GLSL( * 'vertex', @@ -74,7 +74,7 @@ class F extends ValidationTest { } `; return { - module: this.makeShaderModule('fragment', code), + module: this.makeShaderModuleFromGLSL('fragment', code), entryPoint: 'main' }; } diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/render_pass.spec.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/render_pass.spec.js index 52da36fa7ac..3e08dcc1736 100644 --- a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/render_pass.spec.js +++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/render_pass.spec.js @@ -17,7 +17,7 @@ class F extends ValidationTest { } createRenderPipeline(pipelineLayout) { - const vertexModule = this.device.createShaderModule({ + const vertexModule = this.createShaderModule({ code: /* GLSL( * 'vertex', @@ -34,7 +34,7 @@ class F extends ValidationTest { */ new Uint32Array([119734787, 66304, 524295, 47, 0, 131089, 1, 393227, 1, 1280527431, 1685353262, 808793134, 0, 196622, 0, 1, 458767, 0, 4, 1852399981, 0, 13, 33, 196611, 2, 450, 262149, 4, 1852399981, 0, 393221, 11, 1348430951, 1700164197, 2019914866, 0, 393222, 11, 0, 1348430951, 1953067887, 7237481, 458758, 11, 1, 1348430951, 1953393007, 1702521171, 0, 458758, 11, 2, 1130327143, 1148217708, 1635021673, 6644590, 458758, 11, 3, 1130327143, 1147956341, 1635021673, 6644590, 196613, 13, 0, 458757, 18, 1953654134, 1851095141, 1919903337, 1718960749, 7497062, 393222, 18, 0, 1851880052, 1919903347, 109, 196613, 20, 0, 393221, 33, 1449094247, 1702130277, 1684949368, 30821, 327685, 36, 1701080681, 1818386808, 101, 327752, 11, 0, 11, 0, 327752, 11, 1, 11, 1, 327752, 11, 2, 11, 3, 327752, 11, 3, 11, 4, 196679, 11, 2, 262216, 18, 0, 5, 327752, 18, 0, 35, 0, 327752, 18, 0, 7, 16, 196679, 18, 2, 262215, 20, 34, 0, 262215, 20, 33, 0, 262215, 33, 11, 42, 131091, 2, 196641, 3, 2, 196630, 6, 32, 262167, 7, 6, 4, 262165, 8, 32, 0, 262187, 8, 9, 1, 262172, 10, 6, 9, 393246, 11, 7, 6, 10, 10, 262176, 12, 3, 11, 262203, 12, 13, 3, 262165, 14, 32, 1, 262187, 14, 15, 0, 262167, 16, 6, 2, 262168, 17, 16, 2, 196638, 18, 17, 262176, 19, 2, 18, 262203, 19, 20, 2, 262176, 21, 2, 17, 262187, 8, 24, 3, 262172, 25, 16, 24, 262187, 6, 26, 3212836864, 327724, 16, 27, 26, 26, 262187, 6, 28, 1065353216, 327724, 16, 29, 28, 26, 327724, 16, 30, 26, 28, 393260, 25, 31, 27, 29, 30, 262176, 32, 1, 14, 262203, 32, 33, 1, 262176, 35, 7, 25, 262176, 37, 7, 16, 262187, 6, 41, 0, 262176, 45, 3, 7, 327734, 2, 4, 0, 3, 131320, 5, 262203, 35, 36, 7, 327745, 21, 22, 20, 15, 262205, 17, 23, 22, 262205, 14, 34, 33, 196670, 36, 31, 327745, 37, 38, 36, 34, 262205, 16, 39, 38, 327825, 16, 40, 23, 39, 327761, 6, 42, 40, 0, 327761, 6, 43, 40, 1, 458832, 7, 44, 42, 43, 41, 28, 327745, 45, 46, 13, 15, 196670, 46, 44, 65789, 65592]) }); - const fragmentModule = this.device.createShaderModule({ + const fragmentModule = this.createShaderModule({ code: /* GLSL( * 'fragment', diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/setVertexBuffer.spec.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/setVertexBuffer.spec.js index 1df40173abe..ba22ee2d2a4 100644 --- a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/setVertexBuffer.spec.js +++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/setVertexBuffer.spec.js @@ -29,11 +29,12 @@ class F extends ValidationTest { colorStates: [{ format: 'rgba8unorm' }], - vertexInput: { + vertexState: { vertexBuffers: [{ - stride: 3 * 4, - attributeSet: range(bufferCount, i => ({ + arrayStride: 3 * 4, + attributes: range(bufferCount, i => ({ format: 'float3', + offset: 0, shaderLocation: i })) }] @@ -51,7 +52,7 @@ class F extends ValidationTest { } `; return { - module: this.makeShaderModule('vertex', code), + module: this.makeShaderModuleFromGLSL('vertex', code), entryPoint: 'main' }; } @@ -65,7 +66,7 @@ class F extends ValidationTest { } `; return { - module: this.makeShaderModule('fragment', code), + module: this.makeShaderModuleFromGLSL('fragment', code), entryPoint: 'main' }; } diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/validation_test.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/validation_test.js index 099b8202204..dc5488e7698 100644 --- a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/validation_test.js +++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/validation_test.js @@ -25,13 +25,15 @@ export class ValidationTest extends GPUTest { this.device.pushErrorScope('validation'); fn(); const promise = this.device.popErrorScope(); - this.eventualAsyncExpectation(async () => { + this.eventualAsyncExpectation(async niceStack => { const gpuValidationError = await promise; if (!gpuValidationError) { - this.fail('Validation error was expected.'); + niceStack.message = 'Validation error was expected.'; + this.rec.fail(niceStack); } else if (gpuValidationError instanceof GPUValidationError) { - this.debug(`Captured validation error - ${gpuValidationError.message}`); + niceStack.message = `Captured validation error - ${gpuValidationError.message}`; + this.rec.debug(niceStack); } }); } diff --git a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/vertex_input.spec.js b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/vertex_state.spec.js index 951c9ead3cf..da619181192 100644 --- a/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/vertex_input.spec.js +++ b/tests/wpt/web-platform-tests/webgpu/suites/cts/validation/vertex_state.spec.js @@ -3,13 +3,13 @@ **/ export const description = ` -vertexInput validation tests. +vertexState validation tests. `; import { TestGroup } from '../../../framework/index.js'; import { ValidationTest } from './validation_test.js'; const MAX_VERTEX_ATTRIBUTES = 16; const MAX_VERTEX_BUFFER_END = 2048; -const MAX_VERTEX_BUFFER_STRIDE = 2048; +const MAX_VERTEX_BUFFER_ARRAY_STRIDE = 2048; const MAX_VERTEX_BUFFERS = 16; const VERTEX_SHADER_CODE_WITH_NO_INPUT = ` #version 450 @@ -27,7 +27,7 @@ class F extends ValidationTest { await Promise.all([super.init(), this.initGLSL()]); } - getDescriptor(vertexInput, vertexShaderCode) { + getDescriptor(vertexState, vertexShaderCode) { const descriptor = { vertexStage: this.getVertexStage(vertexShaderCode), fragmentStage: this.getFragmentStage(), @@ -36,14 +36,14 @@ class F extends ValidationTest { colorStates: [{ format: 'rgba8unorm' }], - vertexInput + vertexState }; return descriptor; } getVertexStage(code) { return { - module: this.makeShaderModule('vertex', code), + module: this.makeShaderModuleFromGLSL('vertex', code), entryPoint: 'main' }; } @@ -57,7 +57,7 @@ class F extends ValidationTest { } `; return { - module: this.makeShaderModule('fragment', code), + module: this.makeShaderModuleFromGLSL('fragment', code), entryPoint: 'main' }; } @@ -72,73 +72,78 @@ class F extends ValidationTest { export const g = new TestGroup(F); g.test('an empty vertex input is valid', t => { - const vertexInput = {}; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const vertexState = {}; + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); }); g.test('a null buffer is valid', t => { { // One null buffer is OK - const vertexInput = { + const vertexState = { vertexBuffers: [{ - stride: 0, - attributeSet: [] + arrayStride: 0, + attributes: [] }] }; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } { // One null buffer followed by a buffer is OK - const vertexInput = { + const vertexState = { vertexBuffers: [{ - stride: 0, - attributeSet: [] + arrayStride: 0, + attributes: [] }, { - stride: 0, - attributeSet: [{ - shaderLocation: 0, - format: 'float' + arrayStride: 0, + attributes: [{ + format: 'float', + offset: 0, + shaderLocation: 0 }] }] }; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } { // One null buffer sitting between buffers is OK - const vertexInput = { + const vertexState = { vertexBuffers: [{ - stride: 0, - attributeSet: [{ - shaderLocation: 0, - format: 'float' + arrayStride: 0, + attributes: [{ + format: 'float', + offset: 0, + shaderLocation: 0 }] }, { - stride: 0, - attributeSet: [] + arrayStride: 0, + attributes: [] }, { - stride: 0, - attributeSet: [{ - shaderLocation: 1, - format: 'float' + arrayStride: 0, + attributes: [{ + format: 'float', + offset: 0, + shaderLocation: 1 }] }] }; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } }); g.test('pipeline vertex buffers are backed by attributes in vertex input', async t => { - const vertexInput = { + const vertexState = { vertexBuffers: [{ - stride: 2 * Float32Array.BYTES_PER_ELEMENT, - attributeSet: [{ - shaderLocation: 0, - format: 'float' + arrayStride: 2 * Float32Array.BYTES_PER_ELEMENT, + attributes: [{ + format: 'float', + offset: 0, + shaderLocation: 0 }, { - shaderLocation: 1, - format: 'float' + format: 'float', + offset: 0, + shaderLocation: 1 }] }] }; @@ -152,11 +157,11 @@ g.test('pipeline vertex buffers are backed by attributes in vertex input', async gl_Position = vec4(0.0); } `; - const descriptor = t.getDescriptor(vertexInput, code); + const descriptor = t.getDescriptor(vertexState, code); t.device.createRenderPipeline(descriptor); } { - // Check it is valid for the pipeline to use a subset of the VertexInput + // Check it is valid for the pipeline to use a subset of the VertexState const code = ` #version 450 layout(location = 0) in vec4 a; @@ -164,7 +169,7 @@ g.test('pipeline vertex buffers are backed by attributes in vertex input', async gl_Position = vec4(0.0); } `; - const descriptor = t.getDescriptor(vertexInput, code); + const descriptor = t.getDescriptor(vertexState, code); t.device.createRenderPipeline(descriptor); } { @@ -176,103 +181,106 @@ g.test('pipeline vertex buffers are backed by attributes in vertex input', async gl_Position = vec4(0.0); } `; - const descriptor = t.getDescriptor(vertexInput, code); + const descriptor = t.getDescriptor(vertexState, code); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); } }); -g.test('a stride of 0 is valid', t => { - const vertexInput = { +g.test('an arrayStride of 0 is valid', t => { + const vertexState = { vertexBuffers: [{ - stride: 0, - attributeSet: [{ - shaderLocation: 0, - format: 'float' + arrayStride: 0, + attributes: [{ + format: 'float', + offset: 0, + shaderLocation: 0 }] }] }; { // Works ok without attributes - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } { // Works ok with attributes at a large-ish offset - vertexInput.vertexBuffers[0].attributeSet[0].offset = 128; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + vertexState.vertexBuffers[0].attributes[0].offset = 128; + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } }); -g.test('offset should be within vertex buffer stride if stride is not zero', async t => { - const vertexInput = { +g.test('offset should be within vertex buffer arrayStride if arrayStride is not zero', async t => { + const vertexState = { vertexBuffers: [{ - stride: 2 * Float32Array.BYTES_PER_ELEMENT, - attributeSet: [{ - shaderLocation: 0, - format: 'float' + arrayStride: 2 * Float32Array.BYTES_PER_ELEMENT, + attributes: [{ + format: 'float', + offset: 0, + shaderLocation: 0 }, { + format: 'float', offset: Float32Array.BYTES_PER_ELEMENT, - shaderLocation: 1, - format: 'float' + shaderLocation: 1 }] }] }; { - // Control case, setting correct stride and offset - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + // Control case, setting correct arrayStride and offset + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } { - // Test vertex attribute offset exceed vertex buffer stride range - const badVertexInput = clone(vertexInput); - badVertexInput.vertexBuffers[0].attributeSet[1].format = 'float2'; - const descriptor = t.getDescriptor(badVertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + // Test vertex attribute offset exceed vertex buffer arrayStride range + const badVertexState = clone(vertexState); + badVertexState.vertexBuffers[0].attributes[1].format = 'float2'; + const descriptor = t.getDescriptor(badVertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); } { - // Test vertex attribute offset exceed vertex buffer stride range - const badVertexInput = clone(vertexInput); - badVertexInput.vertexBuffers[0].stride = Float32Array.BYTES_PER_ELEMENT; - const descriptor = t.getDescriptor(badVertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + // Test vertex attribute offset exceed vertex buffer arrayStride range + const badVertexState = clone(vertexState); + badVertexState.vertexBuffers[0].arrayStride = Float32Array.BYTES_PER_ELEMENT; + const descriptor = t.getDescriptor(badVertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); } { - // It's OK if stride is zero - const goodVertexInput = clone(vertexInput); - goodVertexInput.vertexBuffers[0].stride = 0; - const descriptor = t.getDescriptor(goodVertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + // It's OK if arrayStride is zero + const goodVertexState = clone(vertexState); + goodVertexState.vertexBuffers[0].arrayStride = 0; + const descriptor = t.getDescriptor(goodVertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } }); g.test('check two attributes overlapping', async t => { - const vertexInput = { + const vertexState = { vertexBuffers: [{ - stride: 2 * Float32Array.BYTES_PER_ELEMENT, - attributeSet: [{ - shaderLocation: 0, - format: 'float' + arrayStride: 2 * Float32Array.BYTES_PER_ELEMENT, + attributes: [{ + format: 'float', + offset: 0, + shaderLocation: 0 }, { + format: 'float', offset: Float32Array.BYTES_PER_ELEMENT, - shaderLocation: 1, - format: 'float' + shaderLocation: 1 }] }] }; { - // Control case, setting correct stride and offset - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + // Control case, setting correct arrayStride and offset + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } { // Test two attributes overlapping - const badVertexInput = clone(vertexInput); - badVertexInput.vertexBuffers[0].attributeSet[0].format = 'int2'; - const descriptor = t.getDescriptor(badVertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const badVertexState = clone(vertexState); + badVertexState.vertexBuffers[0].attributes[0].format = 'int2'; + const descriptor = t.getDescriptor(badVertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); @@ -283,34 +291,36 @@ g.test('check out of bounds condition on total number of vertex buffers', async for (let i = 0; i < MAX_VERTEX_BUFFERS; i++) { vertexBuffers.push({ - stride: 0, - attributeSet: [{ - shaderLocation: i, - format: 'float' + arrayStride: 0, + attributes: [{ + format: 'float', + offset: 0, + shaderLocation: i }] }); } { // Control case, setting max vertex buffer number - const vertexInput = { + const vertexState = { vertexBuffers }; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } { // Test vertex buffer number exceed the limit - const vertexInput = { + const vertexState = { vertexBuffers: [...vertexBuffers, { - stride: 0, - attributeSet: [{ - shaderLocation: MAX_VERTEX_BUFFERS, - format: 'float' + arrayStride: 0, + attributes: [{ + format: 'float', + offset: 0, + shaderLocation: MAX_VERTEX_BUFFERS }] }] }; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); @@ -321,34 +331,36 @@ g.test('check out of bounds on number of vertex attributes on a single vertex bu for (let i = 0; i < MAX_VERTEX_ATTRIBUTES; i++) { vertexAttributes.push({ - shaderLocation: i, - format: 'float' + format: 'float', + offset: 0, + shaderLocation: i }); } { // Control case, setting max vertex buffer number - const vertexInput = { + const vertexState = { vertexBuffers: [{ - stride: 0, - attributeSet: vertexAttributes + arrayStride: 0, + attributes: vertexAttributes }] }; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } { // Test vertex attribute number exceed the limit - const vertexInput = { + const vertexState = { vertexBuffers: [{ - stride: 0, - attributeSet: [...vertexAttributes, { - shaderLocation: MAX_VERTEX_ATTRIBUTES, - format: 'float' + arrayStride: 0, + attributes: [...vertexAttributes, { + format: 'float', + offset: 0, + shaderLocation: MAX_VERTEX_ATTRIBUTES }] }] }; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); @@ -359,104 +371,109 @@ g.test('check out of bounds on number of vertex attributes across vertex buffers for (let i = 0; i < MAX_VERTEX_ATTRIBUTES; i++) { vertexBuffers.push({ - stride: 0, - attributeSet: [{ - shaderLocation: i, - format: 'float' + arrayStride: 0, + attributes: [{ + format: 'float', + offset: 0, + shaderLocation: i }] }); } { // Control case, setting max vertex buffer number - const vertexInput = { + const vertexState = { vertexBuffers }; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } { // Test vertex attribute number exceed the limit - vertexBuffers[MAX_VERTEX_ATTRIBUTES - 1].attributeSet.push({ - shaderLocation: MAX_VERTEX_ATTRIBUTES, - format: 'float' + vertexBuffers[MAX_VERTEX_ATTRIBUTES - 1].attributes.push({ + format: 'float', + offset: 0, + shaderLocation: MAX_VERTEX_ATTRIBUTES }); - const vertexInput = { + const vertexState = { vertexBuffers }; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); } }); g.test('check out of bounds condition on input strides', async t => { - const vertexInput = { + const vertexState = { vertexBuffers: [{ - stride: MAX_VERTEX_BUFFER_STRIDE, - attributeSet: [] + arrayStride: MAX_VERTEX_BUFFER_ARRAY_STRIDE, + attributes: [] }] }; { - // Control case, setting max input stride - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + // Control case, setting max input arrayStride + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } { - // Test input stride OOB - vertexInput.vertexBuffers[0].stride = MAX_VERTEX_BUFFER_STRIDE + 4; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + // Test input arrayStride OOB + vertexState.vertexBuffers[0].arrayStride = MAX_VERTEX_BUFFER_ARRAY_STRIDE + 4; + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); } }); -g.test('check multiple of 4 bytes constraint on input stride', async t => { - const vertexInput = { +g.test('check multiple of 4 bytes constraint on input arrayStride', async t => { + const vertexState = { vertexBuffers: [{ - stride: 4, - attributeSet: [{ - shaderLocation: 0, - format: 'uchar2' + arrayStride: 4, + attributes: [{ + format: 'uchar2', + offset: 0, + shaderLocation: 0 }] }] }; { - // Control case, setting input stride 4 bytes - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + // Control case, setting input arrayStride 4 bytes + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } { - // Test input stride not multiple of 4 bytes - vertexInput.vertexBuffers[0].stride = 2; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + // Test input arrayStride not multiple of 4 bytes + vertexState.vertexBuffers[0].arrayStride = 2; + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); } }); g.test('identical duplicate attributes are invalid', async t => { - const vertexInput = { + const vertexState = { vertexBuffers: [{ - stride: 0, - attributeSet: [{ - shaderLocation: 0, - format: 'float' + arrayStride: 0, + attributes: [{ + format: 'float', + offset: 0, + shaderLocation: 0 }] }] }; { // Control case, setting attribute 0 - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } { // Oh no, attribute 0 is set twice - vertexInput.vertexBuffers[0].attributeSet.push({ - shaderLocation: 0, - format: 'float' + vertexState.vertexBuffers[0].attributes.push({ + format: 'float', + offset: 0, + shaderLocation: 0 }); - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); @@ -464,160 +481,164 @@ g.test('identical duplicate attributes are invalid', async t => { }); g.test('we cannot set same shader location', async t => { { - const vertexInput = { + const vertexState = { vertexBuffers: [{ - stride: 0, - attributeSet: [{ - shaderLocation: 0, - format: 'float' + arrayStride: 0, + attributes: [{ + format: 'float', + offset: 0, + shaderLocation: 0 }, { + format: 'float', offset: Float32Array.BYTES_PER_ELEMENT, - shaderLocation: 1, - format: 'float' + shaderLocation: 1 }] }] }; { // Control case, setting different shader locations in two attributes - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } { // Test same shader location in two attributes in the same buffer - vertexInput.vertexBuffers[0].attributeSet[1].shaderLocation = 0; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + vertexState.vertexBuffers[0].attributes[1].shaderLocation = 0; + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); } } { - const vertexInput = { + const vertexState = { vertexBuffers: [{ - stride: 0, - attributeSet: [{ - shaderLocation: 0, - format: 'float' + arrayStride: 0, + attributes: [{ + format: 'float', + offset: 0, + shaderLocation: 0 }] }, { - stride: 0, - attributeSet: [{ - shaderLocation: 0, - format: 'float' + arrayStride: 0, + attributes: [{ + format: 'float', + offset: 0, + shaderLocation: 0 }] }] }; // Test same shader location in two attributes in different buffers - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); } }); g.test('check out of bounds condition on attribute shader location', async t => { - const vertexInput = { + const vertexState = { vertexBuffers: [{ - stride: 0, - attributeSet: [{ - shaderLocation: MAX_VERTEX_ATTRIBUTES - 1, - format: 'float' + arrayStride: 0, + attributes: [{ + format: 'float', + offset: 0, + shaderLocation: MAX_VERTEX_ATTRIBUTES - 1 }] }] }; { // Control case, setting last attribute shader location - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } { // Test attribute location OOB - vertexInput.vertexBuffers[0].attributeSet[0].shaderLocation = MAX_VERTEX_ATTRIBUTES; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + vertexState.vertexBuffers[0].attributes[0].shaderLocation = MAX_VERTEX_ATTRIBUTES; + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); } }); g.test('check attribute offset out of bounds', async t => { - const vertexInput = { + const vertexState = { vertexBuffers: [{ - stride: 0, - attributeSet: [{ + arrayStride: 0, + attributes: [{ + format: 'float2', offset: MAX_VERTEX_BUFFER_END - 2 * Float32Array.BYTES_PER_ELEMENT, - shaderLocation: 0, - format: 'float2' + shaderLocation: 0 }] }] }; { // Control case, setting max attribute offset to MAX_VERTEX_BUFFER_END - 8 - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } { // Control case, setting attribute offset to 8 - vertexInput.vertexBuffers[0].attributeSet[0].offset = 8; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + vertexState.vertexBuffers[0].attributes[0].offset = 8; + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } { // Test attribute offset out of bounds - vertexInput.vertexBuffers[0].attributeSet[0].offset = MAX_VERTEX_BUFFER_END - 4; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + vertexState.vertexBuffers[0].attributes[0].offset = MAX_VERTEX_BUFFER_END - 4; + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); } }); g.test('check multiple of 4 bytes constraint on offset', async t => { - const vertexInput = { + const vertexState = { vertexBuffers: [{ - stride: 0, - attributeSet: [{ + arrayStride: 0, + attributes: [{ + format: 'float', offset: Float32Array.BYTES_PER_ELEMENT, - shaderLocation: 0, - format: 'float' + shaderLocation: 0 }] }] }; { // Control case, setting offset 4 bytes - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.device.createRenderPipeline(descriptor); } { // Test offset of 2 bytes with uchar2 format - vertexInput.vertexBuffers[0].attributeSet[0].offset = 2; - vertexInput.vertexBuffers[0].attributeSet[0].format = 'uchar2'; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + vertexState.vertexBuffers[0].attributes[0].offset = 2; + vertexState.vertexBuffers[0].attributes[0].format = 'uchar2'; + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); } { // Test offset of 2 bytes with float format - vertexInput.vertexBuffers[0].attributeSet[0].offset = 2; - vertexInput.vertexBuffers[0].attributeSet[0].format = 'float'; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + vertexState.vertexBuffers[0].attributes[0].offset = 2; + vertexState.vertexBuffers[0].attributes[0].format = 'float'; + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); } }); g.test('check attribute offset overflow', async t => { - const vertexInput = { + const vertexState = { vertexBuffers: [{ - stride: 0, - attributeSet: [{ + arrayStride: 0, + attributes: [{ + format: 'float', offset: Number.MAX_SAFE_INTEGER, - shaderLocation: 0, - format: 'float' + shaderLocation: 0 }] }] }; - const descriptor = t.getDescriptor(vertexInput, VERTEX_SHADER_CODE_WITH_NO_INPUT); + const descriptor = t.getDescriptor(vertexState, VERTEX_SHADER_CODE_WITH_NO_INPUT); t.expectValidationError(() => { t.device.createRenderPipeline(descriptor); }); }); -//# sourceMappingURL=vertex_input.spec.js.map
\ No newline at end of file +//# sourceMappingURL=vertex_state.spec.js.map
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html index 9dd364ed327..32f2eb9b460 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.https.html @@ -371,4 +371,30 @@ promise_test(async t => { assert_array_equals(pc2.iceStates, ['new', 'checking', 'connected']); }, 'Responder ICE connection state behaves as expected'); +/* + Test case for step 11 of PeerConnection.close(). + ... + 11. Set connection's ICE connection state to "closed". This does not invoke + the "update the ICE connection state" procedure, and does not fire any + event. + ... +*/ +promise_test(async t => { + const pc1 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + const pc2 = new RTCPeerConnection(); + const stream = await getNoiseStream({ audio: true }); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); + + stream.getTracks().forEach(track => pc1.addTrack(track, stream)); + exchangeIceCandidates(pc1, pc2); + doSignalingHandshake(pc1, pc2); + await listenToIceConnected(pc2); + + pc2.oniceconnectionstatechange = t.unreached_func(); + pc2.close(); + await Promise.resolve(); + assert_true(pc2.iceConnectionState === 'closed'); +}, 'Closing a PeerConnection should not fire iceconnectionstatechange event'); + </script> diff --git a/tests/wpt/web-platform-tests/websockets/unload-a-document/001-1.html b/tests/wpt/web-platform-tests/websockets/unload-a-document/001-1.html index bd0c3668695..75d689e0b3d 100644 --- a/tests/wpt/web-platform-tests/websockets/unload-a-document/001-1.html +++ b/tests/wpt/web-platform-tests/websockets/unload-a-document/001-1.html @@ -6,7 +6,6 @@ <script> var controller = opener || parent; var t = controller.t; -var assert_equals = controller.asset_equals; var assert_unreached = controller.assert_unreached; var uuid = controller.uuid; t.add_cleanup(function() {delete sessionStorage[uuid];}); diff --git a/tests/wpt/web-platform-tests/websockets/unload-a-document/002-1.html b/tests/wpt/web-platform-tests/websockets/unload-a-document/002-1.html index d151b231f25..546de89dfee 100644 --- a/tests/wpt/web-platform-tests/websockets/unload-a-document/002-1.html +++ b/tests/wpt/web-platform-tests/websockets/unload-a-document/002-1.html @@ -6,9 +6,9 @@ <script> var controller = opener || parent; var t = controller.t; -var assert_equals = controller.asset_equals; +var assert_equals = controller.assert_equals; var assert_unreached = controller.assert_unreached ; -var uuid = controller.token; +var uuid = controller.uuid; t.add_cleanup(function() {delete sessionStorage[uuid];}); t.step(function() { // this test can fail if the document is unloaded on navigation e.g. due to OOM diff --git a/tests/wpt/web-platform-tests/wpt.py b/tests/wpt/web-platform-tests/wpt.py index 0736186c5d8..c65e1ed2c6c 100644 --- a/tests/wpt/web-platform-tests/wpt.py +++ b/tests/wpt/web-platform-tests/wpt.py @@ -1 +1,3 @@ -execfile("wpt")
\ No newline at end of file +# This file exists to allow `python wpt <command>` to work on Windows: +# https://github.com/web-platform-tests/wpt/pull/6907 +execfile("wpt") diff --git a/tests/wpt/web-platform-tests/xhr/resources/echo-method.py b/tests/wpt/web-platform-tests/xhr/resources/echo-method.py index 5351d1961ac..ccb46b6b2eb 100644 --- a/tests/wpt/web-platform-tests/xhr/resources/echo-method.py +++ b/tests/wpt/web-platform-tests/xhr/resources/echo-method.py @@ -1,6 +1,17 @@ +# This handler is designed to verify that UAs correctly discard the body of +# responses to HTTP HEAD requests. If the response body is written to a +# separate TCP packet, then this behavior cannot be verified. This handler uses +# the response writer to ensure that the body is transmitted in the same packet +# as the headers. In this way, non-conforming UAs will consistently fail the +# associated test. + def main(request, response): - response.send_body_for_head_request = True - headers = [("Content-type", "text/plain")] content = request.method - return headers, content + response.add_required_headers = False + response.writer.write('''HTTP/1.1 200 OK +Content-type: text/plain +Content-Length: {} + +{}'''.format(len(content), content)) + response.writer.flush() |