diff options
310 files changed, 8134 insertions, 895 deletions
diff --git a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini index 3b874fc1748..6a3af4e2ece 100644 --- a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini +++ b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini @@ -14,6 +14,9 @@ [Revoke blob URL after creating Request, will fetch] expected: FAIL + [Revoke blob URL after calling fetch, fetch should succeed] + expected: FAIL + [url-with-fetch.any.html] [Untitled] @@ -34,6 +37,3 @@ [Revoke blob URL after creating Request, will fetch] expected: FAIL - [Revoke blob URL after calling fetch, fetch should succeed] - expected: FAIL - diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 8268ec48c71..c6fc3b65f77 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -142007,6 +142007,18 @@ {} ] ], + "css/css-tables/percent-width-cell-dynamic.html": [ + [ + "css/css-tables/percent-width-cell-dynamic.html", + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], "css/css-tables/percentages-grandchildren-quirks-mode-001.html": [ [ "css/css-tables/percentages-grandchildren-quirks-mode-001.html", @@ -148087,6 +148099,30 @@ {} ] ], + "css/css-text/text-transform/text-transform-fullwidth-006.html": [ + [ + "css/css-text/text-transform/text-transform-fullwidth-006.html", + [ + [ + "/css/css-text/text-transform/reference/text-transform-fullwidth-006-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/text-transform-fullwidth-007.html": [ + [ + "css/css-text/text-transform/text-transform-fullwidth-007.html", + [ + [ + "/css/css-text/text-transform/reference/text-transform-fullwidth-007-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/text-transform/text-transform-lowercase-001.xht": [ [ "css/css-text/text-transform/text-transform-lowercase-001.xht", @@ -149071,6 +149107,78 @@ {} ] ], + "css/css-text/white-space/break-spaces-tab-001.html": [ + [ + "css/css-text/white-space/break-spaces-tab-001.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-tab-002.html": [ + [ + "css/css-text/white-space/break-spaces-tab-002.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-tab-003.html": [ + [ + "css/css-text/white-space/break-spaces-tab-003.html", + [ + [ + "/css/css-text/white-space/reference/break-spaces-tab-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-tab-004.html": [ + [ + "css/css-text/white-space/break-spaces-tab-004.html", + [ + [ + "/css/css-text/white-space/reference/break-spaces-tab-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-tab-005.html": [ + [ + "css/css-text/white-space/break-spaces-tab-005.html", + [ + [ + "/css/css-text/white-space/reference/break-spaces-tab-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-tab-006.html": [ + [ + "css/css-text/white-space/break-spaces-tab-006.html", + [ + [ + "/css/css-text/white-space/reference/break-spaces-tab-005-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/white-space/control-chars-000.html": [ [ "css/css-text/white-space/control-chars-000.html", @@ -150211,6 +150319,78 @@ {} ] ], + "css/css-text/white-space/pre-wrap-tab-001.html": [ + [ + "css/css-text/white-space/pre-wrap-tab-001.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/pre-wrap-tab-002.html": [ + [ + "css/css-text/white-space/pre-wrap-tab-002.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/pre-wrap-tab-003.html": [ + [ + "css/css-text/white-space/pre-wrap-tab-003.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/pre-wrap-tab-004.html": [ + [ + "css/css-text/white-space/pre-wrap-tab-004.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/pre-wrap-tab-005.html": [ + [ + "css/css-text/white-space/pre-wrap-tab-005.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/pre-wrap-tab-006.html": [ + [ + "css/css-text/white-space/pre-wrap-tab-006.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/white-space/tab-stop-threshold-001.html": [ [ "css/css-text/white-space/tab-stop-threshold-001.html", @@ -150663,18 +150843,6 @@ {} ] ], - "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-006.html": [ - [ - "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-006.html", - [ - [ - "/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-004-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-text/white-space/white-space-wrap-after-nowrap-001.html": [ [ "css/css-text/white-space/white-space-wrap-after-nowrap-001.html", @@ -178601,6 +178769,18 @@ {} ] ], + "css/filter-effects/backdrop-filter-plus-opacity.html": [ + [ + "css/filter-effects/backdrop-filter-plus-opacity.html", + [ + [ + "/css/filter-effects/backdrop-filter-plus-opacity-ref.html", + "==" + ] + ], + {} + ] + ], "css/filter-effects/backdrop-filter-reference-filter.html": [ [ "css/filter-effects/backdrop-filter-reference-filter.html", @@ -254411,6 +254591,12 @@ "css/css-text/text-transform/reference/text-transform-fullwidth-001-ref.xht": [ [] ], + "css/css-text/text-transform/reference/text-transform-fullwidth-006-ref.html": [ + [] + ], + "css/css-text/text-transform/reference/text-transform-fullwidth-007-ref.html": [ + [] + ], "css/css-text/text-transform/reference/text-transform-lowercase-001-ref.xht": [ [] ], @@ -254594,6 +254780,12 @@ "css/css-text/text-transform/text-transform-lowercase-002-ref.xht": [ [] ], + "css/css-text/white-space/reference/break-spaces-tab-003-ref.html": [ + [] + ], + "css/css-text/white-space/reference/break-spaces-tab-005-ref.html": [ + [] + ], "css/css-text/white-space/reference/control-chars-000-ref.html": [ [] ], @@ -258977,6 +259169,9 @@ "css/filter-effects/backdrop-filter-plus-filter-ref.html": [ [] ], + "css/filter-effects/backdrop-filter-plus-opacity-ref.html": [ + [] + ], "css/filter-effects/backdrop-filter-update-ref.html": [ [] ], @@ -272825,6 +273020,9 @@ "lint.whitelist": [ [] ], + "loading/lazyload/common.js": [ + [] + ], "loading/lazyload/resources/image.png": [ [] ], @@ -278723,6 +278921,15 @@ "service-workers/service-worker/resources/update-registration-with-type.py": [ [] ], + "service-workers/service-worker/resources/update-smaller-body-after-update-worker.js": [ + [] + ], + "service-workers/service-worker/resources/update-smaller-body-before-update-worker.js": [ + [] + ], + "service-workers/service-worker/resources/update-worker-from-file.py": [ + [] + ], "service-workers/service-worker/resources/update-worker.py": [ [] ], @@ -283640,10 +283847,10 @@ "tools/wptrunner/wptrunner/browsers/epiphany.py": [ [] ], - "tools/wptrunner/wptrunner/browsers/fennec.py": [ + "tools/wptrunner/wptrunner/browsers/firefox.py": [ [] ], - "tools/wptrunner/wptrunner/browsers/firefox.py": [ + "tools/wptrunner/wptrunner/browsers/firefox_android.py": [ [] ], "tools/wptrunner/wptrunner/browsers/ie.py": [ @@ -302543,6 +302750,12 @@ {} ] ], + "animation-worklet/worklet-animation-get-computed-timing-progress-on-worklet-thread.https.html": [ + [ + "animation-worklet/worklet-animation-get-computed-timing-progress-on-worklet-thread.https.html", + {} + ] + ], "animation-worklet/worklet-animation-pause.https.html": [ [ "animation-worklet/worklet-animation-pause.https.html", @@ -310255,6 +310468,12 @@ {} ] ], + "css/css-box/parsing/margin-computed.html": [ + [ + "css/css-box/parsing/margin-computed.html", + {} + ] + ], "css/css-box/parsing/margin-invalid.html": [ [ "css/css-box/parsing/margin-invalid.html", @@ -314491,6 +314710,12 @@ {} ] ], + "css/css-logical/parsing/block-size-computed.html": [ + [ + "css/css-logical/parsing/block-size-computed.html", + {} + ] + ], "css/css-logical/parsing/block-size-invalid.html": [ [ "css/css-logical/parsing/block-size-invalid.html", @@ -314623,6 +314848,12 @@ {} ] ], + "css/css-logical/parsing/inline-size-computed.html": [ + [ + "css/css-logical/parsing/inline-size-computed.html", + {} + ] + ], "css/css-logical/parsing/inline-size-invalid.html": [ [ "css/css-logical/parsing/inline-size-invalid.html", @@ -319213,6 +319444,294 @@ {} ] ], + "css/css-text/i18n/ja/css-text-line-break-ja-pr-loose.html": [ + [ + "css/css-text/i18n/ja/css-text-line-break-ja-pr-loose.html", + {} + ] + ], + "css/css-text/i18n/ja/css-text-line-break-ja-pr-normal.html": [ + [ + "css/css-text/i18n/ja/css-text-line-break-ja-pr-normal.html", + {} + ] + ], + "css/css-text/i18n/ja/css-text-line-break-ja-pr-strict.html": [ + [ + "css/css-text/i18n/ja/css-text-line-break-ja-pr-strict.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-cj-loose.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-cj-loose.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-cj-normal.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-cj-normal.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-cj-strict.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-cj-strict.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-cpm-loose.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-cpm-loose.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-cpm-normal.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-cpm-normal.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-cpm-strict.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-cpm-strict.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-loose.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-loose.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-normal.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-normal.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-strict.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-strict.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-in-loose.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-in-loose.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-in-normal.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-in-normal.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-in-strict.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-in-strict.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-iteration-loose.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-iteration-loose.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-iteration-normal.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-iteration-normal.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-iteration-strict.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-iteration-strict.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-po-loose.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-po-loose.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-po-normal.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-po-normal.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-po-strict.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-po-strict.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-pr-loose.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-pr-loose.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-pr-normal.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-pr-normal.html", + {} + ] + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-pr-strict.html": [ + [ + "css/css-text/i18n/other-lang/css-text-line-break-de-pr-strict.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-cj-loose.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-cj-loose.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-cj-normal.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-cj-normal.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-cj-strict.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-cj-strict.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-cpm-loose.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-cpm-loose.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-cpm-normal.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-cpm-normal.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-cpm-strict.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-cpm-strict.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-loose.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-loose.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-normal.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-normal.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-strict.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-strict.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-in-loose.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-in-loose.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-in-normal.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-in-normal.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-in-strict.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-in-strict.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-iteration-loose.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-iteration-loose.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-iteration-normal.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-iteration-normal.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-iteration-strict.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-iteration-strict.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-po-loose.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-po-loose.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-po-normal.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-po-normal.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-po-strict.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-po-strict.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-pr-loose.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-pr-loose.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-pr-normal.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-pr-normal.html", + {} + ] + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-pr-strict.html": [ + [ + "css/css-text/i18n/unknown-lang/css-text-line-break-pr-strict.html", + {} + ] + ], + "css/css-text/i18n/zh/css-text-line-break-zh-cj-loose.html": [ + [ + "css/css-text/i18n/zh/css-text-line-break-zh-cj-loose.html", + {} + ] + ], + "css/css-text/i18n/zh/css-text-line-break-zh-cj-normal.html": [ + [ + "css/css-text/i18n/zh/css-text-line-break-zh-cj-normal.html", + {} + ] + ], + "css/css-text/i18n/zh/css-text-line-break-zh-cj-strict.html": [ + [ + "css/css-text/i18n/zh/css-text-line-break-zh-cj-strict.html", + {} + ] + ], "css/css-text/i18n/zh/css-text-line-break-zh-cpm-loose.html": [ [ "css/css-text/i18n/zh/css-text-line-break-zh-cpm-loose.html", @@ -319303,6 +319822,24 @@ {} ] ], + "css/css-text/i18n/zh/css-text-line-break-zh-pr-loose.html": [ + [ + "css/css-text/i18n/zh/css-text-line-break-zh-pr-loose.html", + {} + ] + ], + "css/css-text/i18n/zh/css-text-line-break-zh-pr-normal.html": [ + [ + "css/css-text/i18n/zh/css-text-line-break-zh-pr-normal.html", + {} + ] + ], + "css/css-text/i18n/zh/css-text-line-break-zh-pr-strict.html": [ + [ + "css/css-text/i18n/zh/css-text-line-break-zh-pr-strict.html", + {} + ] + ], "css/css-text/inheritance.html": [ [ "css/css-text/inheritance.html", @@ -319843,15 +320380,21 @@ {} ] ], - "css/css-transforms/parsing/perspective-origin-parsing-invalid.html": [ + "css/css-transforms/parsing/perspective-origin-computed.html": [ + [ + "css/css-transforms/parsing/perspective-origin-computed.html", + {} + ] + ], + "css/css-transforms/parsing/perspective-origin-invalid.html": [ [ - "css/css-transforms/parsing/perspective-origin-parsing-invalid.html", + "css/css-transforms/parsing/perspective-origin-invalid.html", {} ] ], - "css/css-transforms/parsing/perspective-origin-parsing-valid.html": [ + "css/css-transforms/parsing/perspective-origin-valid.html": [ [ - "css/css-transforms/parsing/perspective-origin-parsing-valid.html", + "css/css-transforms/parsing/perspective-origin-valid.html", {} ] ], @@ -319903,6 +320446,12 @@ {} ] ], + "css/css-transforms/parsing/transform-origin-computed.html": [ + [ + "css/css-transforms/parsing/transform-origin-computed.html", + {} + ] + ], "css/css-transforms/parsing/transform-origin-invalid.html": [ [ "css/css-transforms/parsing/transform-origin-invalid.html", @@ -324221,6 +324770,12 @@ {} ] ], + "css/cssom-view/scrollLeftTop.html": [ + [ + "css/cssom-view/scrollLeftTop.html", + {} + ] + ], "css/cssom-view/scrollWidthHeight.xht": [ [ "css/cssom-view/scrollWidthHeight.xht", @@ -325309,6 +325864,12 @@ {} ] ], + "css/mediaqueries/width-equals-window-inner-width.html": [ + [ + "css/mediaqueries/width-equals-window-inner-width.html", + {} + ] + ], "css/motion/animation/offset-anchor-interpolation.html": [ [ "css/motion/animation/offset-anchor-interpolation.html", @@ -359814,6 +360375,12 @@ {} ] ], + "largest-contentful-paint/loadTime-after-appendChild.html": [ + [ + "largest-contentful-paint/loadTime-after-appendChild.html", + {} + ] + ], "largest-contentful-paint/observe-image.html": [ [ "largest-contentful-paint/observe-image.html", @@ -359826,6 +360393,18 @@ {} ] ], + "largest-contentful-paint/repeated-image.html": [ + [ + "largest-contentful-paint/repeated-image.html", + {} + ] + ], + "largest-contentful-paint/supported-lcp-type.html": [ + [ + "largest-contentful-paint/supported-lcp-type.html", + {} + ] + ], "layout-instability/buffer-layout-shift.html": [ [ "layout-instability/buffer-layout-shift.html", @@ -359900,6 +360479,24 @@ {} ] ], + "loading/lazyload/original-base-url-applied-tentative.html": [ + [ + "loading/lazyload/original-base-url-applied-tentative.html", + {} + ] + ], + "loading/lazyload/original-referrer-policy-applied-tentative.sub.html": [ + [ + "loading/lazyload/original-referrer-policy-applied-tentative.sub.html", + {} + ] + ], + "loading/lazyload/picture-loading-lazy.tentative.html": [ + [ + "loading/lazyload/picture-loading-lazy.tentative.html", + {} + ] + ], "loading/preloader-css-import-no-quote.tentative.html": [ [ "loading/preloader-css-import-no-quote.tentative.html", @@ -390884,6 +391481,14 @@ } ] ], + "std-toast/reflection.html": [ + [ + "std-toast/reflection.html", + { + "timeout": "long" + } + ] + ], "std-toast/show-toast.html": [ [ "std-toast/show-toast.html", @@ -402791,6 +403396,18 @@ {} ] ], + "web-nfc/NDEFMessage_constructor.https.html": [ + [ + "web-nfc/NDEFMessage_constructor.https.html", + {} + ] + ], + "web-nfc/NDEFRecord_constructor.https.html": [ + [ + "web-nfc/NDEFRecord_constructor.https.html", + {} + ] + ], "web-nfc/NFCErrorEvent_constructor.https.html": [ [ "web-nfc/NFCErrorEvent_constructor.https.html", @@ -444207,7 +444824,7 @@ "testharness" ], "animation-worklet/common.js": [ - "3e542e02efceb5073a08a243855b3ac309b2e3b6", + "ceb430b718b8438c933071b1dd24240ab13bf562", "support" ], "animation-worklet/current-time.https.html": [ @@ -444270,6 +444887,10 @@ "1a8afc1e89278d06572e337965a6d1ff1572d0d9", "testharness" ], + "animation-worklet/worklet-animation-get-computed-timing-progress-on-worklet-thread.https.html": [ + "a66a4b9156cd9ee0283928feaf89a782a058998e", + "testharness" + ], "animation-worklet/worklet-animation-get-timing-on-worklet-thread-ref.html": [ "aad07d5f6f26692dc47ce0219a78d3c1a50c608a", "support" @@ -467847,19 +468468,19 @@ "testharness" ], "content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image-from-script.sub.html": [ - "65311c32ad6e27a744764800e43d5ddb47160e97", + "4c86845f4dbb1a4d56474b6aa2884dcc4a20c3f3", "testharness" ], "content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image.sub.html": [ - "03829fe8a3686f9ce9c484b1e3fb2bdd328cc12f", + "dcf52aa187c7fea6d94dd11ed002e3b924d26e56", "testharness" ], "content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image-from-script.sub.html": [ - "0a7c2b43bff372ee4c1b9935306554068f07829f", + "978096f14f641907029d0198cac45ad6a7a9d4ef", "testharness" ], "content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image.sub.html": [ - "5dd82e6ddca482bdf6be75f53753465fad166c5b", + "6e0e6ddbede1aff3b1521cfad1aa789d9b80858f", "testharness" ], "content-security-policy/securitypolicyviolation/style-sample-no-opt-in.html": [ @@ -468515,11 +469136,11 @@ "support" ], "cookie-store/cookieListItem_attributes.tentative.https.window.js": [ - "3e7b02b1085ba3c7fe301a410129ba227bce7f8b", + "bf8f845f2b183202efc6405c510eb348db189894", "testharness" ], "cookie-store/cookieStore_delete_arguments.tentative.https.window.js": [ - "8cfa03dd0540cdd46d144292279e557d257dd9c2", + "dc073d8eb60321bdf5b15d67af6989dc672f21b1", "testharness" ], "cookie-store/cookieStore_delete_basic.tentative.https.window.js": [ @@ -468531,47 +469152,47 @@ "testharness" ], "cookie-store/cookieStore_event_basic.tentative.https.window.js": [ - "7f6d2d919d496be7135bae0536841611d208afea", + "5f20947dbf1051bd14ce23f45e632290da2ed7c9", "testharness" ], "cookie-store/cookieStore_event_delete.tenative.https.window.js": [ - "f84b2e067451d883b5819ae4d4b8648a38aba3b1", + "e8c6fc036a76863acf2d8b2b3660550715f1dc0d", "testharness" ], "cookie-store/cookieStore_event_overwrite.tentative.https.window.js": [ - "2a5cb5d064f912eb8d6583427360afd280bb7a23", + "3acffea41c1d6a08e5aaf1ca944567347d174de0", "testharness" ], "cookie-store/cookieStore_getAll_arguments.tentative.https.window.js": [ - "5106a6270cd9239cd34cd9f6a96c29a24dccab5b", + "a04aa8cd7ad65a56a56d3de53fa4d92192c7f05a", "testharness" ], "cookie-store/cookieStore_getAll_multiple.tentative.https.window.js": [ - "78b3c56fdd38925d9c2da17454b5f1b8b969d999", + "c09f4fc5f5794d44b61159f6a18de85cd0c57da7", "testharness" ], "cookie-store/cookieStore_getAll_set_basic.tentative.https.window.js": [ - "aa0a4ea9a03eaa96144ed62a6458ffbb183a97c6", + "dd2adabd22835d135198d7b5c3cdb5d18b7e27a5", "testharness" ], "cookie-store/cookieStore_get_arguments.tentative.https.window.js": [ - "bb126864ff7623a4c51988834e24a3894dc8a5ee", + "e338dd1bdbd098373765dcc048425899c5cbe490", "testharness" ], "cookie-store/cookieStore_get_delete_basic.tentative.https.window.js": [ - "fc9645d3e2e98063da8cf03ef50823af363c6b9c", + "5ebf09d34463250d2eeec80606b89a6ce46298e0", "testharness" ], "cookie-store/cookieStore_get_set_across_frames.tentative.https.html": [ - "c2ef184940390348020aa7e8cdfd24b4a8b9d335", + "f7c737b422e559107bb210d0cea9267829e10ba7", "testharness" ], "cookie-store/cookieStore_get_set_across_origins.tentative.sub.https.html": [ - "e8792612c4352dc1697a2d4efc8dbe6ab7092a7e", + "c67ef98bcc944dbfb815993734dcfae7dbd3eb9d", "testharness" ], "cookie-store/cookieStore_get_set_basic.tentative.https.window.js": [ - "2a082de9d30927ec5ee152acdd76cde04ed730d5", + "deb7405f2ff0ddc29214a51b80878f7b17ce66fa", "testharness" ], "cookie-store/cookieStore_in_detached_frame.tentative.https.html": [ @@ -468579,7 +469200,7 @@ "testharness" ], "cookie-store/cookieStore_set_arguments.tentative.https.window.js": [ - "18f60ad974e1570365cc0d92c36cd55330d5b721", + "ddc9981c92ddf5d3b149249db1accd16dc476ec1", "testharness" ], "cookie-store/cookieStore_special_names.tentative.https.window.js": [ @@ -468691,11 +469312,11 @@ "support" ], "cookie-store/serviceworker_cookieStore_cross_origin.tentative.https.sub.html": [ - "abc431a4d628e28adc40d7c9636766c53c16cf4e", + "6879c5da926384b2be6969b5585c8e2a75539f75", "testharness" ], "cookie-store/serviceworker_cookieStore_subscriptions.js": [ - "225e58266e2e0210299f9defef1d28eaeeb9403c", + "441573d20e9100943a33efa0e3bb8143e76491fa", "support" ], "cookie-store/serviceworker_cookieStore_subscriptions.tentative.https.html": [ @@ -468703,7 +469324,7 @@ "testharness" ], "cookie-store/serviceworker_cookieStore_subscriptions_basic.js": [ - "4a5ee5eed962f65c21ad794d02e7452ff56046a0", + "c48ad8bb98b02d572edf5080af877302527454a1", "support" ], "cookie-store/serviceworker_cookieStore_subscriptions_basic.tentative.https.html": [ @@ -468711,7 +469332,7 @@ "testharness" ], "cookie-store/serviceworker_cookieStore_subscriptions_empty.js": [ - "de521caddd8763b1d30e1c0bfcf2feea98e7bc06", + "b62318699740938134fc51ab4c42670ce8878aca", "support" ], "cookie-store/serviceworker_cookieStore_subscriptions_empty.tentative.https.html": [ @@ -468719,7 +469340,7 @@ "testharness" ], "cookie-store/serviceworker_cookieStore_subscriptions_eventhandler_attribute.js": [ - "8784af7e6e80824711a9e20e39af33617b0a87b7", + "228b528985615f8b73d2f5e11452e591873fecbe", "support" ], "cookie-store/serviceworker_cookieStore_subscriptions_eventhandler_attribute.tentative.https.html": [ @@ -468727,7 +469348,7 @@ "testharness" ], "cookie-store/serviceworker_cookieStore_subscriptions_mismatch.js": [ - "12759a2e3ae9c40cb301482f093fb5b30b63cfbc", + "43edadd7bb86946400fcb707b2e76eada088b8a1", "support" ], "cookie-store/serviceworker_cookieStore_subscriptions_mismatch.tentative.https.html": [ @@ -535758,6 +536379,10 @@ "7cc09a594ed17648ec29b9bdc2615fa6dbcbd3a7", "testharness" ], + "css/css-box/parsing/margin-computed.html": [ + "f22f6cdc0f503488418b7741f12ec5554f213477", + "testharness" + ], "css/css-box/parsing/margin-invalid.html": [ "77009170938d9634497f73bc21501ced502c7008", "testharness" @@ -556070,6 +556695,10 @@ "3e133db880cd32d963d701bb184d28faae959aa5", "testharness" ], + "css/css-logical/parsing/block-size-computed.html": [ + "de3a3c2a0c5c80b5f0f4225a5904b81797afb34e", + "testharness" + ], "css/css-logical/parsing/block-size-invalid.html": [ "37d88907735ff58ab4bebb9073f626e14d864955", "testharness" @@ -556158,6 +556787,10 @@ "81c7049c5e94c891b72f953356fadac0aeb3ae5c", "testharness" ], + "css/css-logical/parsing/inline-size-computed.html": [ + "0f60165a347e1ad8e67715d03d1b46c9a27b146c", + "testharness" + ], "css/css-logical/parsing/inline-size-invalid.html": [ "d3d5d3f84d9d01392533e787b9e6755d592ec96e", "testharness" @@ -559787,7 +560420,7 @@ "support" ], "css/css-paint-api/background-image-alpha.https.html": [ - "53d869d06079717637cc432cdcf46e35170c2216", + "7f1e31bf39bbc98bd6f37a99f7e660cda3590de0", "reftest" ], "css/css-paint-api/background-image-multiple-ref.html": [ @@ -559795,7 +560428,7 @@ "support" ], "css/css-paint-api/background-image-multiple.https.html": [ - "79ff8836c15c372155badcc4013d3d33dc039d18", + "51c928d2a67c74e173a9f815b3c97a8ec8a21059", "reftest" ], "css/css-paint-api/background-image-tiled-ref.html": [ @@ -559803,7 +560436,7 @@ "support" ], "css/css-paint-api/background-image-tiled.https.html": [ - "8498c82a355e41513c1b2521dfb489dcd4f6cd75", + "11647c9228c8fb2f10bf5e3aeb25967b40478c45", "reftest" ], "css/css-paint-api/geometry-background-image-001-ref.html": [ @@ -559811,7 +560444,7 @@ "support" ], "css/css-paint-api/geometry-background-image-001.https.html": [ - "601d4187b091aa08be5e133a56ffe24bcbb1f8df", + "eb7f6716ada1bdea3761b4d164e9b2ca7ea35f98", "reftest" ], "css/css-paint-api/geometry-background-image-002-ref.html": [ @@ -559819,7 +560452,7 @@ "support" ], "css/css-paint-api/geometry-background-image-002.https.html": [ - "1d57073bf20660f2cc7faab9184ace78967e097e", + "e636aa73b3b2e519c2a6c12457a6434b38036ea0", "reftest" ], "css/css-paint-api/geometry-background-image-tiled-001-ref.html": [ @@ -559827,7 +560460,7 @@ "support" ], "css/css-paint-api/geometry-background-image-tiled-001.https.html": [ - "8e28b54b36df37845bb4a6dc95b27872ddbe2ee3", + "51373a528e4ca46b0adcf665e28cc3dc1aa793bc", "reftest" ], "css/css-paint-api/geometry-background-image-tiled-002-ref.html": [ @@ -559835,7 +560468,7 @@ "support" ], "css/css-paint-api/geometry-background-image-tiled-002.https.html": [ - "9248e38641eb80efb5566b5750616fda8527aa34", + "d55761b47cd362827bf828e03d6a8f94dd309431", "reftest" ], "css/css-paint-api/geometry-background-image-tiled-003-ref.html": [ @@ -559843,7 +560476,7 @@ "support" ], "css/css-paint-api/geometry-background-image-tiled-003.https.html": [ - "5b6b6c7c65a1bcea71ae8bc69f171d0e22b1e1d6", + "6d5bdd2fa539979f4069e42cd9582c2d13fba445", "reftest" ], "css/css-paint-api/geometry-border-image-001-ref.html": [ @@ -559851,7 +560484,7 @@ "support" ], "css/css-paint-api/geometry-border-image-001.https.html": [ - "3fb4643cd472dd7e1beaee5cf32c75499a1d02bb", + "ff7f56e299ddd2a0206d7a25d0d930afb616c0f0", "reftest" ], "css/css-paint-api/geometry-border-image-002-ref.html": [ @@ -559859,7 +560492,7 @@ "support" ], "css/css-paint-api/geometry-border-image-002.https.html": [ - "26e24bb0146b015a84dae57db5d4a2398ce00a8e", + "d6e47f049071416302a250c019b110d7dcaa8071", "reftest" ], "css/css-paint-api/geometry-border-image-003-ref.html": [ @@ -559867,7 +560500,7 @@ "support" ], "css/css-paint-api/geometry-border-image-003.https.html": [ - "a26f2b7d10980b5f6d7d709c131b37cbc61add0d", + "36af043cc5fe9e2ebe0dc94855b3b1def55f28aa", "reftest" ], "css/css-paint-api/geometry-border-image-004-ref.html": [ @@ -559875,7 +560508,7 @@ "support" ], "css/css-paint-api/geometry-border-image-004.https.html": [ - "60db7ff4bc59abd8133a38a1f92f8cc2e9054b7d", + "0f483cd5d19acf4923e60a9f59f55b2bd1e2d0d0", "reftest" ], "css/css-paint-api/geometry-with-float-size-ref.html": [ @@ -559883,7 +560516,7 @@ "support" ], "css/css-paint-api/geometry-with-float-size.https.html": [ - "65477e4b3bf369d511113cbe81d04531281edc4c", + "8cd90c84318dff22e3099af7ef042f92f5b96506", "reftest" ], "css/css-paint-api/hidpi/canvas-transform-ref.html": [ @@ -559891,7 +560524,7 @@ "support" ], "css/css-paint-api/hidpi/canvas-transform.https.html": [ - "d160a8673c21d17e58ca20eb437c22cd76c97104", + "6dc57abaf777c15ca3a868c03eee9e3c0559677c", "reftest" ], "css/css-paint-api/hidpi/device-pixel-ratio-ref.html": [ @@ -559899,11 +560532,11 @@ "support" ], "css/css-paint-api/hidpi/device-pixel-ratio.https.html": [ - "46a9aa28f2f8876a06751fcdd26399c915dd1c1c", + "f9516e5ccf95dd96f32e770bd132cdc9ebe1e6f4", "reftest" ], "css/css-paint-api/idlharness.html": [ - "c9675ab0412bb955d7a8653e7d28884a6953800b", + "aad04a17cc4c660084fa196cb85da5d88b8560d4", "testharness" ], "css/css-paint-api/invalid-image-constructor-error-ref.html": [ @@ -559911,7 +560544,7 @@ "support" ], "css/css-paint-api/invalid-image-constructor-error.https.html": [ - "439ff8b4e5a3c050a350349b37aad5c350dd2bbd", + "8facde43f57cec2bcd75efe25fee58d4c70ead62", "reftest" ], "css/css-paint-api/invalid-image-paint-error-ref.html": [ @@ -559919,7 +560552,7 @@ "support" ], "css/css-paint-api/invalid-image-paint-error.https.html": [ - "2806ad9204853ab67cf90bd664382bb2cf2a8e67", + "17c283e35caae2a69e9c748fe19a8dd53b894e35", "reftest" ], "css/css-paint-api/invalid-image-pending-script-ref.html": [ @@ -559927,7 +560560,7 @@ "support" ], "css/css-paint-api/invalid-image-pending-script.https.html": [ - "4347a00a499ff49d96051bb3fcfdcc42ba41999f", + "20a61eff41b68e8f756de2f3fe81bd20e736c92c", "reftest" ], "css/css-paint-api/overdraw-ref.html": [ @@ -559935,7 +560568,7 @@ "support" ], "css/css-paint-api/overdraw.https.html": [ - "5be26f7e0a877e9835cd11563c28392281c84cc1", + "8d3dc72f9315884c342013d50f3936804a0747fe", "reftest" ], "css/css-paint-api/paint-arguments-ref.html": [ @@ -559943,7 +560576,7 @@ "support" ], "css/css-paint-api/paint-arguments.https.html": [ - "abfb2a68e4be069055336585b4573dcfee1dd121", + "615027c8fe393c2109bb99bc6bb1c2f36d104f9e", "reftest" ], "css/css-paint-api/paint-function-arguments-ref.html": [ @@ -559951,7 +560584,7 @@ "support" ], "css/css-paint-api/paint-function-arguments.https.html": [ - "d87b0b80a61d2f5edcd5e5d7227dfecd9f580ae3", + "3a1e579f5ecbe324d48a6e0cb4d94a77cb4361d3", "reftest" ], "css/css-paint-api/paint2d-composite-ref.html": [ @@ -559959,7 +560592,7 @@ "support" ], "css/css-paint-api/paint2d-composite.https.html": [ - "80e94e45a8cddafe8b81a9a48ef16b4e0a03f586", + "edf8a766fabedaac61f2de9607ebde01e0d86c5b", "reftest" ], "css/css-paint-api/paint2d-filter-ref.html": [ @@ -559967,7 +560600,7 @@ "support" ], "css/css-paint-api/paint2d-filter.https.html": [ - "d0c45395757c971c9a6c1c0895b7599191596c95", + "9d598c7a9689fccd3fcf140f912f58233f734b14", "reftest" ], "css/css-paint-api/paint2d-gradient-ref.html": [ @@ -559975,7 +560608,7 @@ "support" ], "css/css-paint-api/paint2d-gradient.https.html": [ - "892a7919f1f73b65992e1ffbd5a0654de715075d", + "1887f52b06b1033d183ef6506f92cf9fe0d69773", "reftest" ], "css/css-paint-api/paint2d-image-ref.html": [ @@ -559983,7 +560616,7 @@ "support" ], "css/css-paint-api/paint2d-image.https.html": [ - "6fce4b6898b86d4b4eeddf9c3d3660941ebc5512", + "71074df796d36a1d97a4598b62cdcc04fff390a3", "reftest" ], "css/css-paint-api/paint2d-paths-ref.html": [ @@ -559991,7 +560624,7 @@ "support" ], "css/css-paint-api/paint2d-paths.https.html": [ - "091f548cb30fd84e5af3dc22c310a4d165e6bccc", + "0e04168fcb1aae5bc555873b795dc448d476551b", "reftest" ], "css/css-paint-api/paint2d-rects-ref.html": [ @@ -559999,7 +560632,7 @@ "support" ], "css/css-paint-api/paint2d-rects.https.html": [ - "24942727d5ab14da8895587c9e0120ec9d0a6a14", + "9279aa2a870b81052360a9feadab4e406070bd3d", "reftest" ], "css/css-paint-api/paint2d-shadows-ref.html": [ @@ -560007,7 +560640,7 @@ "support" ], "css/css-paint-api/paint2d-shadows.https.html": [ - "98dcfbce2997598d371481c422d412ad403f794f", + "b641dab8860f87264cd7b23f170ba693d894af62", "reftest" ], "css/css-paint-api/paint2d-transform-ref.html": [ @@ -560015,75 +560648,75 @@ "support" ], "css/css-paint-api/paint2d-transform.https.html": [ - "c91b500a46f1d30e7a717ec9542462180e3de20f", + "d052b8c5543344ba3629c4723e5d05912cfc86dd", "reftest" ], "css/css-paint-api/parse-input-arguments-001.https.html": [ - "4356ce61f4aa5b277c6caf228e44dcbf3e6245c8", + "486f379dd7b27e70fd734d62e7de45fd8ca9ab5e", "reftest" ], "css/css-paint-api/parse-input-arguments-002.https.html": [ - "b1b50e04045fb05ad7f967a7db26f86dcf5d36b7", + "5c7b3aca048d05f8535e6d182b9c5350595464ea", "reftest" ], "css/css-paint-api/parse-input-arguments-003.https.html": [ - "3b1b0014f78a3ed0908273f0dc72b714f32c9aab", + "81904ee6f7b132fe6a58cd12d84e43b95cee625b", "reftest" ], "css/css-paint-api/parse-input-arguments-004.https.html": [ - "138a7908682a348b3a76f1244a68cae42cf3f2f2", + "9bf264b0d5fc21225c9f7ae8c887b61237b3f882", "reftest" ], "css/css-paint-api/parse-input-arguments-005.https.html": [ - "0c5e539381bd8bc9295bfa54db070c2e6b9e2ac2", + "24769f472c5b88b3b311a8d5e46e13ca3aaf6609", "reftest" ], "css/css-paint-api/parse-input-arguments-006.https.html": [ - "e99ab05a88d9fb6d8dff1a8a7dff880bc6bf0728", + "a6fcc16c5da9e135eebe3b4f53194f7fbe867fd2", "reftest" ], "css/css-paint-api/parse-input-arguments-007.https.html": [ - "53f245bce483e2074266793cec6d17c4f26ebadb", + "462cfb601069597977dabe25c806ee1af095a554", "reftest" ], "css/css-paint-api/parse-input-arguments-008.https.html": [ - "e6b863c641c0a201851c1910da158db377292217", + "d5c18b0905d76948428a3e874eccf7bda6ac944e", "reftest" ], "css/css-paint-api/parse-input-arguments-009.https.html": [ - "b23191ae34015c9a4fb7b3a4f711228b57b98b34", + "7cfdf91eb02a2d2f293f52cc3a8256243757557f", "reftest" ], "css/css-paint-api/parse-input-arguments-010.https.html": [ - "e98b431648932559400e721a0414a3955403b50a", + "142ca0c5d5d6b291f126d83554aa9ccec6aaa194", "reftest" ], "css/css-paint-api/parse-input-arguments-011.https.html": [ - "b9d54bf413d79a13b89decb578d17834a7649799", + "23eb9d3c9f98f4e2a67728be32897bf59b87a1aa", "reftest" ], "css/css-paint-api/parse-input-arguments-012.https.html": [ - "14eebeb635a73feb7303c178818f1e02df3d854d", + "fa2c6b5f56053373e3be5d48e8ca0840b090ee8f", "reftest" ], "css/css-paint-api/parse-input-arguments-013.https.html": [ - "37e3eb435ec38d8204b1c194a5da23f447aced5c", + "adc1c03cfe66f4ce6fe75c4a59ca4708f7115059", "reftest" ], "css/css-paint-api/parse-input-arguments-014.https.html": [ - "690e488b9177a2a482becc4ce38b48a264a1d6c8", + "d041ae316f7a3ea2c853828d6845716c36c13c85", "reftest" ], "css/css-paint-api/parse-input-arguments-015.https.html": [ - "fba76712466694e70e1a14c6ccd8e7f273ab981f", + "8ebe3e7c4d15fb653d890127eece81e1049df38f", "reftest" ], "css/css-paint-api/parse-input-arguments-016.https.html": [ - "31cca45facab4fb2c312f57f0c42b3e361d4baef", + "ccd0595faa514a877eb2ff0f7d9a8980b9a5b971", "reftest" ], "css/css-paint-api/parse-input-arguments-017.https.html": [ - "0d14fe74c21f4223e183f70cc95704945a0c8828", + "476e29ff12f0d75940ee5dfb5ac4079e43a7ae04", "reftest" ], "css/css-paint-api/parse-input-arguments-018-ref.html": [ @@ -560091,23 +560724,23 @@ "support" ], "css/css-paint-api/parse-input-arguments-018.https.html": [ - "541332ae777c330431f6712570fd99d9707230b6", + "e6a31cbdd41899f2d4a548a7af39e97c44140380", "reftest" ], "css/css-paint-api/parse-input-arguments-019.https.html": [ - "707a0c6ebe05ea32a9ced7bf24b62dc7fb5e9dfe", + "309ec800eacfde6302add112ecd94275f394dc1a", "reftest" ], "css/css-paint-api/parse-input-arguments-020.https.html": [ - "fe8dbad27bdf56eeb10a51f259e00d44062945e1", + "7e00b64123d5621c226b104ccec133b83f10fa6e", "reftest" ], "css/css-paint-api/parse-input-arguments-021.https.html": [ - "0c3a596236fc3c7a8dd1bb72d0bd62efa2f80f14", + "8fa043a8cdead2ebbbb83f69fe708acac05127b1", "reftest" ], "css/css-paint-api/parse-input-arguments-022.https.html": [ - "50aaa6b3c9420f1220d38c407aec84be46afaafe", + "2ff27d7a4af5d4905a76ca53228b3cc619c05ecf", "reftest" ], "css/css-paint-api/parse-input-arguments-ref.html": [ @@ -560115,127 +560748,127 @@ "support" ], "css/css-paint-api/registered-property-interpolation-001.https.html": [ - "c6e93029f101625de917394b314aecc3138ce1ec", + "5aaed62542f1231ab866b8c245424f8b676b0aeb", "reftest" ], "css/css-paint-api/registered-property-interpolation-002.https.html": [ - "cfa9a618a1f10146fd61f357d6be3367e07b2cb6", + "80b2c9339d70772bbf0468e2ff1e14c3ec088279", "reftest" ], "css/css-paint-api/registered-property-interpolation-003.https.html": [ - "314d0c082efca3073dc2d69e37f010e01f6d83b2", + "683ed403fb8b7a519b06c0b2c6d8564cb5830053", "reftest" ], "css/css-paint-api/registered-property-interpolation-004.https.html": [ - "430326a0663281678dc6133a9d0b7cf6889352e3", + "9602e902eca44eb704a8f3977c9f4416ad7aab7e", "reftest" ], "css/css-paint-api/registered-property-interpolation-005.https.html": [ - "807a0509289f3bea13ad8021f6e06c33c1552736", + "35d6ccbf3d4bc3d9278a733f7e21ab44734b2d08", "reftest" ], "css/css-paint-api/registered-property-interpolation-006.https.html": [ - "45859a514a339231bf515546e494f1de5ce127bb", + "a8cfdead0f7b6d4d358c56f4126780452e827e4e", "reftest" ], "css/css-paint-api/registered-property-interpolation-007.https.html": [ - "b3f4f1f1bba24ccdc265fb6e6c8f1a375ee8803e", + "77b80b51e67ac275aeff76baf93d0c0e8fca6ef8", "reftest" ], "css/css-paint-api/registered-property-interpolation-008.https.html": [ - "45eb90960812cb1adb2537beb3068b90e5dbfd8e", + "1ec166614e13ccda26fd066cd1ed3c5134792e48", "reftest" ], "css/css-paint-api/registered-property-interpolation-009.https.html": [ - "e45881244b2a211d2f5e5d9dfe867c13b55fac3d", + "e7a5e37c641f060458b128a4bb53e00f2ca63532", "reftest" ], "css/css-paint-api/registered-property-interpolation-010.https.html": [ - "d4d1b038e24d45e5f6941e3f7a7eb1facefe58f0", + "ee3a0f1b3217677a5a6d7049d0b85939ed271174", "reftest" ], "css/css-paint-api/registered-property-invalidation-001.https.html": [ - "26da7e2eeffac331266d8c5c8fc1754884b06d72", + "133b9238e6ceef161f99b99711839cf791c908b8", "reftest" ], "css/css-paint-api/registered-property-invalidation-002.https.html": [ - "0aab051a4c492cd25b4b96fbee78029c2f12921a", + "aadbfec42c8c89a9fa9b9a77d86f36fd36b0cbe3", "reftest" ], "css/css-paint-api/registered-property-stylemap.https.html": [ - "2305afb37df44abf4b9807bbe08c1ce0f7a1631c", + "4a6b4db521af8ddff57dd4ecaf9f9c35c5a4cc6b", "reftest" ], "css/css-paint-api/registered-property-value-001.https.html": [ - "f915dacb168a6252ace394cbe64426614b4fae16", + "970e1f3e5ed9ec422d50a9f71d935d5970b3eb12", "reftest" ], "css/css-paint-api/registered-property-value-002.https.html": [ - "7d62b0b2f65d3c7169ac0ccd338eb16ca9566e1a", + "6019151b10575afda778fc27117877d879c8839a", "reftest" ], "css/css-paint-api/registered-property-value-003.https.html": [ - "b22f18dde7c1281dea657bd89321a305e955b89d", + "b9c3bf3fd90422d3293dd30e4074c5b1dd66ee52", "reftest" ], "css/css-paint-api/registered-property-value-004.https.html": [ - "d67603f9fe8e0cd0969836d5c0748c304fdc6375", + "e04be69f80c27ee8ad83acdb5b4c0c4f23efaa0d", "reftest" ], "css/css-paint-api/registered-property-value-005.https.html": [ - "71cda9a3766f50aee0995f9bd37cb410c1919b95", + "bfecd0c56b8d538671540b9c229c7df585df1d31", "reftest" ], "css/css-paint-api/registered-property-value-006.https.html": [ - "aa03edf25f77907ef38b2320b51b535cf40985dd", + "7176b67d4bb8bf99a8bc3bfc559912424b449826", "reftest" ], "css/css-paint-api/registered-property-value-007.https.html": [ - "61256cd11cff21c31b95aeb31e8807d84b804b88", + "309fe969b6bd31a9f1c3212d92dedca8203b0942", "reftest" ], "css/css-paint-api/registered-property-value-008.https.html": [ - "06a18bd022cb7fc0dd47163ba5fdfeec6aab0b6d", + "db72408d77b9c7fe10142b1f83c9e98f38b219f3", "reftest" ], "css/css-paint-api/registered-property-value-009.https.html": [ - "2ce2a0d56bd6a8bf230c5bae4790c633c34643c6", + "a2c2e9a8cd561ef588f98a08031ad50961f59c07", "reftest" ], "css/css-paint-api/registered-property-value-010.https.html": [ - "53aef81e8e85c5aba8d88dbbee69689807735ffd", + "332a22a1b9d9d1c3c0f117c4804e19ff73b2c670", "reftest" ], "css/css-paint-api/registered-property-value-011.https.html": [ - "d5dc351f7fafcfe7636b426fb3cc262128826ed5", + "a596a5d55fd936921edc4661cdd9680950e2eebb", "reftest" ], "css/css-paint-api/registered-property-value-012.https.html": [ - "827877a51c4dd60c69056acfc0235a53a01fd91d", + "80c1e6ed37c5b8d4c611d534dbe4e4c6cbaf286c", "reftest" ], "css/css-paint-api/registered-property-value-013.https.html": [ - "e37cd556f80c4c02bdbcf5dc7905189b9e7265c3", + "7af03929d843cf5a201ff33bd3f57b1f790bd2e0", "reftest" ], "css/css-paint-api/registered-property-value-014.https.html": [ - "f42160fabe108b1d2238f5514d535be14c943d92", + "0ca1eca13ed3d4b1e2da165e827799f6ef968925", "reftest" ], "css/css-paint-api/registered-property-value-015.https.html": [ - "5b00b53c2a09a98dd762deb5f550ff26882c939b", + "d7ba26b852c15a2e4df11a071e042b7f1c523aa0", "reftest" ], "css/css-paint-api/registered-property-value-016.https.html": [ - "1ec2e1b5ab031a4c5842c190a081a7c4de14091f", + "609f00f6d0067efb6fdc44a9b54b104375303924", "reftest" ], "css/css-paint-api/registered-property-value-017.https.html": [ - "1ec2e1b5ab031a4c5842c190a081a7c4de14091f", + "609f00f6d0067efb6fdc44a9b54b104375303924", "reftest" ], "css/css-paint-api/registered-property-value-018.https.html": [ - "6be2cb8a228e34c0771c9e59b69409edf402feee", + "1f9876b6b502484c1821e559fc038d1050718d0b", "reftest" ], "css/css-paint-api/resources/html5.png": [ @@ -560251,7 +560884,7 @@ "support" ], "css/css-paint-api/style-background-image.https.html": [ - "13204cf709f284920428bbc73f55b746597e0dc2", + "8e5f2f81547f0305ff230198f1b0300c838adfde", "reftest" ], "css/css-paint-api/style-before-pseudo-ref.html": [ @@ -560259,7 +560892,7 @@ "support" ], "css/css-paint-api/style-before-pseudo.https.html": [ - "f7e2a164f177afb60baf72ef14e74b4c331c1f39", + "017b23a6caf66219a2b5912ce6eb9316cd0adfe5", "reftest" ], "css/css-paint-api/style-first-letter-pseudo-ref.html": [ @@ -560267,7 +560900,7 @@ "support" ], "css/css-paint-api/style-first-letter-pseudo.https.html": [ - "02b114560fd894eaacb9387d517de1bad7665423", + "d3c31a0508dc86aa0da95815ff2448bc2e074caf", "reftest" ], "css/css-paint-api/valid-image-after-load-ref.html": [ @@ -560275,7 +560908,7 @@ "support" ], "css/css-paint-api/valid-image-after-load.https.html": [ - "44612f98ffd50d0c2431662e6a325297dfc387a7", + "c1bf8e85548656b60145c4d54437b10a2f07880e", "reftest" ], "css/css-paint-api/valid-image-before-load-ref.html": [ @@ -560283,7 +560916,7 @@ "support" ], "css/css-paint-api/valid-image-before-load.https.html": [ - "7738d9dd115d1a3bdcd922c797d5aee65e06bf84", + "b58dfa114ea8327dbce264b44c87a4c92d2b3eb9", "reftest" ], "css/css-parser-api/META.yml": [ @@ -561051,7 +561684,7 @@ "support" ], "css/css-properties-values-api/conditional-rules.html": [ - "b4de63045f339d163830921e4e201e698edae47c", + "0bff879856c91047bb84575faf31917fd73ba049", "testharness" ], "css/css-properties-values-api/idlharness.html": [ @@ -561119,7 +561752,7 @@ "testharness" ], "css/css-properties-values-api/unit-cycles.html": [ - "c26e1cda1f6842655e7e0158d6a934e470f486ae", + "5301b6fcc77b1b7885ef7602410e4f4586391b4f", "testharness" ], "css/css-properties-values-api/url-resolution.html": [ @@ -566950,6 +567583,10 @@ "ffbb796b6afe0fe9fa93e15de3586bef96174d8b", "reftest" ], + "css/css-tables/percent-width-cell-dynamic.html": [ + "5c7ef3bf8a2b7eac7371c7d86594f52cfb42815d", + "reftest" + ], "css/css-tables/percent-width-ignored-001.tentative.html": [ "214eee7152b66a4198a2e81d7d62da9a295b5d98", "testharness" @@ -567375,7 +568012,7 @@ "support" ], "css/css-text-decor/reference/text-decoration-thickness-001-notref.html": [ - "f876afa68c655535017fe5a6e6feff0ce1df4045", + "4e7db88ce5b41e28aa43fc339c35438855abb928", "support" ], "css/css-text-decor/reference/text-decoration-thickness-green-rect-ref.html": [ @@ -567495,11 +568132,11 @@ "support" ], "css/css-text-decor/reference/text-underline-offset-001-notref.html": [ - "c56078a32ae26647c8aece448ce1d6b268f38abd", + "8b1dacfbf48a68b88e4ae47a852c810b3bc4becf", "support" ], "css/css-text-decor/reference/text-underline-offset-002-ref.html": [ - "ed2e3cefff82a120c3d33f504fd8d6ee78d9fe8c", + "6e7d5a65f0373ae49452daaa0ad401bed3f1af3e", "support" ], "css/css-text-decor/reference/text-underline-offset-scroll-001-notref.html": [ @@ -567803,7 +568440,7 @@ "testharness" ], "css/css-text-decor/text-decoration-thickness-linethrough-001.html": [ - "37e954b2b8769e882420a49ef0adf42a8b4b096e", + "6fd8383d062960e5056a1e755eafdd95e23e0f88", "reftest" ], "css/css-text-decor/text-decoration-thickness-overline-001.html": [ @@ -567987,11 +568624,11 @@ "testharness" ], "css/css-text-decor/text-underline-offset-001.html": [ - "bd9a29c7fdeeee9eeb30f226c1a3e8abfa0eac30", + "f7aeb543df3a77d277b1a8e99d1e50c3bd9a87ea", "reftest" ], "css/css-text-decor/text-underline-offset-002.html": [ - "7441ff9d9325a689f79991511b02c601f9a91701", + "dc65db7723fb31cfaa6c00b4af7e37f5b23affb2", "reftest" ], "css/css-text-decor/text-underline-offset-computed.html": [ @@ -569422,6 +570059,102 @@ "08e16f26321bab7ca03f2cfe6eddd0c324d765dc", "testharness" ], + "css/css-text/i18n/ja/css-text-line-break-ja-pr-loose.html": [ + "fde2a3d086b16ee1817e5928015d19c5016340c6", + "testharness" + ], + "css/css-text/i18n/ja/css-text-line-break-ja-pr-normal.html": [ + "d6f58cb88c1d0b81351eedb3830568fa7a7713b2", + "testharness" + ], + "css/css-text/i18n/ja/css-text-line-break-ja-pr-strict.html": [ + "8265f917225e247538c9fa2f3b28cf7e0382b2ed", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-cj-loose.html": [ + "c902bf7bddb23db69a23ad70cc4ef5f3c85e4aa0", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-cj-normal.html": [ + "e98d4a20cb1f80111b22fc7cb30d079ac3f12009", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-cj-strict.html": [ + "29810f2a3502c9b24364c626af22d591c0f0406a", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-cpm-loose.html": [ + "9dffd854891a195c8d590ade08ea29e0ff2a585a", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-cpm-normal.html": [ + "9c0af13806ca8b612700856f8007152449e3a5a8", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-cpm-strict.html": [ + "d573bac7d6b69b2fbf702aabfc656a151b15171a", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-loose.html": [ + "80b5bb0c72c7a36649678e421ea26795aeb0228d", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-normal.html": [ + "6d6043031e008e3cf01be5cb367edfa1edf8bab6", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-strict.html": [ + "e0f60cd36fe0e2c87325feac0aaf0fb96e1ff205", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-in-loose.html": [ + "fff23f36df8f22161c841ae93b637426315c9552", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-in-normal.html": [ + "d000d8eb16d55e53eab708eabec21d6d95a22fe7", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-in-strict.html": [ + "79d6e12cc8eb3d2dfcd0544f2a4cc89a80f4223b", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-iteration-loose.html": [ + "ff8ef05b14c8abac40ea2ac6c8c667a7062b97fe", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-iteration-normal.html": [ + "c5913821e5bd37d706f98818524df6c74b7519b0", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-iteration-strict.html": [ + "46c0fe3caacc6a7dec51fe75d9186385937ec901", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-po-loose.html": [ + "0eec96857fd6bb8f2b812dc91c42cebf422ec2f7", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-po-normal.html": [ + "6043912cded98d4a37087f2bca85f7dfa4c8c7f4", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-po-strict.html": [ + "8c9387fa044ae0cb5c95be33737395cf020a4cde", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-pr-loose.html": [ + "8b2fd1c038cb909665d957b29a0a1953db02f1b0", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-pr-normal.html": [ + "2da6d3b0af66f37640dda46d5dbc3cf639fa0a06", + "testharness" + ], + "css/css-text/i18n/other-lang/css-text-line-break-de-pr-strict.html": [ + "99cf5c5fbef0c51848a631ac76cfec5497fc0faa", + "testharness" + ], "css/css-text/i18n/reference/css3-text-line-break-opclns-001-ref.html": [ "d3827a52989d4d5f0f7f5f8bb625be19c5ace3a0", "support" @@ -570138,6 +570871,102 @@ "577500e2426523a3cd29ba26ae7f5686cadfdb84", "support" ], + "css/css-text/i18n/unknown-lang/css-text-line-break-cj-loose.html": [ + "d6d0a1b3493af9a5f06b296cc0545e29cf1bf29f", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-cj-normal.html": [ + "548fa17398287e4e3c8c210f1bb0e72a43d87af1", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-cj-strict.html": [ + "a4e871789a30ff001b6bf278a87edb54b4ebe733", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-cpm-loose.html": [ + "3d4cb261289599df2141a534620654cd995eccaf", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-cpm-normal.html": [ + "417973b0bbf1ce2730765d5ad5087b2f894c4db9", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-cpm-strict.html": [ + "c6685dfe79d875034b8bdc4d4a8de70a09e33948", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-loose.html": [ + "f15f2632ebeb8fef879a4e7a455e813beb964384", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-normal.html": [ + "4e9dc5607b4c7887244d032dcfe89133718dacb9", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-strict.html": [ + "595cd5df2b632c471cf3003f66545c10e2fe2aa0", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-in-loose.html": [ + "c507f78e6e403b7d1f386299a34f12fcf613e3e8", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-in-normal.html": [ + "4e8d9617baf1a66ff15fb7dc8d6d4767aa62da97", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-in-strict.html": [ + "a1c3a855041d589ea47d90c636e69f215bc27b1c", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-iteration-loose.html": [ + "420a7b6f07c2a4dbd06f7361d37d1f2cb1a26a88", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-iteration-normal.html": [ + "9d7b2c032d54b693b3fd343a44089e27d70d3963", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-iteration-strict.html": [ + "54c7559d109b5591e722fe8290e2c11f1da97d08", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-po-loose.html": [ + "e635075a4151604e7a9b59900cde690e90c84e87", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-po-normal.html": [ + "46e7472208e295d53bdd7c114bbd6f10dd354d2c", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-po-strict.html": [ + "61fd7b7ec5ca51d0ce6eddc8392c58a6281e2e74", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-pr-loose.html": [ + "b21853f386e4c7759f465ff3f3caafb00942c2a6", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-pr-normal.html": [ + "337cf8f85dba5c08b7649da26c1d2a91369721fe", + "testharness" + ], + "css/css-text/i18n/unknown-lang/css-text-line-break-pr-strict.html": [ + "d25fa6857d8bb1bb4f0b366dae17a1ac783ddcab", + "testharness" + ], + "css/css-text/i18n/zh/css-text-line-break-zh-cj-loose.html": [ + "a131395e1daff855eaf3f787fddeb60f73318dc1", + "testharness" + ], + "css/css-text/i18n/zh/css-text-line-break-zh-cj-normal.html": [ + "ff7456b82148c8c780e700185e11d8cda97bb51c", + "testharness" + ], + "css/css-text/i18n/zh/css-text-line-break-zh-cj-strict.html": [ + "dc752f1086c1346404766372d268f6c2be3c5979", + "testharness" + ], "css/css-text/i18n/zh/css-text-line-break-zh-cpm-loose.html": [ "4044e10666d15573fa4d7b3d455b956895eae19e", "testharness" @@ -570198,6 +571027,18 @@ "d85b74a54056166cedbf04f694d681ef95fff9b4", "testharness" ], + "css/css-text/i18n/zh/css-text-line-break-zh-pr-loose.html": [ + "b56cd28c84037387634ab0b91311fedf11522136", + "testharness" + ], + "css/css-text/i18n/zh/css-text-line-break-zh-pr-normal.html": [ + "198bf28cd7e5d49e57912db6637048a1f506d887", + "testharness" + ], + "css/css-text/i18n/zh/css-text-line-break-zh-pr-strict.html": [ + "c71014b42f90e1ca21b0df9f7184b94bfc282bbb", + "testharness" + ], "css/css-text/inheritance.html": [ "ef3270651c3df4ae6112fdfeec0e7fea4b9d6ccf", "testharness" @@ -570263,55 +571104,55 @@ "reftest" ], "css/css-text/line-break/line-break-anywhere-004.html": [ - "daf8420b3930efaecd6f579794105def64dcc75c", + "19b98417b0ffc1e0d9c18873408376cd534084f4", "reftest" ], "css/css-text/line-break/line-break-anywhere-005.html": [ - "47f675eda6ecc6fdaba17cbc06f6df960db87b75", + "5e286a0d769b25816390297851d9ff85a9e60db0", "reftest" ], "css/css-text/line-break/line-break-anywhere-006.html": [ - "de5a43eab444bf440ce44402972e575d2c70f967", + "207cf84f756d608a9e494fa0386dc64468ad8bb7", "reftest" ], "css/css-text/line-break/line-break-anywhere-007.html": [ - "300d9bd92981eca6e87d19caf973d59df847638d", + "b8e4627e7bc93abc79be473b7bdaadebf2d8fd8a", "reftest" ], "css/css-text/line-break/line-break-anywhere-008.html": [ - "a7590a2ee278b218c5e93f90fdf2e3837f4db2c2", + "6b7fb14f5cf2300981b2123a130467eccc4634eb", "reftest" ], "css/css-text/line-break/line-break-anywhere-009.html": [ - "4cc3f4ee392bde3b0cfd4a52fb6af06d3696bcb2", + "6a0ab913330877453233a3aa14aac2aed5a70c6d", "reftest" ], "css/css-text/line-break/line-break-anywhere-010.html": [ - "6554bf68ce13d0f3a3f3d020c01a749aca4228dd", + "19cc7966028841b6b7aa0a8e890f83623e2429a4", "reftest" ], "css/css-text/line-break/line-break-anywhere-011.html": [ - "6cbec13008edd1fadb022f0e8f50f63c6f0a1642", + "70d9628a6f01b3e792ab27b0b2e1cd9740a67080", "reftest" ], "css/css-text/line-break/line-break-anywhere-012.html": [ - "2dfe6071fdfe2a2993812a28c7e1408d59da763c", + "0c01a0c28ba634db6fb1143beb554e62c2d882cb", "reftest" ], "css/css-text/line-break/line-break-anywhere-013.html": [ - "2b60ff5c622e0d7e8e96e1207e7113f14043f9bf", + "9aef864c9219caadc3cda6d67ee01f8d42b099a1", "reftest" ], "css/css-text/line-break/line-break-anywhere-014.html": [ - "04969bb65a9b84c033e40e38f2ccc0165a0cc36d", + "ddbeddf12fe21a462c4d32a49b621fa623097e01", "reftest" ], "css/css-text/line-break/line-break-anywhere-015.html": [ - "34c261e437241516b7d5060a037d8ea10493b0e5", + "b0edd4e298208661acc66b952c2e823f2c65c799", "reftest" ], "css/css-text/line-break/line-break-anywhere-016.html": [ - "81b565209c6317113d5a138375b0249b4a22342a", + "5f80f52c6ea0c5c9c7577896b9bc5d309093c90e", "reftest" ], "css/css-text/line-break/line-break-loose-011.xht": [ @@ -572458,6 +573299,14 @@ "9525b994a8f0c296bc703b19baf91bef4f84c686", "support" ], + "css/css-text/text-transform/reference/text-transform-fullwidth-006-ref.html": [ + "3d2f9c7be2236666bd680a09c834668616fde44d", + "support" + ], + "css/css-text/text-transform/reference/text-transform-fullwidth-007-ref.html": [ + "b8fc5662bd83d9f29aabadbd4eb973e91621f1ed", + "support" + ], "css/css-text/text-transform/reference/text-transform-lowercase-001-ref.xht": [ "3d6eb4af8ac5aeb7fd54e1b2e2aec325886ddca0", "support" @@ -572822,6 +573671,14 @@ "13c0c42a5e7dcbdbbc6df216f3815eb73cb085a4", "reftest" ], + "css/css-text/text-transform/text-transform-fullwidth-006.html": [ + "b0a509758ed56ca4051e1df079c4d758352764c3", + "reftest" + ], + "css/css-text/text-transform/text-transform-fullwidth-007.html": [ + "6e081544a193949b217530b49f71eadfe2800be4", + "reftest" + ], "css/css-text/text-transform/text-transform-lowercase-001.xht": [ "dc3fadf64caf5786123250da2cc50187ec693d2b", "reftest" @@ -573158,6 +574015,30 @@ "828058f53dd811d4dbea0b7e0d56ab5a940725c6", "reftest" ], + "css/css-text/white-space/break-spaces-tab-001.html": [ + "4b01a60395a6c1133c7af8af957dd70859db4823", + "reftest" + ], + "css/css-text/white-space/break-spaces-tab-002.html": [ + "d86918b75fbef27e6cee5d11c844fd971bee595f", + "reftest" + ], + "css/css-text/white-space/break-spaces-tab-003.html": [ + "0d762a426aa323547c5e18daa36b1f55a715e7fc", + "reftest" + ], + "css/css-text/white-space/break-spaces-tab-004.html": [ + "4ccbdd0f21ae4232effc200784dcbe4f3373ea21", + "reftest" + ], + "css/css-text/white-space/break-spaces-tab-005.html": [ + "b5cf3f33ec2bb582bb3f322eeed7c45b426f0936", + "reftest" + ], + "css/css-text/white-space/break-spaces-tab-006.html": [ + "85d821a3e4d476e6fdfe74a7a2f9134ffb2629a3", + "reftest" + ], "css/css-text/white-space/control-chars-000.html": [ "b038fe9a90d3b8b9cb3bde7fd46396c7121688c9", "reftest" @@ -573507,19 +574388,19 @@ "reftest" ], "css/css-text/white-space/pre-wrap-leading-spaces-006.html": [ - "cff928c2fd537b4f2db6ed282882c9a14f795452", + "de1c0de11c67871c5ce8df1dd7e1ee268182c8c6", "reftest" ], "css/css-text/white-space/pre-wrap-leading-spaces-007.html": [ - "ca27b98c2f68940287fc61d4f24709af196ced10", + "9089466338f9dba6c60b8e786ff905d4856488fc", "reftest" ], "css/css-text/white-space/pre-wrap-leading-spaces-008.html": [ - "7331142c2ea0cf56441bd98504610b6ae3150f79", + "f112a0c20b9586f365345227e926ac03cc2edf8a", "reftest" ], "css/css-text/white-space/pre-wrap-leading-spaces-009.html": [ - "e2786419c1a56466fc3850fd371bdac45203fdf3", + "2fe58aa5ceb5abc19d00db01d01452c7cf3ec1d5", "reftest" ], "css/css-text/white-space/pre-wrap-leading-spaces-010.html": [ @@ -573542,6 +574423,38 @@ "ab2759fdc7b094fa9f4012b557abc27fb6bf8ffd", "reftest" ], + "css/css-text/white-space/pre-wrap-tab-001.html": [ + "e57da83e9fb7e28e7ddba5a091be1331eb804c7a", + "reftest" + ], + "css/css-text/white-space/pre-wrap-tab-002.html": [ + "11ec850940856258d6b5f96b5d6bed05181910b3", + "reftest" + ], + "css/css-text/white-space/pre-wrap-tab-003.html": [ + "a54debe80a24b6a1ac660a1c131494a7f4c6b2bd", + "reftest" + ], + "css/css-text/white-space/pre-wrap-tab-004.html": [ + "22c3ec45c68d5cf508fe326b1395cef22a4f1e23", + "reftest" + ], + "css/css-text/white-space/pre-wrap-tab-005.html": [ + "993aa92e370b708855aa883591e13251f9015364", + "reftest" + ], + "css/css-text/white-space/pre-wrap-tab-006.html": [ + "a4c7f3d3ebd9ae73a494769b18f046185672030c", + "reftest" + ], + "css/css-text/white-space/reference/break-spaces-tab-003-ref.html": [ + "52a8c491cca2da9426e318d2e36786d05fe74e06", + "support" + ], + "css/css-text/white-space/reference/break-spaces-tab-005-ref.html": [ + "798e35fd660b9d1e9681c7de01cb0efc923e6aa6", + "support" + ], "css/css-text/white-space/reference/control-chars-000-ref.html": [ "9d5fcb27147a8c53e410d08511cb5035b612f80c", "support" @@ -573894,10 +574807,6 @@ "f62e2e5c005d4043c02894eed87422fa6c59b824", "reftest" ], - "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-006.html": [ - "820012e6ca10dec9065f7c5869c47b065b426033", - "reftest" - ], "css/css-text/white-space/white-space-wrap-after-nowrap-001.html": [ "a484f1cf9167e468063cf2205493b8e71a254470", "reftest" @@ -575522,11 +576431,15 @@ "eb7431078c42e08dbfe07e6de2e154ba9ecb2297", "testharness" ], - "css/css-transforms/parsing/perspective-origin-parsing-invalid.html": [ + "css/css-transforms/parsing/perspective-origin-computed.html": [ + "effeb2974e136831a646318e7fabf30cf27183a6", + "testharness" + ], + "css/css-transforms/parsing/perspective-origin-invalid.html": [ "2ed6721e091702a436217086eebd81172f359339", "testharness" ], - "css/css-transforms/parsing/perspective-origin-parsing-valid.html": [ + "css/css-transforms/parsing/perspective-origin-valid.html": [ "79f4e0df12e84e880e8c501856a977e1a2c468b8", "testharness" ], @@ -575562,8 +576475,12 @@ "7fb8367ecb2f6e2f151a1ee6afaab9896f07f8c8", "testharness" ], + "css/css-transforms/parsing/transform-origin-computed.html": [ + "696d89db67fc9dd611fa0c09fccbe0408134e744", + "testharness" + ], "css/css-transforms/parsing/transform-origin-invalid.html": [ - "19a7c963a708912d347a4c708dc848a7e580966b", + "0dd1eeaf592b94fe65d0ccfb731c826b5dfcb3dc", "testharness" ], "css/css-transforms/parsing/transform-origin-valid.html": [ @@ -592962,6 +593879,10 @@ "cec27f412c926ab087f2cd736e4c6a7d4efb4c99", "testharness" ], + "css/cssom-view/scrollLeftTop.html": [ + "55b4013600727a3dcae0ab2c286a38801cdd8426", + "testharness" + ], "css/cssom-view/scrollTop-display-change-ref.html": [ "9f1259787bbb33e8f8be6d8fc415738bffee6590", "support" @@ -594034,6 +594955,14 @@ "3a2d8feaeefc82c20afd3de2c2cf9ce9bf6aed11", "reftest" ], + "css/filter-effects/backdrop-filter-plus-opacity-ref.html": [ + "347b7a684cac002562314b8e8af57fb919667bec", + "support" + ], + "css/filter-effects/backdrop-filter-plus-opacity.html": [ + "cb189f9f3e9375c1f5ae1c2abf8433f4d13f39fc", + "reftest" + ], "css/filter-effects/backdrop-filter-reference-filter.html": [ "6c61a9620aa82d23375fd31900d87bcfd873a5e1", "reftest" @@ -595258,6 +596187,10 @@ "7433877972b09b3a03cd9f8a11dcd3efd1aa01d6", "reftest" ], + "css/mediaqueries/width-equals-window-inner-width.html": [ + "775c1112de75e7703c28c2241b533e29e13ba5c5", + "testharness" + ], "css/motion/META.yml": [ "20835b48397f136a30b82a62654d389cad326315", "support" @@ -610195,7 +611128,7 @@ "testharness" ], "element-timing/images-repeated-resource.html": [ - "9bc8b5f45e4add4c384160d43649e13eebc1a563", + "a6ad7acefcbef2891d50b6993457a2026b12f604", "testharness" ], "element-timing/invisible-images.html": [ @@ -610259,7 +611192,7 @@ "support" ], "element-timing/resources/element-timing-helpers.js": [ - "f98f9b21134e334e46510bb419a12291d23817bc", + "8933732616c116f1617c64f07182c9cbeb9f59fe", "support" ], "element-timing/resources/iframe-with-square-sends-entry.html": [ @@ -614403,7 +615336,7 @@ "testharness" ], "fetch/api/response/response-consume-empty.html": [ - "6e51ff8b59a6f2d80f407d0cca0e99d8642f71b1", + "4bfcfbc8f44617190e9469f7ce85ce6dc91d2df9", "testharness" ], "fetch/api/response/response-consume-stream.html": [ @@ -620455,7 +621388,7 @@ "testharness" ], "html/dom/interfaces.https.html": [ - "47254a4361c46ad5fdc46efd2165da1bbab4c9b5", + "6ca7721253200d4511758f5ba15a61f756509370", "testharness" ], "html/dom/interfaces.worker.js": [ @@ -627331,7 +628264,7 @@ "support" ], "html/semantics/embedded-content/media-elements/track/track-element/resources/captions-fast.vtt": [ - "cd138fd32af8056e968e7571cd0ab2fe6f02c68d", + "7fe5b1241a2261a001b3b903528eb275ae5cb0c3", "support" ], "html/semantics/embedded-content/media-elements/track/track-element/resources/captions-gaps.vtt": [ @@ -635967,7 +636900,7 @@ "testharness" ], "imagebitmap-renderingcontext/tranferFromImageBitmap-ToBlob-offscreen.html": [ - "6a555fe25aad6b823a87282472345acb7d9dbf78", + "81d0c900650ea3b489549b7977cd9922a35bcca6", "testharness" ], "imagebitmap-renderingcontext/tranferFromImageBitmap-TransferToImageBitmap-offscreen.html": [ @@ -636583,7 +637516,7 @@ "support" ], "infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini": [ - "c83e8ff9261b78084f75fb584a8b5236cc28c3fd", + "e34c73f1ba984ed27b5ced8ad99a3f673cd109cf", "support" ], "infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini": [ @@ -637031,7 +637964,7 @@ "support" ], "interfaces/css-properties-values-api.idl": [ - "4ba38970e30ac2610e35c266e07f381e3a6b4ec5", + "ee444ebb29d8b5b15c96d259bb8a1f2bdd280d5f", "support" ], "interfaces/css-pseudo.idl": [ @@ -637119,7 +638052,7 @@ "support" ], "interfaces/geometry.idl": [ - "5d5fe4fc2c48305c0ea7e9ce0859af3700d9b14c", + "1b83959465cf5f76bf52d2f8db51426281c07470", "support" ], "interfaces/gyroscope.idl": [ @@ -637159,7 +638092,7 @@ "support" ], "interfaces/longtasks.idl": [ - "21bb1dd117ba7b35965c8cd42fdefded94e101b1", + "333b842f86e5d41f6f1aab8827cf086356c5a782", "support" ], "interfaces/magnetometer.idl": [ @@ -637927,7 +638860,7 @@ "testharness" ], "largest-contentful-paint/cross-origin-image.sub.html": [ - "6e86f13b9ccccf5cecd1ca4bd02b6d0cd2007845", + "88775b861a6b98b1af0fb5163222a1025a6df02e", "testharness" ], "largest-contentful-paint/expanded-image.html": [ @@ -637938,12 +638871,24 @@ "3e083625bdc1812a2c344b8eefaaa10d3b31e623", "testharness" ], + "largest-contentful-paint/loadTime-after-appendChild.html": [ + "fb0eddb220ec660d529a43b112c576bf146a87e8", + "testharness" + ], "largest-contentful-paint/observe-image.html": [ - "4d56cc2d8386e41e220097836755d1936185b41c", + "16b3502eb340cbce179bf440c245cafafe4beea4", "testharness" ], "largest-contentful-paint/observe-text.html": [ - "7dbfbe52f3dadf01524025a80fdcce4b64a60e19", + "2cf1344f2557d5bddd22eaf4ae4fed99d89267a1", + "testharness" + ], + "largest-contentful-paint/repeated-image.html": [ + "94406b20d62b417a690ce6a96d909bb29c791081", + "testharness" + ], + "largest-contentful-paint/supported-lcp-type.html": [ + "25d4eaa0367f45440d286c6c1c14de4458465d7b", "testharness" ], "layout-instability/buffer-layout-shift.html": [ @@ -637963,7 +638908,7 @@ "support" ], "layout-instability/supported-layout-type.html": [ - "9bc537016581274e03b09e677f3fe8c36f3c613e", + "8679a2de7388c5e43a8d784cb3a986d4e23ca568", "testharness" ], "lifecycle/META.yml": [ @@ -638019,7 +638964,11 @@ "testharness" ], "lint.whitelist": [ - "02b1bb0c78f9765257a35aed076701e2f0aa757e", + "c344c3a834444db4be24db1d0132c85a4b14395c", + "support" + ], + "loading/lazyload/common.js": [ + "f5013fc288f58b71a14d01269db14385dd80c8a5", "support" ], "loading/lazyload/iframe-loading-eager.tentative.html": [ @@ -638038,6 +638987,18 @@ "5920eb1882df0a69e0d23c26433bf1b28b9275e9", "testharness" ], + "loading/lazyload/original-base-url-applied-tentative.html": [ + "06f9c257ee9e1b10c626e4a36c826a41506dea89", + "testharness" + ], + "loading/lazyload/original-referrer-policy-applied-tentative.sub.html": [ + "2ffbc821c66a256765f00773afcef5ed94ac5a44", + "testharness" + ], + "loading/lazyload/picture-loading-lazy.tentative.html": [ + "58f8c3a4d5a1e21ce2afd9def3ab9b5870cc272f", + "testharness" + ], "loading/lazyload/resources/image.png": [ "b712825093805d1052b01047b1dbb102f0af8f0f", "support" @@ -638079,7 +639040,7 @@ "testharness" ], "longtask-timing/idlharness.window.js": [ - "0ef7e85440ee1fc99c05ef5be0fc1fe61f818118", + "fd9a3f042f6c9fc3ac605fc0dd4e23edfa5d683b", "testharness" ], "longtask-timing/longtask-attributes.html": [ @@ -650847,7 +651808,7 @@ "support" ], "pointerevents/pointerevent_support.js": [ - "3b37f48889f27ca00ddc1229e6f67ba292722736", + "29d48e03b0a9154ea2fb1fac3467e80b0f74bcc6", "support" ], "pointerevents/pointerevent_suppress_compat_events_on_click.html": [ @@ -650895,7 +651856,7 @@ "testharness" ], "pointerevents/pointerevent_touch-action-keyboard.html": [ - "fdddd3313f498abb89a0958fd302b3949abab355", + "aeff71331dd61ec5e7da5c0e67e241e9e4bdd941", "testharness" ], "pointerevents/pointerevent_touch-action-mouse-manual.html": [ @@ -661575,7 +662536,7 @@ "support" ], "resources/idlharness.js": [ - "cb294c072de2af61b2a4c7c8e4588d05a8186109", + "9be554d96b6e29cb43576f5ac8c1f8209e89fd62", "support" ], "resources/idlharness.js.headers": [ @@ -663859,7 +664820,7 @@ "testharness" ], "service-workers/service-worker/interfaces-window.https.html": [ - "f70cf40931db88350c5fb0f5ebb1fbd10f917dba", + "cc3bdaf11fc7bc174eef555a60263e192efdc539", "testharness" ], "service-workers/service-worker/invalid-blobtype.https.html": [ @@ -665310,6 +666271,18 @@ "4f6d5ae28200e09cba0e25c2769168bc1622a360", "support" ], + "service-workers/service-worker/resources/update-smaller-body-after-update-worker.js": [ + "d43f6b2f5c3d64156ae68970eab3a65511c5c960", + "support" + ], + "service-workers/service-worker/resources/update-smaller-body-before-update-worker.js": [ + "30c8783a70255012e5763403d15467d148b249b0", + "support" + ], + "service-workers/service-worker/resources/update-worker-from-file.py": [ + "7604719c8e0c5dacd216bf96921d825dd0211aea", + "support" + ], "service-workers/service-worker/resources/update-worker.py": [ "446d547ca78277c69795233f0d7c0f64125059d8", "support" @@ -665523,7 +666496,7 @@ "testharness" ], "service-workers/service-worker/update.https.html": [ - "7232419cd0acc33515113363540b332e397025d7", + "f7fae35ed28d7c82c261752c22cd091e473801b0", "testharness" ], "service-workers/service-worker/waiting.https.html": [ @@ -666847,7 +667820,7 @@ "testharness" ], "sms/interceptor.https.html": [ - "b7e8fd53bff98c6c64554149e0cd71c5f1f45686", + "86b21922284f946a16bcd295a87851bee7569f9a", "testharness" ], "sms/resources/iframe.html": [ @@ -666859,7 +667832,7 @@ "testharness" ], "sms/sms_provider.js": [ - "6a54e47b24111f075cb88262a5ffd3dea75a994d", + "4506135551c771d056dc202f06a4c00a7c31089f", "support" ], "sms/sms_receiver.idl": [ @@ -666947,7 +667920,7 @@ "testharness" ], "std-toast/attributes.html": [ - "97bab585c7045350b873db9683ce680452ba4451", + "9b87280b6688b3847401ea7b97ed63f6164bf70a", "testharness" ], "std-toast/closebutton.html": [ @@ -666978,6 +667951,10 @@ "4d6f5038f2d6ffa80ebdfa12798c8c4202b39670", "reftest" ], + "std-toast/reflection.html": [ + "36cbaf652287dbbde5a871b398d313cf70d1b275", + "testharness" + ], "std-toast/resources/helpers.js": [ "256f0c880408c3343d36392f8b4cf64d9bbbfbe6", "support" @@ -666987,7 +667964,7 @@ "testharness" ], "std-toast/styles.html": [ - "98e6723c3c8b16fd71d388ad3947627194c76436", + "1db8620485dc459577649e0c2689194d106dcc51", "testharness" ], "storage/META.yml": [ @@ -667083,11 +668060,11 @@ "support" ], "streams/byte-length-queuing-strategy.any.js": [ - "d47e7cd4faa787933920c48d99a75eea98eaefe7", + "6a61adcdc96cf1f002e70642a87e8e1218e52c06", "testharness" ], "streams/count-queuing-strategy.any.js": [ - "20bb4c1842d258f2de7ff3261c4a93c9d427707e", + "5aae61eda3394e3017d51d241159112f5ef9883f", "testharness" ], "streams/piping/abort.any.js": [ @@ -676479,7 +677456,7 @@ "support" ], "tools/wpt/browser.py": [ - "fe794a59a887a224ad52eb64cac9bd3ca8ea3e83", + "1f0134153169703b897f70849193d4076c64673b", "support" ], "tools/wpt/commands.json": [ @@ -676507,7 +677484,7 @@ "support" ], "tools/wpt/run.py": [ - "4693bb7f11f94cd1747133bc1935fd38f206489d", + "6acc5b8e7400f5726538657239de5710ecea396d", "support" ], "tools/wpt/testfiles.py": [ @@ -676783,7 +677760,7 @@ "support" ], "tools/wptrunner/wptrunner/browsers/__init__.py": [ - "8698e816305a694e31447fdd09d6caff5aaa42d3", + "18434e499dc2276d6b23157b854dcc116c664901", "support" ], "tools/wptrunner/wptrunner/browsers/base.py": [ @@ -676818,14 +677795,14 @@ "599ec9f3110f89f5d64effe98130ede930f1fb7c", "support" ], - "tools/wptrunner/wptrunner/browsers/fennec.py": [ - "b1f535a85401a39b6ff58cd631bafcc42ce32e9a", - "support" - ], "tools/wptrunner/wptrunner/browsers/firefox.py": [ "2f58022d238742ac97e4d898830cfe48801718fe", "support" ], + "tools/wptrunner/wptrunner/browsers/firefox_android.py": [ + "d8d5c7f728451a97b4f93fb80bfb6c56a3c2a595", + "support" + ], "tools/wptrunner/wptrunner/browsers/ie.py": [ "78c22b909acf410038ff06769366662ab0c589a0", "support" @@ -680538,6 +681515,14 @@ "32c24570db165422a60a18b767c828dab10c5b9c", "support" ], + "web-nfc/NDEFMessage_constructor.https.html": [ + "73bbb4f8ab5182995fd66459148e3399be1361a4", + "testharness" + ], + "web-nfc/NDEFRecord_constructor.https.html": [ + "81148856473c4823422f59511a5e9de8bbfc4771", + "testharness" + ], "web-nfc/NFCErrorEvent_constructor.https.html": [ "1cc9ce160be46955a9b15485ee4c040605722961", "testharness" @@ -680579,7 +681564,7 @@ "manual" ], "web-nfc/NFCReadingEvent_constructor.https.html": [ - "3c4242943d6c44540676c6e12acb83a51e2d11f0", + "172b0a619c2b27b9c8d0f04101094f7969aa11e9", "testharness" ], "web-nfc/NFCWriter_push.https.html": [ @@ -680611,7 +681596,7 @@ "manual" ], "web-nfc/resources/nfc_help.js": [ - "812d0f071183f53cef973c58fdbbc260e3154296", + "67fd5af381c9fa96c921b9fd6a2d6559562f4066", "support" ], "web-share/META.yml": [ @@ -682555,7 +683540,7 @@ "wdspec" ], "webdriver/tests/perform_actions/pointer_contextmenu.py": [ - "c64c51252a5a4a5be3464fe92e0ced0a81a486a1", + "fda3f18bbc1c9cdcede30abe74f6d4e2f297d48f", "wdspec" ], "webdriver/tests/perform_actions/pointer_dblclick.py": [ @@ -683555,7 +684540,7 @@ "testharness" ], "webrtc/RTCPeerConnection-getStats.https.html": [ - "c2c4e8e37176ce13447c1c8238aa6243f9aea130", + "a42086a3733c2f46d85d8659059d9b18cef9845f", "testharness" ], "webrtc/RTCPeerConnection-getTransceivers.html": [ @@ -683647,7 +684632,7 @@ "testharness" ], "webrtc/RTCPeerConnection-setRemoteDescription-offer.html": [ - "cae62b24b6c180c06be87dd48ffac364427624db", + "2315c12f6c846dccadb0edf0cd9e5220564aa1d6", "testharness" ], "webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html": [ @@ -688399,7 +689384,7 @@ "support" ], "webxr/resources/webxr_test_asserts.js": [ - "36524211d01980283124c0e2c7fcefd67a7b8b04", + "24b5274bc23d4e601e94eebd93968d9c30942b08", "support" ], "webxr/resources/webxr_test_constants.js": [ @@ -688407,7 +689392,7 @@ "support" ], "webxr/resources/webxr_util.js": [ - "baf1d66b00daa98c07b9bfc91436018d12eef097", + "d75e5c7bd2e26cf79794a01b8bed637c165926e6", "support" ], "webxr/webGLCanvasContext_create_xrcompatible.https.html": [ @@ -688575,11 +689560,11 @@ "testharness" ], "webxr/xrWebGLLayer_framebuffer.https.html": [ - "7c4ff17c2547995afbf561850faaf92b6aa5e56f", + "ba6b7dc0b922ae45aa714de8d3ca6f4ffbaf414c", "testharness" ], "webxr/xrWebGLLayer_viewports.https.html": [ - "8cfccff3c01dedb41db4f26563824ce0cdb65ad3", + "94a23dcdb427298722a989987a02f35a8d98d055", "testharness" ], "workers/META.yml": [ @@ -690791,7 +691776,7 @@ "testharness" ], "xhr/getallresponseheaders.htm": [ - "72e27a5947c1e00ce1edeedf21a9db83c42832fa", + "759d6b68a1f337cac59aed0e9a800e433b68d1b6", "testharness" ], "xhr/getresponseheader-case-insensitive.htm": [ @@ -691283,7 +692268,7 @@ "support" ], "xhr/resources/headers.asis": [ - "d25fe52efeb5427b126c3b375b4bb00090836382", + "69273ac87fea6974688d610910899e077a377b0f", "support" ], "xhr/resources/headers.py": [ diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-001.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-001.html.ini new file mode 100644 index 00000000000..60df723fea1 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-001.html.ini @@ -0,0 +1,2 @@ +[break-spaces-tab-001.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-002.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-002.html.ini new file mode 100644 index 00000000000..abd0c320782 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-002.html.ini @@ -0,0 +1,2 @@ +[break-spaces-tab-002.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-003.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-003.html.ini new file mode 100644 index 00000000000..89e35aacba2 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-003.html.ini @@ -0,0 +1,2 @@ +[break-spaces-tab-003.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-004.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-004.html.ini new file mode 100644 index 00000000000..ee3821915a7 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-004.html.ini @@ -0,0 +1,2 @@ +[break-spaces-tab-004.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-005.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-005.html.ini new file mode 100644 index 00000000000..565ab24b816 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-005.html.ini @@ -0,0 +1,2 @@ +[break-spaces-tab-005.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-006.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-006.html.ini new file mode 100644 index 00000000000..4318f34445a --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-tab-006.html.ini @@ -0,0 +1,2 @@ +[break-spaces-tab-006.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/pre-wrap-tab-003.html.ini b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-tab-003.html.ini new file mode 100644 index 00000000000..1e1ad3d26d9 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-tab-003.html.ini @@ -0,0 +1,2 @@ +[pre-wrap-tab-003.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/pre-wrap-tab-004.html.ini b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-tab-004.html.ini new file mode 100644 index 00000000000..be41d949134 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-tab-004.html.ini @@ -0,0 +1,2 @@ +[pre-wrap-tab-004.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/pre-wrap-tab-005.html.ini b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-tab-005.html.ini new file mode 100644 index 00000000000..94cb1f1692c --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-tab-005.html.ini @@ -0,0 +1,2 @@ +[pre-wrap-tab-005.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/pre-wrap-tab-006.html.ini b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-tab-006.html.ini new file mode 100644 index 00000000000..c19ca42771b --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-tab-006.html.ini @@ -0,0 +1,2 @@ +[pre-wrap-tab-006.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/parsing/perspective-origin-computed.html.ini b/tests/wpt/metadata/css/css-transforms/parsing/perspective-origin-computed.html.ini new file mode 100644 index 00000000000..60c6c1751e9 --- /dev/null +++ b/tests/wpt/metadata/css/css-transforms/parsing/perspective-origin-computed.html.ini @@ -0,0 +1,64 @@ +[perspective-origin-computed.html] + [Property perspective-origin value '40px top' computes to '40px 0px'] + expected: FAIL + + [Property perspective-origin value 'right 30% top -60px' computes to '140px -60px'] + expected: FAIL + + [Property perspective-origin value '10%' computes to '20px 150px'] + expected: FAIL + + [Property perspective-origin value '30px center' computes to '30px 150px'] + expected: FAIL + + [Property perspective-origin value 'center bottom' computes to '100px 300px'] + expected: FAIL + + [Property perspective-origin value 'left 10px' computes to '0px 10px'] + expected: FAIL + + [Property perspective-origin value '20% 30px' computes to '40px 30px'] + expected: FAIL + + [Property perspective-origin value 'top' computes to '100px 0px'] + expected: FAIL + + [Property perspective-origin value 'center' computes to '100px 150px'] + expected: FAIL + + [Property perspective-origin value 'center 50px' computes to '100px 50px'] + expected: FAIL + + [Property perspective-origin value '10% center' computes to '20px 150px'] + expected: FAIL + + [Property perspective-origin value 'left' computes to '0px 150px'] + expected: FAIL + + [Property perspective-origin value 'bottom 10% right 20%' computes to '160px 270px'] + expected: FAIL + + [Property perspective-origin value 'center left' computes to '0px 150px'] + expected: FAIL + + [Property perspective-origin value 'right 20px bottom 30px' computes to '180px 270px'] + expected: FAIL + + [Property perspective-origin value 'right calc(10px - 0.5em) top calc(10px - 0.5em)' computes to '210px -10px'] + expected: FAIL + + [Property perspective-origin value 'left bottom' computes to '0px 300px'] + expected: FAIL + + [Property perspective-origin value 'bottom right' computes to '200px 300px'] + expected: FAIL + + [Property perspective-origin value 'right 40%' computes to '200px 120px'] + expected: FAIL + + [Property perspective-origin value 'left center' computes to '0px 150px'] + expected: FAIL + + [Property perspective-origin value 'center center' computes to '100px 150px'] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transforms/parsing/transform-origin-computed.html.ini b/tests/wpt/metadata/css/css-transforms/parsing/transform-origin-computed.html.ini new file mode 100644 index 00000000000..04aff3c9216 --- /dev/null +++ b/tests/wpt/metadata/css/css-transforms/parsing/transform-origin-computed.html.ini @@ -0,0 +1,67 @@ +[transform-origin-computed.html] + [Property transform-origin value 'center bottom' computes to '100px 300px'] + expected: FAIL + + [Property transform-origin value 'center top' computes to '100px 0px'] + expected: FAIL + + [Property transform-origin value 'left 10px' computes to '0px 10px'] + expected: FAIL + + [Property transform-origin value 'right 40%' computes to '200px 120px'] + expected: FAIL + + [Property transform-origin value '10% center' computes to '20px 150px'] + expected: FAIL + + [Property transform-origin value '40px top' computes to '40px 0px'] + expected: FAIL + + [Property transform-origin value 'left bottom' computes to '0px 300px'] + expected: FAIL + + [Property transform-origin value '-1px bottom 5px' computes to '-1px 300px 5px'] + expected: FAIL + + [Property transform-origin value '10%' computes to '20px 150px'] + expected: FAIL + + [Property transform-origin value 'top' computes to '100px 0px'] + expected: FAIL + + [Property transform-origin value 'bottom right' computes to '200px 300px'] + expected: FAIL + + [Property transform-origin value 'right bottom 7px' computes to '200px 300px 7px'] + expected: FAIL + + [Property transform-origin value '20% 30px' computes to '40px 30px'] + expected: FAIL + + [Property transform-origin value 'calc(-100% + 10px - 0.5em) calc(10px - 0.5em) calc(10px - 0.5em)' computes to '-210px -10px -10px'] + expected: FAIL + + [Property transform-origin value 'center center' computes to '100px 150px'] + expected: FAIL + + [Property transform-origin value 'center 50px' computes to '100px 50px'] + expected: FAIL + + [Property transform-origin value 'left center' computes to '0px 150px'] + expected: FAIL + + [Property transform-origin value 'center left' computes to '0px 150px'] + expected: FAIL + + [Property transform-origin value 'center' computes to '100px 150px'] + expected: FAIL + + [Property transform-origin value '30px center' computes to '30px 150px'] + expected: FAIL + + [Property transform-origin value 'left center 6px' computes to '0px 150px 6px'] + expected: FAIL + + [Property transform-origin value 'left' computes to '0px 150px'] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini b/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini index 24c66214652..130c0181e43 100644 --- a/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini +++ b/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini @@ -1079,6 +1079,3 @@ [text-indent percentage(%) / values] expected: FAIL - [padding-bottom length(ex) / values] - expected: FAIL - diff --git a/tests/wpt/metadata/css/cssom-view/scrollLeftTop.html.ini b/tests/wpt/metadata/css/cssom-view/scrollLeftTop.html.ini new file mode 100644 index 00000000000..384599d83f8 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/scrollLeftTop.html.ini @@ -0,0 +1,19 @@ +[scrollLeftTop.html] + [writing-mode:vertical-lr; direction:ltr] + expected: FAIL + + [writing-mode:vertical-rl; direction:rtl] + expected: FAIL + + [writing-mode:vertical-lr; direction:rtl] + expected: FAIL + + [writing-mode:vertical-rl; direction:ltr] + expected: FAIL + + [writing-mode:horizontal-tb; direction:ltr] + expected: FAIL + + [writing-mode:horizontal-tb; direction:rtl] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom/interfaces.html.ini b/tests/wpt/metadata/css/cssom/interfaces.html.ini index fd3f3735070..e51b8c75e85 100644 --- a/tests/wpt/metadata/css/cssom/interfaces.html.ini +++ b/tests/wpt/metadata/css/cssom/interfaces.html.ini @@ -1296,3 +1296,6 @@ [CSSStyleSheet interface: calling addRule(DOMString, DOMString, unsigned long) on sheet with too few arguments must throw TypeError] expected: FAIL + [SVGStyleElement interface: attribute sheet] + 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 228cc1d76a4..66a90b0d890 100644 --- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini @@ -315,12 +315,18 @@ [<iframe>: combined response Content-Type: text/html */*] expected: FAIL - [<iframe>: separate response Content-Type: text/plain */*] + [<iframe>: combined response Content-Type: text/html;x=" text/plain] expected: FAIL - [<iframe>: combined response Content-Type: text/html;x=" text/plain] + [<iframe>: combined response Content-Type: text/html;" text/plain] + expected: FAIL + + [<iframe>: separate response Content-Type: text/html */*] + expected: FAIL + + [<iframe>: combined response Content-Type: text/html */*;charset=gbk] expected: FAIL - [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] + [<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 5c001592859..646a46c0cbb 100644 --- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini @@ -59,3 +59,6 @@ [separate text/javascript;charset=windows-1252 error text/javascript] expected: FAIL + [separate text/javascript error] + 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 a639f15230c..d4ba399b762 100644 --- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini +++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini @@ -11,6 +11,6 @@ [X-Content-Type-Options%3A%20nosniff%0C] expected: FAIL - [Content-Type-Options%3A%20nosniff] + [X-Content-Type-Options%3A%20'NosniFF'] expected: FAIL 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 deleted file mode 100644 index 87b07c3e670..00000000000 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[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_4.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini index 385376c7321..75d75b4cda2 100644 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini @@ -1,4 +1,4 @@ -[traverse_the_history_4.html] +[traverse_the_history_2.html] [Multiple history traversals, last would be aborted] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini new file mode 100644 index 00000000000..dc2e45516de --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini @@ -0,0 +1,4 @@ +[traverse_the_history_5.html] + [Multiple history traversals, last would be aborted] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini new file mode 100644 index 00000000000..dec4c579137 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini @@ -0,0 +1,5 @@ +[creating_browsing_context_test_01.html] + expected: TIMEOUT + [first argument: absolute url] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/dom/interfaces.https.html.ini b/tests/wpt/metadata/html/dom/interfaces.https.html.ini index 3dca62fda1f..a537311d2d1 100644 --- a/tests/wpt/metadata/html/dom/interfaces.https.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.https.html.ini @@ -10556,3 +10556,93 @@ [ElementInternals interface: attribute validity] expected: FAIL + [SVGSVGElement interface: attribute onstorage] + expected: FAIL + + [SVGAElement interface: attribute hash] + expected: FAIL + + [SVGSVGElement interface: attribute onbeforeprint] + expected: FAIL + + [SVGAElement interface: attribute protocol] + expected: FAIL + + [SVGSVGElement interface: attribute onoffline] + expected: FAIL + + [SVGAElement interface: stringifier] + expected: FAIL + + [SVGSVGElement interface: attribute onpageshow] + expected: FAIL + + [SVGAElement interface: attribute search] + expected: FAIL + + [SVGSVGElement interface: attribute onunload] + expected: FAIL + + [SVGAElement interface: attribute port] + expected: FAIL + + [SVGSVGElement interface: attribute onbeforeunload] + expected: FAIL + + [SVGSVGElement interface: attribute onmessageerror] + expected: FAIL + + [SVGSVGElement interface: attribute onmessage] + expected: FAIL + + [SVGAElement interface: attribute hostname] + expected: FAIL + + [SVGAElement interface: attribute pathname] + expected: FAIL + + [SVGAElement interface: attribute host] + expected: FAIL + + [SVGSVGElement interface: attribute onlanguagechange] + expected: FAIL + + [SVGSVGElement interface: attribute onunhandledrejection] + expected: FAIL + + [SVGSVGElement interface: attribute onrejectionhandled] + expected: FAIL + + [SVGSVGElement interface: attribute onhashchange] + expected: FAIL + + [SVGAElement interface: attribute origin] + expected: FAIL + + [SVGSVGElement interface: attribute onpopstate] + expected: FAIL + + [SVGSVGElement interface: attribute onpagehide] + expected: FAIL + + [WebSocket interface: new WebSocket("wss://nonexistent.web-platform.test") must inherit property "extensions" with the proper type] + expected: FAIL + + [SVGSVGElement interface: attribute onafterprint] + expected: FAIL + + [SVGSVGElement interface: attribute ononline] + expected: FAIL + + [SVGAElement interface: attribute href] + expected: FAIL + + [SVGAElement interface: attribute password] + expected: FAIL + + [SVGAElement interface: attribute username] + expected: FAIL + + [SVGElement interface: attribute onformdata] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini index 127392316de..702af61a3c4 100644 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini @@ -1,7 +1,11 @@ [form-submission-algorithm.html] + expected: TIMEOUT [If form's firing submission events is true, then return; 'submit' event] expected: FAIL [If form's firing submission events is true, then return; 'invalid' event] expected: FAIL + [Cannot navigate (after constructing the entry list)] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini b/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini new file mode 100644 index 00000000000..a9677391662 --- /dev/null +++ b/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini @@ -0,0 +1,4 @@ +[DOMContentLoaded-defer.html] + [The end: DOMContentLoaded and defer scripts] + expected: FAIL + diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini index 496bad988c6..034d9baebfa 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini @@ -1,4 +1,5 @@ [promise-rejection-events.html] + expected: TIMEOUT [delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire] expected: FAIL @@ -8,3 +9,6 @@ [no unhandledrejection/rejectionhandled: rejection handler attached synchronously to a promise created from createImageBitmap] expected: FAIL + [rejectionhandled is dispatched from a queued task, and not immediately] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini b/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini index aa36a14c6a6..494f0d4a752 100644 --- a/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini +++ b/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini @@ -20,6 +20,3 @@ [domainLookupStart should be 0 in cross-origin request.] expected: FAIL - [responseEnd should be greater than 0 in cross-origin request.] - expected: FAIL - diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini index a56bad443a2..66bd350083b 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini @@ -1,5 +1,4 @@ [realtimeanalyser-fft-scaling.html] - expected: TIMEOUT [X 2048-point FFT peak position is not equal to 64. Got 0.] expected: FAIL diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini index 036692e72bf..881cbd9301b 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini @@ -122,3 +122,9 @@ [X SNR (21.35658911509222 dB) is not greater than or equal to 65.737. Got 21.35658911509222.] expected: FAIL + [X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t9.4836157560348511e-1\t9.5236867666244507e-1\t4.0071010589599609e-3\t4.2075103446311962e-3\t3.8985999999999999e-3\n\t[31\]\t9.2646563053131104e-1\t9.3139332532882690e-1\t4.9276947975158691e-3\t5.2906700783754857e-3\t3.8985999999999999e-3\n\t[32\]\t9.0087991952896118e-1\t9.0675884485244751e-1\t5.8789253234863281e-3\t6.4834496590358351e-3\t3.8985999999999999e-3\n\t[33\]\t8.7170630693435669e-1\t8.7856203317642212e-1\t6.8557262420654297e-3\t7.8033490899654511e-3\t3.8985999999999999e-3\n\t[34\]\t8.3906102180480957e-1\t8.4691369533538818e-1\t7.8526735305786133e-3\t9.2721059699818163e-3\t3.8985999999999999e-3\n\t...and 31037 more errors.\n\tMax AbsError of 9.8276454366209975e-1 at index of 39267.\n\t[39267\]\t1.5592860336255399e-9\t-9.8276454210281372e-1\t9.8276454366209975e-1\t1.0000000015866324e+0\t3.8985999999999999e-3\n\tMax RelError of 3.3137802965303198e+0 at index of 1253.\n\t[1253\]\t-4.3022233992815018e-2\t-9.9732093513011932e-3\t3.3049024641513824e-2\t3.3137802965303198e+0\t3.8985999999999999e-3\n] + expected: FAIL + + [X SNR (21.440582478520547 dB) is not greater than or equal to 65.737. Got 21.440582478520547.] + expected: FAIL + diff --git a/tests/wpt/metadata/webdriver/tests/set_window_rect/set.py.ini b/tests/wpt/metadata/webdriver/tests/set_window_rect/set.py.ini index 3d9deb34a25..3b9d2fd022d 100644 --- a/tests/wpt/metadata/webdriver/tests/set_window_rect/set.py.ini +++ b/tests/wpt/metadata/webdriver/tests/set_window_rect/set.py.ini @@ -41,3 +41,6 @@ [test_height_width_larger_than_max] expected: FAIL + [test_negative_x_y] + expected: FAIL + diff --git a/tests/wpt/metadata/webxr/xrSession_prevent_multiple_exclusive.https.html.ini b/tests/wpt/metadata/webxr/xrSession_prevent_multiple_exclusive.https.html.ini index d97e34090f9..7987d965e4c 100644 --- a/tests/wpt/metadata/webxr/xrSession_prevent_multiple_exclusive.https.html.ini +++ b/tests/wpt/metadata/webxr/xrSession_prevent_multiple_exclusive.https.html.ini @@ -1,4 +1,5 @@ [xrSession_prevent_multiple_exclusive.https.html] + expected: TIMEOUT [Test prevention of multiple simultaneous immersive sessions] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/web-platform-tests/animation-worklet/common.js b/tests/wpt/web-platform-tests/animation-worklet/common.js index 3e542e02efc..ceb430b718b 100644 --- a/tests/wpt/web-platform-tests/animation-worklet/common.js +++ b/tests/wpt/web-platform-tests/animation-worklet/common.js @@ -18,13 +18,20 @@ function registerConstantLocalTimeAnimator(localTime) { `); } - function runInAnimationWorklet(code) { return CSS.animationWorklet.addModule( URL.createObjectURL(new Blob([code], {type: 'text/javascript'})) ); } +function approxEquals(actual, expected){ + // precision in ms + const epsilon = 0.005; + const lowerBound = (expected - epsilon) < actual; + const upperBound = (expected + epsilon) > actual; + return lowerBound && upperBound; +} + function waitForAsyncAnimationFrames(count) { // In Chrome, waiting for N+1 main thread frames guarantees that compositor has produced // at least N frames. diff --git a/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-get-computed-timing-progress-on-worklet-thread.https.html b/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-get-computed-timing-progress-on-worklet-thread.https.html new file mode 100644 index 00000000000..a66a4b9156c --- /dev/null +++ b/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-get-computed-timing-progress-on-worklet-thread.https.html @@ -0,0 +1,87 @@ +<html> +<title>Animation Worklet should update calculated timing whenever localTime changes</title> +<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/web-animations/testcommon.js"></script> +<script src="common.js"></script> + +<div id="box"></div> + +<script id="get_computed_timing_animator" type="text/worklet"> + registerAnimator('get_computed_timing', class { + constructor(options, state) { + this.step = state ? state.step : 0; + } + state() { + return { + step: 0 + } + } + animate(currentTime, effect){ + if (this.step === 0){ + // check calculated timing values before ever setting effect.localTime + effect.localTime = (effect.getComputedTiming().currentIteration * 100) + (effect.getComputedTiming().progress * 100); + this.step = 1; + } + else if (this.step === 1){ + // set effect.localTime, this should be the first time calculated timing values are computed + effect.localTime = 420; // 20% of the way through the last iteration + + // using the calculated timing of effect, set effect.localTime. + effect.localTime = (effect.getComputedTiming().currentIteration * 100) + (effect.getComputedTiming().progress * 100); + this.step = 2; + } + else if (this.step === 2){ + // set effect.localTime to null + effect.localTime = null; + effect.localTime = (effect.getComputedTiming().currentIteration * 100) + (effect.getComputedTiming().progress * 100); + this.step = 3; + } + else if (this.step === 3){ + // Check to make sure we can go from null to a valid localTime and that calculated timing values are computed + effect.localTime = 350; // 50% of the way through second iteration + effect.localTime = (effect.getComputedTiming().currentIteration * 100) + (effect.getComputedTiming().progress * 100); + this.step = 4; + } + } + }); +</script> + +<script> + promise_test(async t => { + await runInAnimationWorklet(document.getElementById('get_computed_timing_animator').textContent); + + const box = document.getElementById("box"); + const effect = new KeyframeEffect( + box, + [ + { opacity: 0 }, + { opacity: 1 } + ], { + delay: 200, + duration: 100, + iterations: 3 + } + ); + + const animation = new WorkletAnimation('get_computed_timing', effect); + animation.play(); + + // check calculated timing values before ever setting effect.localTime + await waitForAnimationFrameWithCondition(() => {return approxEquals(effect.getComputedTiming().localTime, 0)}); + + // Check to make sure initial values can be set for computed timing + await waitForAnimationFrameWithCondition(() => {return approxEquals(effect.getComputedTiming().localTime, 220)}); + + // Make sure setting effect.localTime to null causes calculated timing values to be computed + await waitForAnimationFrameWithCondition(() => {return approxEquals(effect.getComputedTiming().localTime, 0)}); + + // Make sure we can go from null to a valid localTime and that calculated timing values are computed + await waitForAnimationFrameWithCondition(() => {return approxEquals(effect.getComputedTiming().localTime, 150)}); + + // Passes if it doesn't timeout + animation.cancel(); + }, "WorkletAnimation effect should recompute its calculated timing if its local time changes"); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image-from-script.sub.html b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image-from-script.sub.html index 65311c32ad6..4c86845f4db 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image-from-script.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image-from-script.sub.html @@ -15,8 +15,8 @@ assert_equals(e.effectiveDirective, "img-src"); assert_equals(e.originalPolicy, "img-src \'none\'"); assert_equals(e.disposition, "enforce"); - assert_equals(e.sourceFile, ""); - assert_equals(e.lineNumber, 0); + assert_equals(new URL(e.sourceFile).pathname, "/content-security-policy/support/inject-image.sub.js"); + assert_equals(e.lineNumber, 2); assert_equals(e.columnNumber, 0); assert_equals(e.statusCode, 200); })); diff --git a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image.sub.html b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image.sub.html index 03829fe8a36..dcf52aa187c 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image.sub.html @@ -15,9 +15,9 @@ assert_equals(e.effectiveDirective, "img-src"); assert_equals(e.originalPolicy, "img-src \'none\'"); assert_equals(e.disposition, "enforce"); - assert_equals(e.sourceFile, ""); - assert_equals(e.lineNumber, 0); - assert_equals(e.columnNumber, 0); + assert_equals(new URL(e.sourceFile).pathname, "/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image.sub.html"); + assert_equals(e.lineNumber, 25); + assert_equals(e.columnNumber, 4); assert_equals(e.statusCode, 200); })); diff --git a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image-from-script.sub.html b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image-from-script.sub.html index 0a7c2b43bff..978096f14f6 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image-from-script.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image-from-script.sub.html @@ -15,8 +15,8 @@ assert_equals(e.effectiveDirective, "img-src"); assert_equals(e.originalPolicy, "img-src \'none\'"); assert_equals(e.disposition, "enforce"); - assert_equals(e.sourceFile, ""); - assert_equals(e.lineNumber, 0); + assert_equals(new URL(e.sourceFile).pathname, "/content-security-policy/support/inject-image.sub.js"); + assert_equals(e.lineNumber, 2); assert_equals(e.columnNumber, 0); assert_equals(e.statusCode, 200); })); diff --git a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image.sub.html b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image.sub.html index 5dd82e6ddca..6e0e6ddbede 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image.sub.html @@ -15,9 +15,9 @@ assert_equals(e.effectiveDirective, "img-src"); assert_equals(e.originalPolicy, "img-src \'none\'"); assert_equals(e.disposition, "enforce"); - assert_equals(e.sourceFile, ""); - assert_equals(e.lineNumber, 0); - assert_equals(e.columnNumber, 0); + assert_equals(new URL(e.sourceFile).pathname, "/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image.sub.html"); + assert_equals(e.lineNumber, 25); + assert_equals(e.columnNumber, 4); assert_equals(e.statusCode, 200); })); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.https.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.https.window.js index 3e7b02b1085..bf8f845f2b1 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.https.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.https.window.js @@ -1,15 +1,5 @@ 'use strict'; -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - const kCurrentHostname = (new URL(self.location.href)).hostname; const kOneDay = 24 * 60 * 60 * 1000; @@ -23,6 +13,9 @@ promise_test(async testCase => { await cookieStore.delete('cookie-name'); await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); @@ -33,14 +26,15 @@ promise_test(async testCase => { assert_equals(cookie.secure, true); assert_equals(cookie.sameSite, 'strict'); assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'CookieListItem - cookieStore.set defaults with positional name and value'); promise_test(async testCase => { await cookieStore.delete('cookie-name'); await cookieStore.set({ name: 'cookie-name', value: 'cookie-value' }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); @@ -50,8 +44,6 @@ promise_test(async testCase => { assert_equals(cookie.secure, true); assert_equals(cookie.sameSite, 'strict'); assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'CookieListItem - cookieStore.set defaults with name and value in options'); promise_test(async testCase => { @@ -59,6 +51,9 @@ promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value', { expires: kTenYearsFromNow }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); @@ -68,8 +63,6 @@ promise_test(async testCase => { assert_equals(cookie.secure, true); assert_equals(cookie.sameSite, 'strict'); assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'CookieListItem - cookieStore.set with expires set to a timestamp 10 ' + 'years in the future'); @@ -78,6 +71,9 @@ promise_test(async testCase => { await cookieStore.set({ name: 'cookie-name', value: 'cookie-value', expires: kTenYearsFromNow }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); @@ -87,8 +83,6 @@ promise_test(async testCase => { assert_equals(cookie.secure, true); assert_equals(cookie.sameSite, 'strict'); assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'CookieListItem - cookieStore.set with name and value in options and ' + 'expires set to a future timestamp'); @@ -97,6 +91,9 @@ promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value', { expires: new Date(kTenYearsFromNow) }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); @@ -104,8 +101,6 @@ promise_test(async testCase => { assert_equals(cookie.path, '/'); assert_approx_equals(cookie.expires, kTenYearsFromNow, kOneDay); assert_equals(cookie.secure, true); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'CookieListItem - cookieStore.set with expires set to a Date 10 ' + 'years in the future'); @@ -114,6 +109,9 @@ promise_test(async testCase => { await cookieStore.set({ name: 'cookie-name', value: 'cookie-value', expires: new Date(kTenYearsFromNow) }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); @@ -123,8 +121,6 @@ promise_test(async testCase => { assert_equals(cookie.secure, true); assert_equals(cookie.sameSite, 'strict'); assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'CookieListItem - cookieStore.set with name and value in options and ' + 'expires set to a future Date'); @@ -133,6 +129,9 @@ promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value', { domain: kCurrentHostname }); + testCase.add_cleanup(async () => { + await cookieStore.delete({ name: 'cookie-name', domain: kCurrentHostname }); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); @@ -142,10 +141,6 @@ promise_test(async testCase => { assert_equals(cookie.secure, true); assert_equals(cookie.sameSite, 'strict'); assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); - - await async_cleanup(async () => { - await cookieStore.delete({ name: 'cookie-name', domain: kCurrentHostname }); - }); }, 'CookieListItem - cookieStore.set with domain set to the current hostname'); promise_test(async testCase => { @@ -157,6 +152,9 @@ promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value', { path: currentDirectory }); + testCase.add_cleanup(async () => { + await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); @@ -166,16 +164,15 @@ promise_test(async testCase => { assert_equals(cookie.secure, true); assert_equals(cookie.sameSite, 'strict'); assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); - - await async_cleanup(async () => { - await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); - }); }, 'CookieListItem - cookieStore.set with path set to the current directory'); promise_test(async testCase => { await cookieStore.delete('cookie-name'); await cookieStore.set('cookie-name', 'cookie-value', { secure: false }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); @@ -185,8 +182,6 @@ promise_test(async testCase => { assert_equals(cookie.secure, false); assert_equals(cookie.sameSite, 'strict'); assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'CookieListItem - cookieStore.set with secure set to false'); ['strict', 'lax', 'unrestricted'].forEach(sameSiteValue => { @@ -195,6 +190,9 @@ promise_test(async testCase => { await cookieStore.set({ name: 'cookie-name', value: 'cookie-value', sameSite: sameSiteValue }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); @@ -204,8 +202,6 @@ promise_test(async testCase => { assert_equals(cookie.secure, true); assert_equals(cookie.sameSite, sameSiteValue); assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, `CookieListItem - cookieStore.set with sameSite set to ${sameSiteValue}`); promise_test(async testCase => { @@ -213,6 +209,9 @@ promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value', { sameSite: sameSiteValue }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); @@ -222,8 +221,6 @@ promise_test(async testCase => { assert_equals(cookie.secure, true); assert_equals(cookie.sameSite, sameSiteValue); assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'CookieListItem - cookieStore.set with positional name and value and ' + `sameSite set to ${sameSiteValue}`); -}); +});
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.https.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.https.window.js index 8cfa03dd054..dc073d8eb60 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.https.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.https.window.js @@ -1,15 +1,5 @@ 'use strict'; -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); @@ -20,22 +10,24 @@ promise_test(async testCase => { promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); await cookieStore.delete({ name: 'cookie-name' }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie, null); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.delete with name in options'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); await cookieStore.delete('cookie-name', { name: 'wrong-cookie-name' }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie, null); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.delete with name in both positional arguments and options'); promise_test(async testCase => { @@ -43,14 +35,13 @@ promise_test(async testCase => { const currentDomain = currentUrl.hostname; await cookieStore.set( 'cookie-name', 'cookie-value', { domain: currentDomain }); + testCase.add_cleanup(async () => { + await cookieStore.delete({ name: 'cookie-name', domain: currentDomain }); + }); await cookieStore.delete({ name: 'cookie-name', domain: currentDomain }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie, null); - - await async_cleanup(async () => { - await cookieStore.delete({ name: 'cookie-name', domain: currentDomain }); - }); }, 'cookieStore.delete with domain set to the current hostname'); promise_test(async testCase => { @@ -79,14 +70,13 @@ promise_test(async testCase => { const currentDomain = currentUrl.hostname; await cookieStore.set( 'cookie-name', 'cookie-value', { domain: currentDomain }); + testCase.add_cleanup(async () => { + await cookieStore.delete({ name: 'cookie-name', domain: currentDomain }); + }); await cookieStore.delete({ name: 'cookie-name', domain: currentDomain }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie, null); - - await async_cleanup(async () => { - await cookieStore.delete({ name: 'cookie-name', domain: currentDomain }); - }); }, 'cookieStore.delete with name in options and domain set to the current ' + 'hostname'); @@ -119,14 +109,13 @@ promise_test(async testCase => { currentPath.substr(0, currentPath.lastIndexOf('/') + 1); await cookieStore.set( 'cookie-name', 'cookie-value', { path: currentDirectory }); + testCase.add_cleanup(async () => { + await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); + }); await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie, null); - - async_cleanup(async () => { - await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); - }); }, 'cookieStore.delete with path set to the current directory'); promise_test(async testCase => { @@ -137,19 +126,21 @@ promise_test(async testCase => { const subDirectory = currentDirectory + "subdir/"; await cookieStore.set( 'cookie-name', 'cookie-value', { path: currentDirectory }); + testCase.add_cleanup(async () => { + await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); + }); await cookieStore.delete({ name: 'cookie-name', path: subDirectory }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(async () => { - await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); - }); }, 'cookieStore.delete with path set to subdirectory of the current directory'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie_attributes = await cookieStore.get('cookie-name'); assert_equals(cookie_attributes.name, 'cookie-name'); @@ -158,6 +149,4 @@ promise_test(async testCase => { await cookieStore.delete(cookie_attributes); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie, null); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.delete with get result'); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.https.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.https.window.js index 7f6d2d919d4..5f20947dbf1 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.https.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.https.window.js @@ -1,21 +1,14 @@ 'use strict'; -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - promise_test(async testCase => { const eventPromise = new Promise((resolve) => { cookieStore.onchange = resolve; }); await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const event = await eventPromise; assert_true(event instanceof CookieChangeEvent); @@ -24,6 +17,4 @@ promise_test(async testCase => { assert_equals(event.changed[0].name, 'cookie-name'); assert_equals(event.changed[0].value, 'cookie-value'); assert_equals(event.deleted.length, 0); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore fires change event for cookie set by cookieStore.set()'); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.https.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.https.window.js index f84b2e06745..e8c6fc036a7 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.https.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.https.window.js @@ -1,17 +1,10 @@ 'use strict'; -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const eventPromise = new Promise((resolve) => { cookieStore.onchange = resolve; @@ -26,6 +19,4 @@ promise_test(async testCase => { event.deleted[0].value, undefined, 'Cookie change events for deletions should not have cookie values'); assert_equals(event.changed.length, 0); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore fires change event for cookie deleted by cookieStore.delete()');
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.https.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.https.window.js index 2a5cb5d064f..3acffea41c1 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.https.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.https.window.js @@ -1,17 +1,10 @@ 'use strict'; -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const eventPromise = new Promise((resolve) => { cookieStore.onchange = resolve; @@ -26,6 +19,4 @@ promise_test(async testCase => { assert_equals(event.changed[0].name, 'cookie-name'); assert_equals(event.changed[0].value, 'new-cookie-value'); assert_equals(event.deleted.length, 0); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore fires change event for cookie overwritten by cookieStore.set()'); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.https.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.https.window.js index 5106a6270cd..a04aa8cd7ad 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.https.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.https.window.js @@ -1,18 +1,14 @@ 'use strict'; -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); await cookieStore.set('cookie-name-2', 'cookie-value-2'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name-2'); + }); const cookies = await cookieStore.getAll(); cookies.sort((a, b) => a.name.localeCompare(b.name)); @@ -21,53 +17,62 @@ promise_test(async testCase => { assert_equals(cookies[0].value, 'cookie-value'); assert_equals(cookies[1].name, 'cookie-name-2'); assert_equals(cookies[1].value, 'cookie-value-2'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); - await async_cleanup(() => cookieStore.delete('cookie-name-2')); }, 'cookieStore.getAll with no arguments'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); await cookieStore.set('cookie-name-2', 'cookie-value-2'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name-2'); + }); const cookies = await cookieStore.getAll('cookie-name'); assert_equals(cookies.length, 1); assert_equals(cookies[0].name, 'cookie-name'); assert_equals(cookies[0].value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); - await async_cleanup(() => cookieStore.delete('cookie-name-2')); }, 'cookieStore.getAll with positional name'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); await cookieStore.set('cookie-name-2', 'cookie-value-2'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name-2'); + }); const cookies = await cookieStore.getAll({ name: 'cookie-name' }); assert_equals(cookies.length, 1); assert_equals(cookies[0].name, 'cookie-name'); assert_equals(cookies[0].value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); - await async_cleanup(() => cookieStore.delete('cookie-name-2')); }, 'cookieStore.getAll with name in options'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); await cookieStore.set('cookie-name-2', 'cookie-value-2'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name-2'); + }); const cookies = await cookieStore.getAll('cookie-name', { name: 'wrong-cookie-name' }); assert_equals(cookies.length, 1); assert_equals(cookies[0].name, 'cookie-name'); assert_equals(cookies[0].value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); - await async_cleanup(() => cookieStore.delete('cookie-name-2')); }, 'cookieStore.getAll with name in both positional arguments and options'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookies = await cookieStore.getAll({ name: 'cookie-name', matchType: 'equals' }); @@ -78,53 +83,59 @@ promise_test(async testCase => { const no_cookies = await cookieStore.getAll( 'cookie-na', { matchType: 'equals' }); assert_equals(no_cookies.length, 0); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.getAll with matchType explicitly set to equals'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); await cookieStore.set('cookie-name-2', 'cookie-value-2'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name-2'); + }); const cookies = await cookieStore.getAll({ name: 'cookie-name-', matchType: 'starts-with' }); assert_equals(cookies.length, 1); assert_equals(cookies[0].name, 'cookie-name-2'); assert_equals(cookies[0].value, 'cookie-value-2'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); - await async_cleanup(() => cookieStore.delete('cookie-name-2')); }, 'cookieStore.getAll with matchType set to starts-with'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); await cookieStore.set('cookie-name-2', 'cookie-value-2'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name-2'); + }); await promise_rejects(testCase, new TypeError(), cookieStore.getAll( { name: 'cookie-name', matchType: 'invalid' })); - - await async_cleanup(() => cookieStore.delete('cookie-name')); - await async_cleanup(() => cookieStore.delete('cookie-name-2')); }, 'cookieStore.getAll with invalid matchType'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookies = await cookieStore.getAll({ matchType: 'equals' }); assert_equals(cookies.length, 1); assert_equals(cookies[0].name, 'cookie-name'); assert_equals(cookies[0].value, 'cookie-value'); - - async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.getAll with matchType set to equals and missing name'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookies = await cookieStore.getAll({ matchType: 'starts-with' }); assert_equals(cookies.length, 1); assert_equals(cookies[0].name, 'cookie-name'); assert_equals(cookies[0].value, 'cookie-value'); - - async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.getAll with matchType set to starts-with and missing name'); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_multiple.tentative.https.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_multiple.tentative.https.window.js index 78b3c56fdd3..c09f4fc5f57 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_multiple.tentative.https.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_multiple.tentative.https.window.js @@ -1,19 +1,18 @@ 'use strict'; -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); await cookieStore.set('cookie-name-2', 'cookie-value-2'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name-2'); + }); await cookieStore.set('cookie-name-3', 'cookie-value-3'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name-3'); + }); const cookies = await cookieStore.getAll(); cookies.sort((a, b) => a.name.localeCompare(b.name)); @@ -24,8 +23,4 @@ promise_test(async testCase => { assert_equals(cookies[1].value, 'cookie-value-2'); assert_equals(cookies[2].name, 'cookie-name-3'); assert_equals(cookies[2].value, 'cookie-value-3'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); - await async_cleanup(() => cookieStore.delete('cookie-name-2')); - await async_cleanup(() => cookieStore.delete('cookie-name-3')); }, 'cookieStore.getAll returns multiple cookies written by cookieStore.set'); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.https.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.https.window.js index aa0a4ea9a03..dd2adabd228 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.https.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.https.window.js @@ -1,22 +1,13 @@ 'use strict'; -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookies = await cookieStore.getAll('cookie-name'); assert_equals(cookies.length, 1); assert_equals(cookies[0].name, 'cookie-name'); assert_equals(cookies[0].value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.getAll returns the cookie written by cookieStore.set'); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.window.js index bb126864ff7..e338dd1bdbd 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.window.js @@ -1,56 +1,53 @@ 'use strict'; -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get(); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.get with no arguments'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.get with positional name'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get({ name: 'cookie-name' }); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.get with name in options'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name', { name: 'wrong-cookie-name' }); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.get with name in both positional arguments and options'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get( 'cookie-name', { matchType: 'equals' }); @@ -60,46 +57,48 @@ promise_test(async testCase => { const no_cookie = await cookieStore.get({ name: 'cookie-na', matchType: 'equals' }); assert_equals(no_cookie, null); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.get with matchType explicitly set to equals'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get({ name: 'cookie-na', matchType: 'starts-with' }); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.get with matchType set to starts-with'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); await promise_rejects(testCase, new TypeError(), cookieStore.get( { name: 'cookie-name', matchType: 'invalid' })); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.get with invalid matchType'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get({ matchType: 'equals' }); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.get with matchType set to equals and missing name'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get({ matchType: 'starts-with' }); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.get with matchType set to starts-with and missing name'); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.https.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.https.window.js index fc9645d3e2e..5ebf09d3446 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.https.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.https.window.js @@ -1,20 +1,11 @@ 'use strict'; -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); await cookieStore.delete('cookie-name'); const cookie = await cookieStore.get(); assert_equals(cookie, null); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.get returns null for a cookie deleted by cookieStore.delete');
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_across_frames.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_across_frames.tentative.https.html index c2ef1849403..f7c737b422e 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_across_frames.tentative.https.html +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_across_frames.tentative.https.html @@ -19,7 +19,9 @@ promise_test(async t => { 'Precondition not met: cookie store should be empty'); await cookieStore.set('cookie-name', 'cookie-value'); - t.add_cleanup(() => cookieStore.delete('cookie-name')); + t.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const frameCookie = await frameCookieStore.get('cookie-name'); assert_equals(frameCookie.value, 'cookie-value'); @@ -34,7 +36,9 @@ promise_test(async t => { 'Precondition not met: cookie store should be empty'); await frameCookieStore.set('cookie-name', 'cookie-value'); - t.add_cleanup(() => frameCookieStore.delete('cookie-name')); + t.add_cleanup(async () => { + await frameCookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.value, 'cookie-value'); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_across_origins.tentative.sub.https.html b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_across_origins.tentative.sub.https.html index e8792612c43..c67ef98bcc9 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_across_origins.tentative.sub.https.html +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_across_origins.tentative.sub.https.html @@ -24,10 +24,9 @@ promise_test(async t => { name: 'cookie-name', value: 'cookie-value', }, kCorsBase); - t.add_cleanup(() => cookieStore.delete({ - name: 'cookie-name', - domain: '{{host}}', - })); + t.add_cleanup(async () => { + await cookieStore.delete({ name: 'cookie-name', domain: '{{host}}' }); + }); await waitForMessage(); const cookies = await cookieStore.getAll(); @@ -53,10 +52,9 @@ promise_test(async t => { opname: 'get-cookie', name: 'cookie-name', }, kCorsBase); - t.add_cleanup(() => cookieStore.delete({ - name: 'cookie-name', - domain: '{{host}}', - })); + t.add_cleanup(async () => { + await cookieStore.delete({ name: 'cookie-name', domain: '{{host}}' }); + }); const message = await waitForMessage(); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.https.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.https.window.js index 2a082de9d30..deb7405f2ff 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.https.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.https.window.js @@ -1,21 +1,12 @@ 'use strict'; -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - promise_test(async testCase => { await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.get returns the cookie written by cookieStore.set'); diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.https.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.https.window.js index 18f60ad974e..ddc9981c92d 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.https.window.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.https.window.js @@ -1,47 +1,40 @@ 'use strict'; -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - promise_test(async testCase => { await cookieStore.delete('cookie-name'); await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.set with positional name and value'); promise_test(async testCase => { await cookieStore.delete('cookie-name'); await cookieStore.set({ name: 'cookie-name', value: 'cookie-value' }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.set with name and value in options'); promise_test(async testCase => { await cookieStore.delete('cookie-name'); cookieStore.set('cookie-name', 'cookie-value', { name: 'wrong-cookie-name' }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.set with name in both positional arguments and options'); promise_test(async testCase => { @@ -49,11 +42,12 @@ promise_test(async testCase => { cookieStore.set('cookie-name', 'cookie-value', { value: 'wrong-cookie-value' }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.set with value in both positional arguments and options'); promise_test(async testCase => { @@ -63,11 +57,12 @@ promise_test(async testCase => { await cookieStore.set( 'cookie-name', 'cookie-value', { expires: tenYearsFromNow }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.set with expires set to a future timestamp'); promise_test(async testCase => { @@ -77,10 +72,11 @@ promise_test(async testCase => { await cookieStore.set( 'cookie-name', 'cookie-value', { expires: tenYearsAgo }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie, null); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.set with expires set to a past timestamp'); promise_test(async testCase => { @@ -90,11 +86,12 @@ promise_test(async testCase => { await cookieStore.set( 'cookie-name', 'cookie-value', { expires: new Date(tenYearsFromNow) }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.set with expires set to a future Date'); promise_test(async testCase => { @@ -104,10 +101,11 @@ promise_test(async testCase => { await cookieStore.set( 'cookie-name', 'cookie-value', { expires: new Date(tenYearsAgo) }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie, null); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.set with expires set to a past Date'); promise_test(async testCase => { @@ -117,11 +115,12 @@ promise_test(async testCase => { await cookieStore.set( { name: 'cookie-name', value: 'cookie-value', expires: tenYearsFromNow }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.set with name and value in options and expires in the future'); promise_test(async testCase => { @@ -131,10 +130,11 @@ promise_test(async testCase => { await cookieStore.set( { name: 'cookie-name', value: 'cookie-value', expires: tenYearsAgo }); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie, null); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.set with name and value in options and expires in the past'); promise_test(async testCase => { @@ -144,13 +144,12 @@ promise_test(async testCase => { await cookieStore.set( 'cookie-name', 'cookie-value', { domain: currentDomain }); + testCase.add_cleanup(async () => { + await cookieStore.delete({ name: 'cookie-name', domain: currentDomain }); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(async () => { - await cookieStore.delete({ name: 'cookie-name', domain: currentDomain }); - }); }, 'cookieStore.set with domain set to the current hostname'); promise_test(async testCase => { @@ -184,8 +183,14 @@ promise_test(async testCase => { await cookieStore.delete('cookie-name'); await cookieStore.set('cookie-name', 'cookie-value1'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); await cookieStore.set('cookie-name', 'cookie-value2', { domain: currentDomain }); + testCase.add_cleanup(async () => { + await cookieStore.delete({ name: 'cookie-name', domain: currentDomain }); + }); const cookies = await cookieStore.getAll('cookie-name'); assert_equals(cookies.length, 2); @@ -196,11 +201,6 @@ promise_test(async testCase => { const values = cookies.map((cookie) => cookie.value); values.sort(); assert_array_equals(values, ['cookie-value1', 'cookie-value2']); - - await async_cleanup(async () => { - await cookieStore.delete('cookie-name'); - await cookieStore.delete({ name: 'cookie-name', domain: currentDomain }); - }); }, 'cookieStore.set default domain is null and differs from current hostname'); promise_test(async testCase => { @@ -212,13 +212,12 @@ promise_test(async testCase => { await cookieStore.set( 'cookie-name', 'cookie-value', { path: currentDirectory }); + testCase.add_cleanup(async () => { + await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); + }); const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'cookie-value'); - - await async_cleanup(async () => { - await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); - }); }, 'cookieStore.set with path set to the current directory'); promise_test(async testCase => { @@ -232,33 +231,36 @@ promise_test(async testCase => { await cookieStore.set( 'cookie-name', 'cookie-value', { path: subDirectory }); - const cookie = await cookieStore.get('cookie-name'); - assert_equals(cookie, null); - - await async_cleanup(async () => { + testCase.add_cleanup(async () => { await cookieStore.delete({ name: 'cookie-name', path: subDirectory }); }); + const cookie = await cookieStore.get('cookie-name'); + assert_equals(cookie, null); }, 'cookieStore.set with path set to a subdirectory of the current directory'); promise_test(async testCase => { await cookieStore.delete('cookie-name'); await cookieStore.set('cookie-name', 'cookie-old-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); await cookieStore.set('cookie-name', 'cookie-new-value', { path: '/' }); + testCase.add_cleanup(async () => { + await cookieStore.delete({ name: 'cookie-name', path: '/' }); + }); const cookies = await cookieStore.getAll('cookie-name'); assert_equals(cookies.length, 1); assert_equals(cookies[0].name, 'cookie-name'); assert_equals(cookies[0].value, 'cookie-new-value'); - - await async_cleanup(async () => { - await cookieStore.delete('cookie-name'); - await cookieStore.delete({ name: 'cookie-name', path: '/' }); - }); }, 'cookieStore.set default path is /'); promise_test(async testCase => { await cookieStore.set('cookie-name', 'old-cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const cookie_attributes = await cookieStore.get('cookie-name'); assert_equals(cookie_attributes.name, 'cookie-name'); @@ -269,6 +271,4 @@ promise_test(async testCase => { const cookie = await cookieStore.get('cookie-name'); assert_equals(cookie.name, 'cookie-name'); assert_equals(cookie.value, 'new-cookie-value'); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookieStore.set with get result'); diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_cross_origin.tentative.https.sub.html b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_cross_origin.tentative.https.sub.html index abc431a4d62..6879c5da926 100644 --- a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_cross_origin.tentative.https.sub.html +++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_cross_origin.tentative.https.sub.html @@ -27,9 +27,7 @@ promise_test(async t => { name: 'cookie-name', value: 'cookie-value', }, kCorsBase); - t.add_cleanup(() => { - cookieStore.delete('cookie-name'); - }); + t.add_cleanup(async () => { await cookieStore.delete('cookie-name'); }); await waitForMessage(); diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js index 225e58266e2..441573d20e9 100644 --- a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js +++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js @@ -24,16 +24,6 @@ self.addEventListener('install', (event) => { })()); }); -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - // Resolves when the service worker receives the 'activate' event. const kServiceWorkerActivatedPromise = new Promise(resolve => { self.addEventListener('activate', event => { resolve(); }); @@ -96,8 +86,13 @@ promise_test(async testCase => { await kServiceWorkerActivatedPromise; await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); + testCase.add_cleanup(() => { g_cookie_changes = []; }); await g_cookie_change_received_promise; + testCase.add_cleanup(() => RearmCookieChangeReceivedPromise()); assert_equals(g_cookie_changes.length, 1); const event = g_cookie_changes[0] @@ -108,12 +103,6 @@ promise_test(async testCase => { assert_equals(event.deleted.length, 0); assert_true(event instanceof ExtendableCookieChangeEvent); assert_true(event instanceof ExtendableEvent); - - await async_cleanup(async () => { - await cookieStore.delete('cookie-name'); - g_cookie_changes = []; - RearmCookieChangeReceivedPromise(); - }); }, 'cookiechange dispatched with cookie change that matches subscription'); done(); diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js index 4a5ee5eed96..c48ad8bb98b 100644 --- a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js +++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js @@ -17,16 +17,6 @@ self.addEventListener('install', (event) => { })()); }); -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - // Resolves when the service worker receives the 'activate' event. const kServiceWorkerActivatedPromise = new Promise(resolve => { self.addEventListener('activate', event => { resolve(); }); @@ -53,6 +43,9 @@ promise_test(async testCase => { }); await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const event = await cookie_change_received_promise; assert_equals(event.type, 'cookiechange'); @@ -62,8 +55,6 @@ promise_test(async testCase => { assert_equals(event.deleted.length, 0); assert_true(event instanceof ExtendableCookieChangeEvent); assert_true(event instanceof ExtendableEvent); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookiechange dispatched with cookie change that matches subscription ' + 'to event handler registered with addEventListener'); diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.js index de521caddd8..b6231869974 100644 --- a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.js +++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.js @@ -16,16 +16,6 @@ self.addEventListener('install', (event) => { })()); }); -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/w3c/web-platform-tests/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - // Resolves when the service worker receives the 'activate' event. const kServiceWorkerActivatedPromise = new Promise(resolve => { self.addEventListener('activate', event => { resolve(); }); diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_eventhandler_attribute.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_eventhandler_attribute.js index 8784af7e6e8..228b5289856 100644 --- a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_eventhandler_attribute.js +++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_eventhandler_attribute.js @@ -17,16 +17,6 @@ self.addEventListener('install', (event) => { })()); }); -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/web-platform-tests/wpt/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - // Resolves when the service worker receives the 'activate' event. const kServiceWorkerActivatedPromise = new Promise(resolve => { self.addEventListener('activate', event => { resolve(); }); @@ -40,6 +30,9 @@ promise_test(async testCase => { }); await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const event = await cookie_change_received_promise; assert_equals(event.type, 'cookiechange'); @@ -49,8 +42,6 @@ promise_test(async testCase => { assert_equals(event.deleted.length, 0); assert_true(event instanceof ExtendableCookieChangeEvent); assert_true(event instanceof ExtendableEvent); - - await async_cleanup(() => cookieStore.delete('cookie-name')); }, 'cookiechange dispatched with cookie change that matches subscription ' + 'to event handler registered with oncookiechange'); diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.js index 12759a2e3ae..43edadd7bb8 100644 --- a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.js +++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.js @@ -17,16 +17,6 @@ self.addEventListener('install', (event) => { })()); }); -// Workaround because add_cleanup doesn't support async functions yet. -// See https://github.com/w3c/web-platform-tests/issues/6075 -async function async_cleanup(cleanup_function) { - try { - await cleanup_function(); - } catch (e) { - // Errors in cleanup functions shouldn't result in test failures. - } -} - // Resolves when the service worker receives the 'activate' event. const kServiceWorkerActivatedPromise = new Promise(resolve => { self.addEventListener('activate', event => { resolve(); }); @@ -42,18 +32,19 @@ promise_test(async testCase => { }); await cookieStore.set('another-cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('another-cookie-name'); + }); await cookieStore.set('cookie-name', 'cookie-value'); + testCase.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); const event = await cookie_change_received_promise; assert_equals(event.type, 'cookiechange'); assert_equals(event.changed.length, 1); assert_equals(event.changed[0].name, 'cookie-name'); assert_equals(event.changed[0].value, 'cookie-value'); - - await async_cleanup(async () => { - await cookieStore.delete('another-cookie-name'); - await cookieStore.delete('cookie-name'); - }); }, 'cookiechange not dispatched for change that does not match subscription'); done(); diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/margin-computed.html b/tests/wpt/web-platform-tests/css/css-box/parsing/margin-computed.html new file mode 100644 index 00000000000..f22f6cdc0f5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/parsing/margin-computed.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS basic box model: getComputedStyle().margin</title> +<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-margin"> +<meta name="assert" content="margin computed value has absolute lengths."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<style> + #parent { + width: 200px; + } + #target { + width: 0px; + font-size: 40px; + } +</style> +</head> +<body> +<div id="parent"> + <div id="target"></div> +</div> +<script> +test_computed_value("margin", "10px"); +test_computed_value("margin", "10px 20px 30px 40px"); +test_computed_value("margin", "calc(0.5em + 10px)", "30px"); +test_computed_value("margin", "30%", "60px"); + +test_computed_value("margin-top", "10px"); +test_computed_value("margin-right", "20px"); +test_computed_value("margin-bottom", "30px"); +test_computed_value("margin-left", "40px"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-logical/parsing/block-size-computed.html b/tests/wpt/web-platform-tests/css/css-logical/parsing/block-size-computed.html new file mode 100644 index 00000000000..de3a3c2a0c5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-logical/parsing/block-size-computed.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Logical Properties and Values: getComputedStyle().blockSize</title> +<link rel="help" href="https://drafts.csswg.org/css-logical-1/#dimension-properties"> +<meta name="assert" content="block-size computed value is an absolute length."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<style> + #parent { + height: 300px; + } + #target { + width: 0px; + height: 0px; + font-size: 40px; + } + #child { + height: 80px; + } +</style> +</head> +<body> +<div id="parent"> + <div id="target"> + <div id="child"> + </div> + </div> +</div> +<script> +test_computed_value("block-size", "auto", "80px"); // child height + +test_computed_value("block-size", "10px"); +test_computed_value("block-size", "20%", "60px"); +test_computed_value("block-size", "calc(0.5em + 10px)", "30px"); +test_computed_value("block-size", "calc(-0.5em + 10px)", "0px"); + +test_computed_value("block-size", "min-content", "80px"); // child height +test_computed_value("block-size", "max-content", "80px"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-logical/parsing/inline-size-computed.html b/tests/wpt/web-platform-tests/css/css-logical/parsing/inline-size-computed.html new file mode 100644 index 00000000000..0f60165a347 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-logical/parsing/inline-size-computed.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Logical Properties and Values: getComputedStyle().inlineSize</title> +<link rel="help" href="https://drafts.csswg.org/css-logical-1/#dimension-properties"> +<meta name="assert" content="inline-size computed value is an absolute length."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<style> + #parent { + width: 200px; + } + #target { + width: 0px; + height: 0px; + font-size: 40px; + } + #child { + width: 60px; + } +</style> +</head> +<body> +<div id="parent"> + <div id="target"> + <div id="child"> + </div> + </div> +</div> +<script> +test_computed_value("inline-size", "auto", "200px"); // parent width + +test_computed_value("inline-size", "10px"); +test_computed_value("inline-size", "20%", "40px"); +test_computed_value("inline-size", "calc(0.5em + 10px)", "30px"); +test_computed_value("inline-size", "calc(-0.5em + 10px)", "0px"); + +test_computed_value("inline-size", "min-content", "60px"); // child width +test_computed_value("inline-size", "max-content", "60px"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/background-image-alpha.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/background-image-alpha.https.html index 53d869d0607..7f1e31bf39b 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/background-image-alpha.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/background-image-alpha.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="background-image-alpha-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/background-image-multiple.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/background-image-multiple.https.html index 79ff8836c15..51c928d2a67 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/background-image-multiple.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/background-image-multiple.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="background-image-multiple-ref.html"> <style> #output { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/background-image-tiled.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/background-image-tiled.https.html index 8498c82a355..11647c9228c 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/background-image-tiled.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/background-image-tiled.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="background-image-tiled-ref.html"> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-001.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-001.https.html index 601d4187b09..eb7f6716ada 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-001.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-001.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="geometry-background-image-001-ref.html"> <style> html, body { margin: 0; padding: 0; } diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-002.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-002.https.html index 1d57073bf20..e636aa73b3b 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-002.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-002.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="geometry-background-image-002-ref.html"> <style> html, body { margin: 0; padding: 0; } diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-001.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-001.https.html index 8e28b54b36d..51373a528e4 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-001.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-001.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="geometry-background-image-tiled-001-ref.html"> <style> html, body { margin: 0; padding: 0; } diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-002.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-002.https.html index 9248e38641e..d55761b47cd 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-002.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-002.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="geometry-background-image-tiled-002-ref.html"> <style> html, body { margin: 0; padding: 0; } diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-003.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-003.https.html index 5b6b6c7c65a..6d5bdd2fa53 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-003.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-003.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="geometry-background-image-tiled-003-ref.html"> <style> html, body { margin: 0; padding: 0; } diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-001.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-001.https.html index 3fb4643cd47..ff7f56e299d 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-001.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-001.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="geometry-border-image-001-ref.html"> <style> html, body { margin: 0; padding: 0; } diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-002.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-002.https.html index 26e24bb0146..d6e47f04907 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-002.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-002.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="geometry-border-image-002-ref.html"> <style> html, body { margin: 0; padding: 0; } diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-003.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-003.https.html index a26f2b7d109..36af043cc5f 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-003.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-003.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="geometry-border-image-003-ref.html"> <style> html, body { margin: 0; padding: 0; } diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-004.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-004.https.html index 60db7ff4bc5..0f483cd5d19 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-004.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-004.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="geometry-border-image-004-ref.html"> <style> html, body { margin: 0; padding: 0; } diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-with-float-size.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-with-float-size.https.html index 65477e4b3bf..8cd90c84318 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-with-float-size.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-with-float-size.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="geometry-with-float-size-ref.html"> -<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/#dom-css-paintworklet"> <style> .container { width: 100.5px; diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/hidpi/canvas-transform.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/hidpi/canvas-transform.https.html index d160a8673c2..6dc57abaf77 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/hidpi/canvas-transform.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/hidpi/canvas-transform.https.html @@ -1,6 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> -<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/#dom-css-paintworklet"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="canvas-transform-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/hidpi/device-pixel-ratio.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/hidpi/device-pixel-ratio.https.html index 46a9aa28f2f..f9516e5ccf9 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/hidpi/device-pixel-ratio.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/hidpi/device-pixel-ratio.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="device-pixel-ratio-ref.html"> <style> html, body { margin: 0; padding: 0; } diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/idlharness.html b/tests/wpt/web-platform-tests/css/css-paint-api/idlharness.html index c9675ab0412..aad04a17cc4 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/idlharness.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/idlharness.html @@ -1,6 +1,6 @@ <!doctype html> <title>CSS Painting API IDL tests</title> -<link rel="help" href="https://drafts.css-houdini.org/css-paint-api-1/"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/WebIDLParser.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-constructor-error.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-constructor-error.https.html index 439ff8b4e5a..8facde43f57 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-constructor-error.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-constructor-error.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="invalid-image-constructor-error-ref.html"> <style> #output { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-paint-error.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-paint-error.https.html index 2806ad92048..17c283e35ca 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-paint-error.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-paint-error.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="invalid-image-paint-error-ref.html"> <style> #output { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-pending-script.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-pending-script.https.html index 4347a00a499..20a61eff41b 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-pending-script.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-pending-script.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="invalid-image-pending-script-ref.html"> <style> #output { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/overdraw.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/overdraw.https.html index 5be26f7e0a8..8d3dc72f931 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/overdraw.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/overdraw.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="overdraw-ref.html"> <style> #output { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint-arguments.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint-arguments.https.html index abfb2a68e4b..615027c8fe3 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/paint-arguments.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/paint-arguments.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="paint-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint-function-arguments.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint-function-arguments.https.html index d87b0b80a61..3a1e579f5ec 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/paint-function-arguments.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/paint-function-arguments.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="paint-function-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-composite.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-composite.https.html index 80e94e45a8c..edf8a766fab 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-composite.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-composite.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="paint2d-composite-ref.html"> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-filter.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-filter.https.html index d0c45395757..9d598c7a968 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-filter.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-filter.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="paint2d-filter-ref.html"> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-gradient.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-gradient.https.html index 892a7919f1f..1887f52b06b 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-gradient.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-gradient.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="paint2d-gradient-ref.html"> <style> #output { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-image.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-image.https.html index 6fce4b6898b..71074df796d 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-image.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-image.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="paint2d-image-ref.html"> <style> #output { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-paths.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-paths.https.html index 091f548cb30..0e04168fcb1 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-paths.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-paths.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="paint2d-paths-ref.html"> <style> #output { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-rects.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-rects.https.html index 24942727d5a..9279aa2a870 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-rects.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-rects.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="paint2d-rects-ref.html"> <style> #output { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-shadows.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-shadows.https.html index 98dcfbce299..b641dab8860 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-shadows.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-shadows.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="paint2d-shadows-ref.html"> <style> #output { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-transform.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-transform.https.html index c91b500a46f..d052b8c5543 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-transform.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-transform.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="paint2d-transform-ref.html"> <style> #output { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-001.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-001.https.html index 4356ce61f4a..486f379dd7b 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-001.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-001.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-002.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-002.https.html index b1b50e04045..5c7b3aca048 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-002.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-002.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-003.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-003.https.html index 3b1b0014f78..81904ee6f7b 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-003.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-003.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-004.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-004.https.html index 138a7908682..9bf264b0d5f 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-004.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-004.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-005.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-005.https.html index 0c5e539381b..24769f472c5 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-005.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-005.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-006.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-006.https.html index e99ab05a88d..a6fcc16c5da 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-006.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-006.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-007.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-007.https.html index 53f245bce48..462cfb60106 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-007.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-007.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-008.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-008.https.html index e6b863c641c..d5c18b0905d 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-008.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-008.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-009.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-009.https.html index b23191ae340..7cfdf91eb02 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-009.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-009.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-010.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-010.https.html index e98b4316489..142ca0c5d5d 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-010.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-010.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-011.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-011.https.html index b9d54bf413d..23eb9d3c9f9 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-011.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-011.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-012.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-012.https.html index 14eebeb635a..fa2c6b5f560 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-012.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-012.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-013.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-013.https.html index 37e3eb435ec..adc1c03cfe6 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-013.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-013.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-014.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-014.https.html index 690e488b917..d041ae316f7 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-014.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-014.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-015.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-015.https.html index fba76712466..8ebe3e7c4d1 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-015.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-015.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-016.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-016.https.html index 31cca45faca..ccd0595faa5 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-016.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-016.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-017.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-017.https.html index 0d14fe74c21..476e29ff12f 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-017.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-017.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-018.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-018.https.html index 541332ae777..e6a31cbdd41 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-018.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-018.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-018-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-019.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-019.https.html index 707a0c6ebe0..309ec800eac 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-019.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-019.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-020.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-020.https.html index fe8dbad27bd..7e00b64123d 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-020.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-020.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-021.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-021.https.html index 0c3a596236f..8fa043a8cde 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-021.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-021.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-022.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-022.https.html index 50aaa6b3c94..2ff27d7a4af 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-022.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-022.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-001.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-001.https.html index c6e93029f10..5aaed62542f 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-001.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-001.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Interpolated <angle> values reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-002.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-002.https.html index cfa9a618a1f..80b2c9339d7 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-002.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-002.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Interpolated <color> values reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-003.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-003.https.html index 314d0c082ef..683ed403fb8 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-003.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-003.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Interpolated <integer> values reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-004.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-004.https.html index 430326a0663..9602e902eca 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-004.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-004.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Interpolated <length-percentage> values reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-005.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-005.https.html index 807a0509289..35d6ccbf3d4 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-005.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-005.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Interpolated <length> values reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-006.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-006.https.html index 45859a514a3..a8cfdead0f7 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-006.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-006.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Interpolated <number> values reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-007.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-007.https.html index b3f4f1f1bba..77b80b51e67 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-007.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-007.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Interpolated <percentage> values reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-008.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-008.https.html index 45eb9096081..1ec166614e1 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-008.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-008.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Interpolated <resolution> values reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-009.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-009.https.html index e45881244b2..e7a5e37c641 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-009.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-009.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Interpolated <time> values reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-010.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-010.https.html index d4d1b038e24..ee3a0f1b321 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-010.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-interpolation-010.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Interpolated list values reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-invalidation-001.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-invalidation-001.https.html index 26da7e2eeff..133b9238e6c 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-invalidation-001.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-invalidation-001.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Registering a property causes invalidation for initial value</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-invalidation-002.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-invalidation-002.https.html index 0aab051a4c4..aadbfec42c8 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-invalidation-002.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-invalidation-002.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Registering a property causes invalidation for applied value</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-stylemap.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-stylemap.https.html index 2305afb37df..4a6b4db521a 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-stylemap.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-stylemap.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Test styleMap functions</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-001.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-001.https.html index f915dacb168..970e1f3e5ed 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-001.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-001.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Initial values reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-002.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-002.https.html index 7d62b0b2f65..6019151b105 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-002.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-002.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Inherited values reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-003.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-003.https.html index b22f18dde7c..b9c3bf3fd90 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-003.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-003.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Values of *-properties reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-004.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-004.https.html index d67603f9fe8..e04be69f80c 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-004.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-004.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Values of <angle>-properties reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-005.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-005.https.html index 71cda9a3766..bfecd0c56b8 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-005.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-005.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Values of <color>-properties reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-006.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-006.https.html index aa03edf25f7..7176b67d4bb 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-006.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-006.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Values of <custom-ident>-properties reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-007.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-007.https.html index 61256cd11cf..309fe969b6b 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-007.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-007.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Values of <image>-properties reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-008.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-008.https.html index 06a18bd022c..db72408d77b 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-008.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-008.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Values of <integer>-properties reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-009.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-009.https.html index 2ce2a0d56bd..a2c2e9a8cd5 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-009.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-009.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Values of <length-percentage>-properties reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-010.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-010.https.html index 53aef81e8e8..332a22a1b9d 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-010.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-010.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Values of <length>-properties reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-011.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-011.https.html index d5dc351f7fa..a596a5d55fd 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-011.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-011.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Values of <number>-properties reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-012.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-012.https.html index 827877a51c4..80c1e6ed37c 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-012.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-012.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Values of <percentage>-properties reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-013.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-013.https.html index e37cd556f80..7af03929d84 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-013.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-013.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Values of <resolution>-properties reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-014.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-014.https.html index f42160fabe1..0ca1eca13ed 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-014.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-014.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Values of <time>-properties reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-015.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-015.https.html index 5b00b53c2a0..d7ba26b852c 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-015.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-015.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Values of <url>-properties reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-016.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-016.https.html index 1ec2e1b5ab0..609f00f6d00 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-016.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-016.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Values of ident-properties reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-017.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-017.https.html index 1ec2e1b5ab0..609f00f6d00 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-017.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-017.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Values of ident-properties reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-018.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-018.https.html index 6be2cb8a228..1f9876b6b50 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-018.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/registered-property-value-018.https.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html class="reftest-wait"> <title>Values of lists reach worklet</title> -<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="parse-input-arguments-ref.html"> <script src="/common/reftest-wait.js"></script> <script src="/common/worklet-reftest.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/style-background-image.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/style-background-image.https.html index 13204cf709f..8e5f2f81547 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/style-background-image.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/style-background-image.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="style-background-image-ref.html"> <style> .container { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/style-before-pseudo.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/style-before-pseudo.https.html index f7e2a164f17..017b23a6caf 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/style-before-pseudo.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/style-before-pseudo.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="style-before-pseudo-ref.html"> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <style> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/style-first-letter-pseudo.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/style-first-letter-pseudo.https.html index 02b114560fd..d3c31a0508d 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/style-first-letter-pseudo.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/style-first-letter-pseudo.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="style-first-letter-pseudo-ref.html"> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <style> diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/valid-image-after-load.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/valid-image-after-load.https.html index 44612f98ffd..c1bf8e85548 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/valid-image-after-load.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/valid-image-after-load.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="valid-image-after-load-ref.html"> <style> #output { diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/valid-image-before-load.https.html b/tests/wpt/web-platform-tests/css/css-paint-api/valid-image-before-load.https.html index 7738d9dd115..b58dfa114ea 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/valid-image-before-load.https.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/valid-image-before-load.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/"> <link rel="match" href="valid-image-before-load-ref.html"> <style> #output { diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/conditional-rules.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/conditional-rules.html index b4de63045f3..0bff879856c 100644 --- a/tests/wpt/web-platform-tests/css/css-properties-values-api/conditional-rules.html +++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/conditional-rules.html @@ -1,5 +1,5 @@ <!DOCTYPE html> -<link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api-1/#conditional-rules" /> +<link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api-1/#conditional-rules"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> @@ -35,8 +35,9 @@ test(function() { }, 'CSS.supports(conditionText) should ignore registered syntax'); test(function() { - assert_false(CSS.supports('--length', 'red')); + assert_true(CSS.supports('--length', 'red')); assert_true(CSS.supports('--length', '10px')); -}, 'CSS.supports(property, value) should parse against registered syntax'); + assert_true(CSS.supports('--length', ' anything, really')); +}, 'CSS.supports(property, value) should ignore registered syntax'); </script> diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/unit-cycles.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/unit-cycles.html index c26e1cda1f6..5301b6fcc77 100644 --- a/tests/wpt/web-platform-tests/css/css-properties-values-api/unit-cycles.html +++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/unit-cycles.html @@ -96,19 +96,19 @@ test(function() { target.style = 'font-size: var(--font-size-em);'; assert_property_equals('font-size', unsetFontSize); - assert_property_equals('--font-size-em', compute_dimension('2em', 'unset')); + assert_property_equals('--font-size-em', ''); }, 'Lengths with em units may not be referenced from font-size'); test(function() { target.style = 'font-size: var(--font-size-ex);'; assert_property_equals('font-size', unsetFontSize); - assert_property_equals('--font-size-ex', compute_dimension('2ex', 'unset')); + assert_property_equals('--font-size-ex', ''); }, 'Lengths with ex units may not be referenced from font-size'); test(function() { target.style = 'font-size: var(--font-size-ch);'; assert_property_equals('font-size', unsetFontSize); - assert_property_equals('--font-size-ch', compute_dimension('2ch', 'unset')); + assert_property_equals('--font-size-ch', ''); }, 'Lengths with ch units may not be referenced from font-size'); test(function() { @@ -120,11 +120,9 @@ test(function() { let root = document.documentElement; - let expected1rem = compute_dimension('1rem', 'unset', root); - let expected2rem = compute_dimension('2rem', 'unset', root); root.style = 'font-size: var(--font-size-rem);'; - assert_property_equals('font-size', expected1rem, root); - assert_property_equals('--font-size-rem', expected2rem, root); + assert_property_equals('font-size', unsetFontSize, root); + assert_property_equals('--font-size-rem', '', root); }, 'Lengths with rem units may not be referenced from font-size on root element'); test(function() { @@ -134,51 +132,50 @@ test(function() { target.style = 'font-size: var(--font-size-em, 42px);'; - assert_property_equals('font-size', '42px'); - }, 'Fallback triggered when em unit cycle is detected'); + assert_property_equals('font-size', unsetFontSize); + }, 'Fallback not triggered while inside em unit cycle'); test(function() { target.style = 'font-size: var(--font-size-ex, 42px);'; - assert_property_equals('font-size', '42px'); - }, 'Fallback triggered when ex unit cycle is detected'); + assert_property_equals('font-size', unsetFontSize); + }, 'Fallback not triggered while inside ex unit cycle'); test(function() { target.style = 'font-size: var(--font-size-ch, 42px);'; - assert_property_equals('font-size', '42px'); - }, 'Fallback triggered when ch unit cycle is detected'); + assert_property_equals('font-size', unsetFontSize); + }, 'Fallback not triggered while inside ch unit cycle'); test(function() { let root = document.documentElement; root.style = 'font-size: var(--font-size-rem, 42px);'; - assert_property_equals('font-size', '42px', root); + assert_property_equals('font-size', unsetFontSize, root); root.style = 'font-size: unset;'; - }, 'Fallback triggered when rem unit cycle is detected on root element'); + }, 'Fallback not triggered while inside rem unit cycle on root element'); test(function() { target.style = 'font-size: var(--font-size-em-via-var);'; assert_property_equals('font-size', unsetFontSize); - assert_property_equals('--font-size-em-via-var', compute_dimension('10em', 'unset')); + assert_property_equals('--font-size-em-via-var', ''); }, 'Lengths with em units are detected via var references'); test(function() { target.style = 'font-size: var(--font-size-ex-via-var);'; assert_property_equals('font-size', unsetFontSize); - assert_property_equals('--font-size-ex-via-var', compute_dimension('10ex', 'unset')); + assert_property_equals('--font-size-ex-via-var', ''); }, 'Lengths with ex units are detected via var references'); test(function() { target.style = 'font-size: var(--font-size-ch-via-var);'; assert_property_equals('font-size', unsetFontSize); - assert_property_equals('--font-size-ch-via-var', compute_dimension('10ch', 'unset')); + assert_property_equals('--font-size-ch-via-var', ''); }, 'Lengths with ch units are detected via var references'); test(function() { let root = document.documentElement; - let expected1rem = compute_dimension('1rem', 'unset', root); - let expected10rem = compute_dimension('10rem', 'unset', root); root.style = 'font-size: var(--font-size-rem-via-var);'; - assert_property_equals('font-size', expected1rem, root); - assert_property_equals('--font-size-rem-via-var', expected10rem, root); + assert_property_equals('font-size', unsetFontSize, root); + assert_property_equals('--font-size-rem-via-var', '', root); + root.style = 'font-size: unset'; }, 'Lengths with rem units are detected via var references'); test(function() { diff --git a/tests/wpt/web-platform-tests/css/css-tables/percent-width-cell-dynamic.html b/tests/wpt/web-platform-tests/css/css-tables/percent-width-cell-dynamic.html new file mode 100644 index 00000000000..5c7ef3bf8a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-tables/percent-width-cell-dynamic.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<link rel="help" href="https://crbug.com/984642" /> +<link rel="match" href="../reference/ref-filled-green-100px-square-only.html"> +<style> +html { overflow: hidden; } +</style> +<p>Test passes if there is a filled green square.</p> +<div id="target"> + <div style="width: 10%;"> + <div style="display: inline-table;"> + <div style="display: table-cell; width: 100%;"> + <span style="display: inline-block; width: 100%; height: 100px; background: green;"></span> + </div> + <div style="display: table-cell;"> + <span style="display: inline-block; width: 10px; height: 100px; background: green;"></span> + </div> + </div> + </div> +</div> +<script> +document.body.offsetTop; +document.getElementById('target').style.width = '1000px'; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-text-decor/reference/text-decoration-thickness-001-notref.html b/tests/wpt/web-platform-tests/css/css-text-decor/reference/text-decoration-thickness-001-notref.html index f876afa68c6..4e7db88ce5b 100644 --- a/tests/wpt/web-platform-tests/css/css-text-decor/reference/text-decoration-thickness-001-notref.html +++ b/tests/wpt/web-platform-tests/css/css-text-decor/reference/text-decoration-thickness-001-notref.html @@ -10,6 +10,7 @@ } div span { text-decoration: green underline; + text-decoration-skip-ink: none; font: 20px/1 Ahem; color: transparent; padding-right: 1em; diff --git a/tests/wpt/web-platform-tests/css/css-text-decor/reference/text-underline-offset-001-notref.html b/tests/wpt/web-platform-tests/css/css-text-decor/reference/text-underline-offset-001-notref.html index c56078a32ae..8b1dacfbf48 100644 --- a/tests/wpt/web-platform-tests/css/css-text-decor/reference/text-underline-offset-001-notref.html +++ b/tests/wpt/web-platform-tests/css/css-text-decor/reference/text-underline-offset-001-notref.html @@ -10,6 +10,7 @@ } div span { text-decoration: green underline; + text-decoration-skip-ink: none; font: 20px/1 Ahem; color: transparent; padding-bottom: 20px; diff --git a/tests/wpt/web-platform-tests/css/css-text-decor/reference/text-underline-offset-002-ref.html b/tests/wpt/web-platform-tests/css/css-text-decor/reference/text-underline-offset-002-ref.html index ed2e3cefff8..6e7d5a65f03 100644 --- a/tests/wpt/web-platform-tests/css/css-text-decor/reference/text-underline-offset-002-ref.html +++ b/tests/wpt/web-platform-tests/css/css-text-decor/reference/text-underline-offset-002-ref.html @@ -10,6 +10,7 @@ } #text, #norm{ text-decoration: green underline; + text-decoration-skip-ink: none; text-underline-offset: 0px; font: 20px/1 Ahem; color: transparent; diff --git a/tests/wpt/web-platform-tests/css/css-text-decor/text-decoration-thickness-linethrough-001.html b/tests/wpt/web-platform-tests/css/css-text-decor/text-decoration-thickness-linethrough-001.html index 37e954b2b87..6fd8383d062 100644 --- a/tests/wpt/web-platform-tests/css/css-text-decor/text-decoration-thickness-linethrough-001.html +++ b/tests/wpt/web-platform-tests/css/css-text-decor/text-decoration-thickness-linethrough-001.html @@ -18,6 +18,7 @@ font: 20px/1 Ahem; color: transparent; text-decoration: green line-through; + text-decoration-skip-ink: none; /* We make the text decoration just a bit thicker than the div's height, so that * it will entirely cover the div's content-box (making it fully green) as long * as the line-through is approximately centered, vertically. diff --git a/tests/wpt/web-platform-tests/css/css-text-decor/text-underline-offset-001.html b/tests/wpt/web-platform-tests/css/css-text-decor/text-underline-offset-001.html index bd9a29c7fde..f7aeb543df3 100644 --- a/tests/wpt/web-platform-tests/css/css-text-decor/text-underline-offset-001.html +++ b/tests/wpt/web-platform-tests/css/css-text-decor/text-underline-offset-001.html @@ -15,6 +15,7 @@ } div span { text-decoration: green underline; + text-decoration-skip-ink: none; font: 20px/1 Ahem; color: transparent; padding-bottom: 20px; diff --git a/tests/wpt/web-platform-tests/css/css-text-decor/text-underline-offset-002.html b/tests/wpt/web-platform-tests/css/css-text-decor/text-underline-offset-002.html index 7441ff9d932..dc65db7723f 100644 --- a/tests/wpt/web-platform-tests/css/css-text-decor/text-underline-offset-002.html +++ b/tests/wpt/web-platform-tests/css/css-text-decor/text-underline-offset-002.html @@ -14,6 +14,7 @@ } #text, #norm{ text-decoration: green underline; + text-decoration-skip-ink: none; font: 20px/1 Ahem; color: transparent; position: relative; diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/ja/css-text-line-break-ja-pr-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/ja/css-text-line-break-ja-pr-loose.html new file mode 100644 index 00000000000..fde2a3d086b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/ja/css-text-line-break-ja-pr-loose.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PR AFW (loose,ja)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is Japanese, and line-break:loose, a browser allows a break before a PR character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `00B1 PLUS-MINUS SIGN +20AC EURO SIGN +2116 NUMERO SIGN +FE69 SMALL DOLLAR SIGN +FF04 FULLWIDTH DOLLAR SIGN +FFE1 FULLWIDTH POUND SIGN +FFE5 FULLWIDTH YEN SIGN +FFE6 FULLWIDTH WON SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="ja">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="ja">文文文文文文<br/>&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may appear at line start if ja and loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/ja/css-text-line-break-ja-pr-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/ja/css-text-line-break-ja-pr-normal.html new file mode 100644 index 00000000000..d6f58cb88c1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/ja/css-text-line-break-ja-pr-normal.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PR AFW (normal,ja)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is Japanese, and line-break:normal, a browser will NOT allow a break before a PR character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `00B1 PLUS-MINUS SIGN +20AC EURO SIGN +2116 NUMERO SIGN +FE69 SMALL DOLLAR SIGN +FF04 FULLWIDTH DOLLAR SIGN +FFE1 FULLWIDTH POUND SIGN +FFE5 FULLWIDTH YEN SIGN +FFE6 FULLWIDTH WON SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="ja">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="ja">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if ja and normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/ja/css-text-line-break-ja-pr-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/ja/css-text-line-break-ja-pr-strict.html new file mode 100644 index 00000000000..8265f917225 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/ja/css-text-line-break-ja-pr-strict.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PR AFW (strict,ja)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is Japanese, and line-break:strict, a browser will NOT allow a break before a PR character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `00B1 PLUS-MINUS SIGN +20AC EURO SIGN +2116 NUMERO SIGN +FE69 SMALL DOLLAR SIGN +FF04 FULLWIDTH DOLLAR SIGN +FFE1 FULLWIDTH POUND SIGN +FFE5 FULLWIDTH YEN SIGN +FFE6 FULLWIDTH WON SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="ja">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="ja">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if ja and strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cj-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cj-loose.html new file mode 100644 index 00000000000..c902bf7bddb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cj-loose.html @@ -0,0 +1,119 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>Line-break:loose, Conditional Japanese Starter (CJ) (de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="The browser allows a conditional Japanese starter at the beginning of a line; the langauge not being Chinese or Japanese makes no difference."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `3041 HIRAGANA LETTER SMALL A +3043 HIRAGANA LETTER SMALL I +3045 HIRAGANA LETTER SMALL U +3047 HIRAGANA LETTER SMALL E +3049 HIRAGANA LETTER SMALL O +3063 HIRAGANA LETTER SMALL TU +3083 HIRAGANA LETTER SMALL YA +3085 HIRAGANA LETTER SMALL YU +3087 HIRAGANA LETTER SMALL YO +308E HIRAGANA LETTER SMALL WA +3095 HIRAGANA LETTER SMALL KA +3096 HIRAGANA LETTER SMALL KE +30A1 KATAKANA LETTER SMALL A +30A3 KATAKANA LETTER SMALL I +30A5 KATAKANA LETTER SMALL U +30A7 KATAKANA LETTER SMALL E +30A9 KATAKANA LETTER SMALL O +30C3 KATAKANA LETTER SMALL TU +30E3 KATAKANA LETTER SMALL YA +30E5 KATAKANA LETTER SMALL YU +30E7 KATAKANA LETTER SMALL YO +30EE KATAKANA LETTER SMALL WA +30F5 KATAKANA LETTER SMALL KA +30F6 KATAKANA LETTER SMALL KE +30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK +31F0 KATAKANA LETTER SMALL KU +31F1 KATAKANA LETTER SMALL SI +31F2 KATAKANA LETTER SMALL SU +31F3 KATAKANA LETTER SMALL TO +31F4 KATAKANA LETTER SMALL NU +31F5 KATAKANA LETTER SMALL HA +31F6 KATAKANA LETTER SMALL HI +31F7 KATAKANA LETTER SMALL HU +31F8 KATAKANA LETTER SMALL HE +31F9 KATAKANA LETTER SMALL HO +31FA KATAKANA LETTER SMALL MU +31FB KATAKANA LETTER SMALL RA +31FC KATAKANA LETTER SMALL RI +31FD KATAKANA LETTER SMALL RU +31FE KATAKANA LETTER SMALL RE +31FF KATAKANA LETTER SMALL RO +FF67 HALFWIDTH KATAKANA LETTER SMALL A +FF68 HALFWIDTH KATAKANA LETTER SMALL I +FF69 HALFWIDTH KATAKANA LETTER SMALL U +FF6A HALFWIDTH KATAKANA LETTER SMALL E +FF6B HALFWIDTH KATAKANA LETTER SMALL O +FF6C HALFWIDTH KATAKANA LETTER SMALL YA +FF6D HALFWIDTH KATAKANA LETTER SMALL YU +FF6E HALFWIDTH KATAKANA LETTER SMALL YO +FF6F HALFWIDTH KATAKANA LETTER SMALL TU +FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文文<br/>&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may appear at line start if de and loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cj-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cj-normal.html new file mode 100644 index 00000000000..e98d4a20cb1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cj-normal.html @@ -0,0 +1,119 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>Line-break:normal, Conditional Japanese Starter (CJ) (de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="The browser allows a conditional Japanese starter at the beginning of a line; the langauge not being Chinese or Japanese makes no difference."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `3041 HIRAGANA LETTER SMALL A +3043 HIRAGANA LETTER SMALL I +3045 HIRAGANA LETTER SMALL U +3047 HIRAGANA LETTER SMALL E +3049 HIRAGANA LETTER SMALL O +3063 HIRAGANA LETTER SMALL TU +3083 HIRAGANA LETTER SMALL YA +3085 HIRAGANA LETTER SMALL YU +3087 HIRAGANA LETTER SMALL YO +308E HIRAGANA LETTER SMALL WA +3095 HIRAGANA LETTER SMALL KA +3096 HIRAGANA LETTER SMALL KE +30A1 KATAKANA LETTER SMALL A +30A3 KATAKANA LETTER SMALL I +30A5 KATAKANA LETTER SMALL U +30A7 KATAKANA LETTER SMALL E +30A9 KATAKANA LETTER SMALL O +30C3 KATAKANA LETTER SMALL TU +30E3 KATAKANA LETTER SMALL YA +30E5 KATAKANA LETTER SMALL YU +30E7 KATAKANA LETTER SMALL YO +30EE KATAKANA LETTER SMALL WA +30F5 KATAKANA LETTER SMALL KA +30F6 KATAKANA LETTER SMALL KE +30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK +31F0 KATAKANA LETTER SMALL KU +31F1 KATAKANA LETTER SMALL SI +31F2 KATAKANA LETTER SMALL SU +31F3 KATAKANA LETTER SMALL TO +31F4 KATAKANA LETTER SMALL NU +31F5 KATAKANA LETTER SMALL HA +31F6 KATAKANA LETTER SMALL HI +31F7 KATAKANA LETTER SMALL HU +31F8 KATAKANA LETTER SMALL HE +31F9 KATAKANA LETTER SMALL HO +31FA KATAKANA LETTER SMALL MU +31FB KATAKANA LETTER SMALL RA +31FC KATAKANA LETTER SMALL RI +31FD KATAKANA LETTER SMALL RU +31FE KATAKANA LETTER SMALL RE +31FF KATAKANA LETTER SMALL RO +FF67 HALFWIDTH KATAKANA LETTER SMALL A +FF68 HALFWIDTH KATAKANA LETTER SMALL I +FF69 HALFWIDTH KATAKANA LETTER SMALL U +FF6A HALFWIDTH KATAKANA LETTER SMALL E +FF6B HALFWIDTH KATAKANA LETTER SMALL O +FF6C HALFWIDTH KATAKANA LETTER SMALL YA +FF6D HALFWIDTH KATAKANA LETTER SMALL YU +FF6E HALFWIDTH KATAKANA LETTER SMALL YO +FF6F HALFWIDTH KATAKANA LETTER SMALL TU +FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文文<br/>&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may appear at line start if de and normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cj-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cj-strict.html new file mode 100644 index 00000000000..29810f2a350 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cj-strict.html @@ -0,0 +1,119 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>line-break:strict, Conditional Japanese Starter (CJ) (de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="With line-break:strict, a browser will NOT allow a conditional Japanese starter at the beginning of a line; the langauge not being Chinese or Japanese makes no difference."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `3041 HIRAGANA LETTER SMALL A +3043 HIRAGANA LETTER SMALL I +3045 HIRAGANA LETTER SMALL U +3047 HIRAGANA LETTER SMALL E +3049 HIRAGANA LETTER SMALL O +3063 HIRAGANA LETTER SMALL TU +3083 HIRAGANA LETTER SMALL YA +3085 HIRAGANA LETTER SMALL YU +3087 HIRAGANA LETTER SMALL YO +308E HIRAGANA LETTER SMALL WA +3095 HIRAGANA LETTER SMALL KA +3096 HIRAGANA LETTER SMALL KE +30A1 KATAKANA LETTER SMALL A +30A3 KATAKANA LETTER SMALL I +30A5 KATAKANA LETTER SMALL U +30A7 KATAKANA LETTER SMALL E +30A9 KATAKANA LETTER SMALL O +30C3 KATAKANA LETTER SMALL TU +30E3 KATAKANA LETTER SMALL YA +30E5 KATAKANA LETTER SMALL YU +30E7 KATAKANA LETTER SMALL YO +30EE KATAKANA LETTER SMALL WA +30F5 KATAKANA LETTER SMALL KA +30F6 KATAKANA LETTER SMALL KE +30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK +31F0 KATAKANA LETTER SMALL KU +31F1 KATAKANA LETTER SMALL SI +31F2 KATAKANA LETTER SMALL SU +31F3 KATAKANA LETTER SMALL TO +31F4 KATAKANA LETTER SMALL NU +31F5 KATAKANA LETTER SMALL HA +31F6 KATAKANA LETTER SMALL HI +31F7 KATAKANA LETTER SMALL HU +31F8 KATAKANA LETTER SMALL HE +31F9 KATAKANA LETTER SMALL HO +31FA KATAKANA LETTER SMALL MU +31FB KATAKANA LETTER SMALL RA +31FC KATAKANA LETTER SMALL RI +31FD KATAKANA LETTER SMALL RU +31FE KATAKANA LETTER SMALL RE +31FF KATAKANA LETTER SMALL RO +FF67 HALFWIDTH KATAKANA LETTER SMALL A +FF68 HALFWIDTH KATAKANA LETTER SMALL I +FF69 HALFWIDTH KATAKANA LETTER SMALL U +FF6A HALFWIDTH KATAKANA LETTER SMALL E +FF6B HALFWIDTH KATAKANA LETTER SMALL O +FF6C HALFWIDTH KATAKANA LETTER SMALL YA +FF6D HALFWIDTH KATAKANA LETTER SMALL YU +FF6E HALFWIDTH KATAKANA LETTER SMALL YO +FF6F HALFWIDTH KATAKANA LETTER SMALL TU +FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cpm-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cpm-loose.html new file mode 100644 index 00000000000..9dffd854891 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cpm-loose.html @@ -0,0 +1,78 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: centred punctuation (loose,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:loose, a browser will NOT allow a break before one of the centred punctuation characters listed."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `30FB KATAKANA MIDDLE DOT +FF1A FULLWIDTH COLON +FF1B FULLWIDTH SEMICOLON +FF65 HALFWIDTH KATAKANA MIDDLE DOT +203C DOUBLE EXCLAMATION MARK +2047 DOUBLE QUESTION MARK +2048 QUESTION EXCLAMATION MARK +2049 EXCLAMATION QUESTION MARK +FF01 FULLWIDTH EXCLAMATION MARK +FF1F FULLWIDTH QUESTION MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cpm-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cpm-normal.html new file mode 100644 index 00000000000..9c0af13806c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cpm-normal.html @@ -0,0 +1,78 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: centred punctuation (normal,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:normal, a browser will NOT allow a break before one of the centred punctuation characters listed."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `30FB KATAKANA MIDDLE DOT +FF1A FULLWIDTH COLON +FF1B FULLWIDTH SEMICOLON +FF65 HALFWIDTH KATAKANA MIDDLE DOT +203C DOUBLE EXCLAMATION MARK +2047 DOUBLE QUESTION MARK +2048 QUESTION EXCLAMATION MARK +2049 EXCLAMATION QUESTION MARK +FF01 FULLWIDTH EXCLAMATION MARK +FF1F FULLWIDTH QUESTION MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cpm-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cpm-strict.html new file mode 100644 index 00000000000..d573bac7d6b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-cpm-strict.html @@ -0,0 +1,78 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: centred punctuation (strict,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:strict, a browser will NOT allow a break before one of the centred punctuation characters listed."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `30FB KATAKANA MIDDLE DOT +FF1A FULLWIDTH COLON +FF1B FULLWIDTH SEMICOLON +FF65 HALFWIDTH KATAKANA MIDDLE DOT +203C DOUBLE EXCLAMATION MARK +2047 DOUBLE QUESTION MARK +2048 QUESTION EXCLAMATION MARK +2049 EXCLAMATION QUESTION MARK +FF01 FULLWIDTH EXCLAMATION MARK +FF1F FULLWIDTH QUESTION MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-loose.html new file mode 100644 index 00000000000..80b5bb0c72c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-loose.html @@ -0,0 +1,72 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS3 Text, linebreaks: hyphens (loose,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:loose, a browser will NOT allow a break before a hyphen."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `2010 HYPHEN +2013 EN DASH +301C WAVE DASH +30A0 KATAKANA-HIRAGANA DOUBLE HYPHEN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-normal.html new file mode 100644 index 00000000000..6d6043031e0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-normal.html @@ -0,0 +1,72 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS3 Text, linebreaks: hyphens (normal,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:normal, a browser will NOT allow a break before a hyphen."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `2010 HYPHEN +2013 EN DASH +301C WAVE DASH +30A0 KATAKANA-HIRAGANA DOUBLE HYPHEN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-strict.html new file mode 100644 index 00000000000..e0f60cd36fe --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-hyphens-strict.html @@ -0,0 +1,72 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS3 Text, linebreaks: hyphens (strict,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:strict, a browser will NOT allow a break before a hyphen."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `2010 HYPHEN +2013 EN DASH +301C WAVE DASH +30A0 KATAKANA-HIRAGANA DOUBLE HYPHEN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-in-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-in-loose.html new file mode 100644 index 00000000000..fff23f36df8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-in-loose.html @@ -0,0 +1,73 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: IN (loose,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:loose, a browser allows a break before an inseparable character."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `2024 ONE DOT LEADER +2025 TWO DOT LEADER +2026 HORIZONTAL ELLIPSIS +22EF MIDLINE HORIZONTAL ELLIPSIS +FE19 PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文文<br/>&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may appear at line start if de and loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-in-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-in-normal.html new file mode 100644 index 00000000000..d000d8eb16d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-in-normal.html @@ -0,0 +1,73 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: IN (normal,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:normal, a browser will NOT allow a break before an inseparable character."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `2024 ONE DOT LEADER +2025 TWO DOT LEADER +2026 HORIZONTAL ELLIPSIS +22EF MIDLINE HORIZONTAL ELLIPSIS +FE19 PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-in-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-in-strict.html new file mode 100644 index 00000000000..79d6e12cc8e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-in-strict.html @@ -0,0 +1,73 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: IN (strict,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:strict, a browser will NOT allow a break before an inseparable character."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `2024 ONE DOT LEADER +2025 TWO DOT LEADER +2026 HORIZONTAL ELLIPSIS +22EF MIDLINE HORIZONTAL ELLIPSIS +FE19 PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-iteration-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-iteration-loose.html new file mode 100644 index 00000000000..ff8ef05b14c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-iteration-loose.html @@ -0,0 +1,74 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: iteration (loose,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:loose, a browser allows a break before an iteration mark."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `3005 IDEOGRAPHIC ITERATION MARK +303B VERTICAL IDEOGRAPHIC ITERATION MARK +309D HIRAGANA ITERATION MARK +309E HIRAGANA VOICED ITERATION MARK +30FD KATAKANA ITERATION MARK +30FE KATAKANA VOICED ITERATION MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文文<br/>&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may appear at line start if de and loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-iteration-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-iteration-normal.html new file mode 100644 index 00000000000..c5913821e5b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-iteration-normal.html @@ -0,0 +1,74 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: iteration (normal,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:normal, a browser will NOT allow a break before an iteration mark."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `3005 IDEOGRAPHIC ITERATION MARK +303B VERTICAL IDEOGRAPHIC ITERATION MARK +309D HIRAGANA ITERATION MARK +309E HIRAGANA VOICED ITERATION MARK +30FD KATAKANA ITERATION MARK +30FE KATAKANA VOICED ITERATION MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-iteration-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-iteration-strict.html new file mode 100644 index 00000000000..46c0fe3caac --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-iteration-strict.html @@ -0,0 +1,74 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: iteration (strict,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:strict, a browser will NOT allow a break before an iteration mark."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `3005 IDEOGRAPHIC ITERATION MARK +303B VERTICAL IDEOGRAPHIC ITERATION MARK +309D HIRAGANA ITERATION MARK +309E HIRAGANA VOICED ITERATION MARK +30FD KATAKANA ITERATION MARK +30FE KATAKANA VOICED ITERATION MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-po-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-po-loose.html new file mode 100644 index 00000000000..0eec96857fd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-po-loose.html @@ -0,0 +1,78 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PO AFW (loose,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:loose, a browser wll NOT allow a break before a PO character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `00B0 DEGREE SIGN +2030 PER MILLE SIGN +2032 PRIME +2033 DOUBLE PRIME +2035 REVERSED PRIME +2103 DEGREE CELSIUS +2109 DEGREE FAHRENHEIT +FE6A SMALL PERCENT SIGN +FF05 FULLWIDTH PERCENT SIGN +FFE0 FULLWIDTH CENT SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-po-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-po-normal.html new file mode 100644 index 00000000000..6043912cded --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-po-normal.html @@ -0,0 +1,78 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PO AFW (normal,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:normal, a browser will NOT allow a break before a PO character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `00B0 DEGREE SIGN +2030 PER MILLE SIGN +2032 PRIME +2033 DOUBLE PRIME +2035 REVERSED PRIME +2103 DEGREE CELSIUS +2109 DEGREE FAHRENHEIT +FE6A SMALL PERCENT SIGN +FF05 FULLWIDTH PERCENT SIGN +FFE0 FULLWIDTH CENT SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-po-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-po-strict.html new file mode 100644 index 00000000000..8c9387fa044 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-po-strict.html @@ -0,0 +1,78 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PO AFW (strict,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:strict, a browser will NOT allow a break before a PO character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `00B0 DEGREE SIGN +2030 PER MILLE SIGN +2032 PRIME +2033 DOUBLE PRIME +2035 REVERSED PRIME +2103 DEGREE CELSIUS +2109 DEGREE FAHRENHEIT +FE6A SMALL PERCENT SIGN +FF05 FULLWIDTH PERCENT SIGN +FFE0 FULLWIDTH CENT SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-pr-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-pr-loose.html new file mode 100644 index 00000000000..8b2fd1c038c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-pr-loose.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PR AFW (loose,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:loose, a browser wll NOT allow a break before a PR character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `00B1 PLUS-MINUS SIGN +20AC EURO SIGN +2116 NUMERO SIGN +FE69 SMALL DOLLAR SIGN +FF04 FULLWIDTH DOLLAR SIGN +FFE1 FULLWIDTH POUND SIGN +FFE5 FULLWIDTH YEN SIGN +FFE6 FULLWIDTH WON SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-pr-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-pr-normal.html new file mode 100644 index 00000000000..2da6d3b0af6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-pr-normal.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PR AFW (normal,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:normal, a browser will NOT allow a break before a PR character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `00B1 PLUS-MINUS SIGN +20AC EURO SIGN +2116 NUMERO SIGN +FE69 SMALL DOLLAR SIGN +FF04 FULLWIDTH DOLLAR SIGN +FFE1 FULLWIDTH POUND SIGN +FFE5 FULLWIDTH YEN SIGN +FFE6 FULLWIDTH WON SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-pr-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-pr-strict.html new file mode 100644 index 00000000000..99cf5c5fbef --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/other-lang/css-text-line-break-de-pr-strict.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PR AFW (strict,de)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is neither Japanese nor Chinese, and line-break:strict, a browser will NOT allow a break before a PR character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `00B1 PLUS-MINUS SIGN +20AC EURO SIGN +2116 NUMERO SIGN +FE69 SMALL DOLLAR SIGN +FF04 FULLWIDTH DOLLAR SIGN +FFE1 FULLWIDTH POUND SIGN +FFE5 FULLWIDTH YEN SIGN +FFE6 FULLWIDTH WON SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="de">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="de">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if de and strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cj-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cj-loose.html new file mode 100644 index 00000000000..d6d0a1b3493 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cj-loose.html @@ -0,0 +1,119 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>Line-break:loose, Conditional Japanese Starter (CJ) (unknown lang)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="The browser allows a conditional Japanese starter at the beginning of a line; the langauge being unkonwn makes no difference."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `3041 HIRAGANA LETTER SMALL A +3043 HIRAGANA LETTER SMALL I +3045 HIRAGANA LETTER SMALL U +3047 HIRAGANA LETTER SMALL E +3049 HIRAGANA LETTER SMALL O +3063 HIRAGANA LETTER SMALL TU +3083 HIRAGANA LETTER SMALL YA +3085 HIRAGANA LETTER SMALL YU +3087 HIRAGANA LETTER SMALL YO +308E HIRAGANA LETTER SMALL WA +3095 HIRAGANA LETTER SMALL KA +3096 HIRAGANA LETTER SMALL KE +30A1 KATAKANA LETTER SMALL A +30A3 KATAKANA LETTER SMALL I +30A5 KATAKANA LETTER SMALL U +30A7 KATAKANA LETTER SMALL E +30A9 KATAKANA LETTER SMALL O +30C3 KATAKANA LETTER SMALL TU +30E3 KATAKANA LETTER SMALL YA +30E5 KATAKANA LETTER SMALL YU +30E7 KATAKANA LETTER SMALL YO +30EE KATAKANA LETTER SMALL WA +30F5 KATAKANA LETTER SMALL KA +30F6 KATAKANA LETTER SMALL KE +30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK +31F0 KATAKANA LETTER SMALL KU +31F1 KATAKANA LETTER SMALL SI +31F2 KATAKANA LETTER SMALL SU +31F3 KATAKANA LETTER SMALL TO +31F4 KATAKANA LETTER SMALL NU +31F5 KATAKANA LETTER SMALL HA +31F6 KATAKANA LETTER SMALL HI +31F7 KATAKANA LETTER SMALL HU +31F8 KATAKANA LETTER SMALL HE +31F9 KATAKANA LETTER SMALL HO +31FA KATAKANA LETTER SMALL MU +31FB KATAKANA LETTER SMALL RA +31FC KATAKANA LETTER SMALL RI +31FD KATAKANA LETTER SMALL RU +31FE KATAKANA LETTER SMALL RE +31FF KATAKANA LETTER SMALL RO +FF67 HALFWIDTH KATAKANA LETTER SMALL A +FF68 HALFWIDTH KATAKANA LETTER SMALL I +FF69 HALFWIDTH KATAKANA LETTER SMALL U +FF6A HALFWIDTH KATAKANA LETTER SMALL E +FF6B HALFWIDTH KATAKANA LETTER SMALL O +FF6C HALFWIDTH KATAKANA LETTER SMALL YA +FF6D HALFWIDTH KATAKANA LETTER SMALL YU +FF6E HALFWIDTH KATAKANA LETTER SMALL YO +FF6F HALFWIDTH KATAKANA LETTER SMALL TU +FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文文<br/>&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may appear at line start if loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cj-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cj-normal.html new file mode 100644 index 00000000000..548fa173982 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cj-normal.html @@ -0,0 +1,119 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>Line-break:normal, Conditional Japanese Starter (CJ) (unknown lang)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="The browser allows a conditional Japanese starter at the beginning of a line; the langauge being unknown makes no difference."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `3041 HIRAGANA LETTER SMALL A +3043 HIRAGANA LETTER SMALL I +3045 HIRAGANA LETTER SMALL U +3047 HIRAGANA LETTER SMALL E +3049 HIRAGANA LETTER SMALL O +3063 HIRAGANA LETTER SMALL TU +3083 HIRAGANA LETTER SMALL YA +3085 HIRAGANA LETTER SMALL YU +3087 HIRAGANA LETTER SMALL YO +308E HIRAGANA LETTER SMALL WA +3095 HIRAGANA LETTER SMALL KA +3096 HIRAGANA LETTER SMALL KE +30A1 KATAKANA LETTER SMALL A +30A3 KATAKANA LETTER SMALL I +30A5 KATAKANA LETTER SMALL U +30A7 KATAKANA LETTER SMALL E +30A9 KATAKANA LETTER SMALL O +30C3 KATAKANA LETTER SMALL TU +30E3 KATAKANA LETTER SMALL YA +30E5 KATAKANA LETTER SMALL YU +30E7 KATAKANA LETTER SMALL YO +30EE KATAKANA LETTER SMALL WA +30F5 KATAKANA LETTER SMALL KA +30F6 KATAKANA LETTER SMALL KE +30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK +31F0 KATAKANA LETTER SMALL KU +31F1 KATAKANA LETTER SMALL SI +31F2 KATAKANA LETTER SMALL SU +31F3 KATAKANA LETTER SMALL TO +31F4 KATAKANA LETTER SMALL NU +31F5 KATAKANA LETTER SMALL HA +31F6 KATAKANA LETTER SMALL HI +31F7 KATAKANA LETTER SMALL HU +31F8 KATAKANA LETTER SMALL HE +31F9 KATAKANA LETTER SMALL HO +31FA KATAKANA LETTER SMALL MU +31FB KATAKANA LETTER SMALL RA +31FC KATAKANA LETTER SMALL RI +31FD KATAKANA LETTER SMALL RU +31FE KATAKANA LETTER SMALL RE +31FF KATAKANA LETTER SMALL RO +FF67 HALFWIDTH KATAKANA LETTER SMALL A +FF68 HALFWIDTH KATAKANA LETTER SMALL I +FF69 HALFWIDTH KATAKANA LETTER SMALL U +FF6A HALFWIDTH KATAKANA LETTER SMALL E +FF6B HALFWIDTH KATAKANA LETTER SMALL O +FF6C HALFWIDTH KATAKANA LETTER SMALL YA +FF6D HALFWIDTH KATAKANA LETTER SMALL YU +FF6E HALFWIDTH KATAKANA LETTER SMALL YO +FF6F HALFWIDTH KATAKANA LETTER SMALL TU +FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文文<br/>&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may appear at line start if normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cj-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cj-strict.html new file mode 100644 index 00000000000..a4e871789a3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cj-strict.html @@ -0,0 +1,119 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>line-break:strict, Conditional Japanese Starter (CJ) (language unknown)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="With line-break:strict, a browser will NOT allow a conditional Japanese starter at the beginning of a line; the langauge being unknown makes no difference."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `3041 HIRAGANA LETTER SMALL A +3043 HIRAGANA LETTER SMALL I +3045 HIRAGANA LETTER SMALL U +3047 HIRAGANA LETTER SMALL E +3049 HIRAGANA LETTER SMALL O +3063 HIRAGANA LETTER SMALL TU +3083 HIRAGANA LETTER SMALL YA +3085 HIRAGANA LETTER SMALL YU +3087 HIRAGANA LETTER SMALL YO +308E HIRAGANA LETTER SMALL WA +3095 HIRAGANA LETTER SMALL KA +3096 HIRAGANA LETTER SMALL KE +30A1 KATAKANA LETTER SMALL A +30A3 KATAKANA LETTER SMALL I +30A5 KATAKANA LETTER SMALL U +30A7 KATAKANA LETTER SMALL E +30A9 KATAKANA LETTER SMALL O +30C3 KATAKANA LETTER SMALL TU +30E3 KATAKANA LETTER SMALL YA +30E5 KATAKANA LETTER SMALL YU +30E7 KATAKANA LETTER SMALL YO +30EE KATAKANA LETTER SMALL WA +30F5 KATAKANA LETTER SMALL KA +30F6 KATAKANA LETTER SMALL KE +30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK +31F0 KATAKANA LETTER SMALL KU +31F1 KATAKANA LETTER SMALL SI +31F2 KATAKANA LETTER SMALL SU +31F3 KATAKANA LETTER SMALL TO +31F4 KATAKANA LETTER SMALL NU +31F5 KATAKANA LETTER SMALL HA +31F6 KATAKANA LETTER SMALL HI +31F7 KATAKANA LETTER SMALL HU +31F8 KATAKANA LETTER SMALL HE +31F9 KATAKANA LETTER SMALL HO +31FA KATAKANA LETTER SMALL MU +31FB KATAKANA LETTER SMALL RA +31FC KATAKANA LETTER SMALL RI +31FD KATAKANA LETTER SMALL RU +31FE KATAKANA LETTER SMALL RE +31FF KATAKANA LETTER SMALL RO +FF67 HALFWIDTH KATAKANA LETTER SMALL A +FF68 HALFWIDTH KATAKANA LETTER SMALL I +FF69 HALFWIDTH KATAKANA LETTER SMALL U +FF6A HALFWIDTH KATAKANA LETTER SMALL E +FF6B HALFWIDTH KATAKANA LETTER SMALL O +FF6C HALFWIDTH KATAKANA LETTER SMALL YA +FF6D HALFWIDTH KATAKANA LETTER SMALL YU +FF6E HALFWIDTH KATAKANA LETTER SMALL YO +FF6F HALFWIDTH KATAKANA LETTER SMALL TU +FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cpm-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cpm-loose.html new file mode 100644 index 00000000000..3d4cb261289 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cpm-loose.html @@ -0,0 +1,78 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: centred punctuation (loose,unknown)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unknown, and line-break:loose, a browser will NOT allow a break before one of the centred punctuation characters listed."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `30FB KATAKANA MIDDLE DOT +FF1A FULLWIDTH COLON +FF1B FULLWIDTH SEMICOLON +FF65 HALFWIDTH KATAKANA MIDDLE DOT +203C DOUBLE EXCLAMATION MARK +2047 DOUBLE QUESTION MARK +2048 QUESTION EXCLAMATION MARK +2049 EXCLAMATION QUESTION MARK +FF01 FULLWIDTH EXCLAMATION MARK +FF1F FULLWIDTH QUESTION MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if lang unknonw loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cpm-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cpm-normal.html new file mode 100644 index 00000000000..417973b0bbf --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cpm-normal.html @@ -0,0 +1,78 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: centred punctuation (normal,unknown)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unknown, and line-break:normal, a browser will NOT allow a break before one of the centred punctuation characters listed."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `30FB KATAKANA MIDDLE DOT +FF1A FULLWIDTH COLON +FF1B FULLWIDTH SEMICOLON +FF65 HALFWIDTH KATAKANA MIDDLE DOT +203C DOUBLE EXCLAMATION MARK +2047 DOUBLE QUESTION MARK +2048 QUESTION EXCLAMATION MARK +2049 EXCLAMATION QUESTION MARK +FF01 FULLWIDTH EXCLAMATION MARK +FF1F FULLWIDTH QUESTION MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if lang unknown and normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cpm-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cpm-strict.html new file mode 100644 index 00000000000..c6685dfe79d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-cpm-strict.html @@ -0,0 +1,78 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: centred punctuation (strict,unknown)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unkonwn, and line-break:strict, a browser will NOT allow a break before one of the centred punctuation characters listed."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `30FB KATAKANA MIDDLE DOT +FF1A FULLWIDTH COLON +FF1B FULLWIDTH SEMICOLON +FF65 HALFWIDTH KATAKANA MIDDLE DOT +203C DOUBLE EXCLAMATION MARK +2047 DOUBLE QUESTION MARK +2048 QUESTION EXCLAMATION MARK +2049 EXCLAMATION QUESTION MARK +FF01 FULLWIDTH EXCLAMATION MARK +FF1F FULLWIDTH QUESTION MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if lang unknown and strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-loose.html new file mode 100644 index 00000000000..f15f2632ebe --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-loose.html @@ -0,0 +1,72 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS3 Text, linebreaks: hyphens (loose,unkonwn)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unknown, and line-break:loose, a browser will NOT allow a break before a hyphen."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `2010 HYPHEN +2013 EN DASH +301C WAVE DASH +30A0 KATAKANA-HIRAGANA DOUBLE HYPHEN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if lang unknown and loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-normal.html new file mode 100644 index 00000000000..4e9dc5607b4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-normal.html @@ -0,0 +1,72 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS3 Text, linebreaks: hyphens (normal,unknown)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unkonwn, and line-break:normal, a browser will NOT allow a break before a hyphen."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `2010 HYPHEN +2013 EN DASH +301C WAVE DASH +30A0 KATAKANA-HIRAGANA DOUBLE HYPHEN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if lang unkonwn and normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-strict.html new file mode 100644 index 00000000000..595cd5df2b6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-hyphens-strict.html @@ -0,0 +1,72 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS3 Text, linebreaks: hyphens (strict,unknown)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unkonwn, and line-break:strict, a browser will NOT allow a break before a hyphen."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `2010 HYPHEN +2013 EN DASH +301C WAVE DASH +30A0 KATAKANA-HIRAGANA DOUBLE HYPHEN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if lang unknown and strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-in-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-in-loose.html new file mode 100644 index 00000000000..c507f78e6e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-in-loose.html @@ -0,0 +1,73 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: IN (loose,unknown)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unknown, and line-break:loose, a browser allows a break before an inseparable character."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `2024 ONE DOT LEADER +2025 TWO DOT LEADER +2026 HORIZONTAL ELLIPSIS +22EF MIDLINE HORIZONTAL ELLIPSIS +FE19 PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文文<br/>&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may appear at line start if loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-in-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-in-normal.html new file mode 100644 index 00000000000..4e8d9617baf --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-in-normal.html @@ -0,0 +1,73 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: IN (normal,unknown)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unknown, and line-break:normal, a browser will NOT allow a break before an inseparable character."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `2024 ONE DOT LEADER +2025 TWO DOT LEADER +2026 HORIZONTAL ELLIPSIS +22EF MIDLINE HORIZONTAL ELLIPSIS +FE19 PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-in-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-in-strict.html new file mode 100644 index 00000000000..a1c3a855041 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-in-strict.html @@ -0,0 +1,73 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: IN (strict,unknown)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unknown, and line-break:strict, a browser will NOT allow a break before an inseparable character."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `2024 ONE DOT LEADER +2025 TWO DOT LEADER +2026 HORIZONTAL ELLIPSIS +22EF MIDLINE HORIZONTAL ELLIPSIS +FE19 PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-iteration-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-iteration-loose.html new file mode 100644 index 00000000000..420a7b6f07c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-iteration-loose.html @@ -0,0 +1,74 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: iteration (loose,unknown)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is uknown, and line-break:loose, a browser allows a break before an iteration mark."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `3005 IDEOGRAPHIC ITERATION MARK +303B VERTICAL IDEOGRAPHIC ITERATION MARK +309D HIRAGANA ITERATION MARK +309E HIRAGANA VOICED ITERATION MARK +30FD KATAKANA ITERATION MARK +30FE KATAKANA VOICED ITERATION MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文文<br/>&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may appear at line start if lang unknown and loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-iteration-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-iteration-normal.html new file mode 100644 index 00000000000..9d7b2c032d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-iteration-normal.html @@ -0,0 +1,74 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: iteration (normal,unknown)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unknown, and line-break:normal, a browser will NOT allow a break before an iteration mark."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `3005 IDEOGRAPHIC ITERATION MARK +303B VERTICAL IDEOGRAPHIC ITERATION MARK +309D HIRAGANA ITERATION MARK +309E HIRAGANA VOICED ITERATION MARK +30FD KATAKANA ITERATION MARK +30FE KATAKANA VOICED ITERATION MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if lang unknown and normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-iteration-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-iteration-strict.html new file mode 100644 index 00000000000..54c7559d109 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-iteration-strict.html @@ -0,0 +1,74 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: iteration (strict,unknown)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unknown, and line-break:strict, a browser will NOT allow a break before an iteration mark."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `3005 IDEOGRAPHIC ITERATION MARK +303B VERTICAL IDEOGRAPHIC ITERATION MARK +309D HIRAGANA ITERATION MARK +309E HIRAGANA VOICED ITERATION MARK +30FD KATAKANA ITERATION MARK +30FE KATAKANA VOICED ITERATION MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if lang unknown and strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-po-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-po-loose.html new file mode 100644 index 00000000000..e635075a415 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-po-loose.html @@ -0,0 +1,78 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PO AFW (loose,unknown)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unknown, and line-break:loose, a browser will NOT allow a break before a PO character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `00B0 DEGREE SIGN +2030 PER MILLE SIGN +2032 PRIME +2033 DOUBLE PRIME +2035 REVERSED PRIME +2103 DEGREE CELSIUS +2109 DEGREE FAHRENHEIT +FE6A SMALL PERCENT SIGN +FF05 FULLWIDTH PERCENT SIGN +FFE0 FULLWIDTH CENT SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-po-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-po-normal.html new file mode 100644 index 00000000000..46e7472208e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-po-normal.html @@ -0,0 +1,78 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PO AFW (normal,unknown)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unkonwn, and line-break:normal, a browser will NOT allow a break before a PO character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `00B0 DEGREE SIGN +2030 PER MILLE SIGN +2032 PRIME +2033 DOUBLE PRIME +2035 REVERSED PRIME +2103 DEGREE CELSIUS +2109 DEGREE FAHRENHEIT +FE6A SMALL PERCENT SIGN +FF05 FULLWIDTH PERCENT SIGN +FFE0 FULLWIDTH CENT SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-po-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-po-strict.html new file mode 100644 index 00000000000..61fd7b7ec5c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-po-strict.html @@ -0,0 +1,78 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PO AFW (strict,unkonwn)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unknown, and line-break:strict, a browser will NOT allow a break before a PO character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `00B0 DEGREE SIGN +2030 PER MILLE SIGN +2032 PRIME +2033 DOUBLE PRIME +2035 REVERSED PRIME +2103 DEGREE CELSIUS +2109 DEGREE FAHRENHEIT +FE6A SMALL PERCENT SIGN +FF05 FULLWIDTH PERCENT SIGN +FFE0 FULLWIDTH CENT SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-pr-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-pr-loose.html new file mode 100644 index 00000000000..b21853f386e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-pr-loose.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PR AFW (loose,unknown)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unknown, and line-break:loose, a browser will NOT allow a break before a PR character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `00B1 PLUS-MINUS SIGN +20AC EURO SIGN +2116 NUMERO SIGN +FE69 SMALL DOLLAR SIGN +FF04 FULLWIDTH DOLLAR SIGN +FFE1 FULLWIDTH POUND SIGN +FFE5 FULLWIDTH YEN SIGN +FFE6 FULLWIDTH WON SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-pr-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-pr-normal.html new file mode 100644 index 00000000000..337cf8f85db --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-pr-normal.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PR AFW (normal,unknown)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unkonwn, and line-break:normal, a browser will NOT allow a break before a PR character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `00B1 PLUS-MINUS SIGN +20AC EURO SIGN +2116 NUMERO SIGN +FE69 SMALL DOLLAR SIGN +FF04 FULLWIDTH DOLLAR SIGN +FFE1 FULLWIDTH POUND SIGN +FFE5 FULLWIDTH YEN SIGN +FFE6 FULLWIDTH WON SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-pr-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-pr-strict.html new file mode 100644 index 00000000000..d25fa6857d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/unknown-lang/css-text-line-break-pr-strict.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PR AFW (strict,unkonwn)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is unknown, and line-break:strict, a browser will NOT allow a break before a PR character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `00B1 PLUS-MINUS SIGN +20AC EURO SIGN +2116 NUMERO SIGN +FE69 SMALL DOLLAR SIGN +FF04 FULLWIDTH DOLLAR SIGN +FFE1 FULLWIDTH POUND SIGN +FFE5 FULLWIDTH YEN SIGN +FFE6 FULLWIDTH WON SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-cj-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-cj-loose.html new file mode 100644 index 00000000000..a131395e1da --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-cj-loose.html @@ -0,0 +1,119 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>Line-break:loose, Conditional Japanese Starter (CJ) (zh)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="The browser allows a conditional Japanese starter at the beginning of a line; the langauge being chinese makes no difference."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `3041 HIRAGANA LETTER SMALL A +3043 HIRAGANA LETTER SMALL I +3045 HIRAGANA LETTER SMALL U +3047 HIRAGANA LETTER SMALL E +3049 HIRAGANA LETTER SMALL O +3063 HIRAGANA LETTER SMALL TU +3083 HIRAGANA LETTER SMALL YA +3085 HIRAGANA LETTER SMALL YU +3087 HIRAGANA LETTER SMALL YO +308E HIRAGANA LETTER SMALL WA +3095 HIRAGANA LETTER SMALL KA +3096 HIRAGANA LETTER SMALL KE +30A1 KATAKANA LETTER SMALL A +30A3 KATAKANA LETTER SMALL I +30A5 KATAKANA LETTER SMALL U +30A7 KATAKANA LETTER SMALL E +30A9 KATAKANA LETTER SMALL O +30C3 KATAKANA LETTER SMALL TU +30E3 KATAKANA LETTER SMALL YA +30E5 KATAKANA LETTER SMALL YU +30E7 KATAKANA LETTER SMALL YO +30EE KATAKANA LETTER SMALL WA +30F5 KATAKANA LETTER SMALL KA +30F6 KATAKANA LETTER SMALL KE +30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK +31F0 KATAKANA LETTER SMALL KU +31F1 KATAKANA LETTER SMALL SI +31F2 KATAKANA LETTER SMALL SU +31F3 KATAKANA LETTER SMALL TO +31F4 KATAKANA LETTER SMALL NU +31F5 KATAKANA LETTER SMALL HA +31F6 KATAKANA LETTER SMALL HI +31F7 KATAKANA LETTER SMALL HU +31F8 KATAKANA LETTER SMALL HE +31F9 KATAKANA LETTER SMALL HO +31FA KATAKANA LETTER SMALL MU +31FB KATAKANA LETTER SMALL RA +31FC KATAKANA LETTER SMALL RI +31FD KATAKANA LETTER SMALL RU +31FE KATAKANA LETTER SMALL RE +31FF KATAKANA LETTER SMALL RO +FF67 HALFWIDTH KATAKANA LETTER SMALL A +FF68 HALFWIDTH KATAKANA LETTER SMALL I +FF69 HALFWIDTH KATAKANA LETTER SMALL U +FF6A HALFWIDTH KATAKANA LETTER SMALL E +FF6B HALFWIDTH KATAKANA LETTER SMALL O +FF6C HALFWIDTH KATAKANA LETTER SMALL YA +FF6D HALFWIDTH KATAKANA LETTER SMALL YU +FF6E HALFWIDTH KATAKANA LETTER SMALL YO +FF6F HALFWIDTH KATAKANA LETTER SMALL TU +FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="zh">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="zh">文文文文文文<br/>&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may appear at line start if zh and loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-cj-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-cj-normal.html new file mode 100644 index 00000000000..ff7456b8214 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-cj-normal.html @@ -0,0 +1,119 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>Line-break:normal, Conditional Japanese Starter (CJ) (zh)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="The browser allows a conditional Japanese starter at the beginning of a line; the langauge being chinese makes no difference."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `3041 HIRAGANA LETTER SMALL A +3043 HIRAGANA LETTER SMALL I +3045 HIRAGANA LETTER SMALL U +3047 HIRAGANA LETTER SMALL E +3049 HIRAGANA LETTER SMALL O +3063 HIRAGANA LETTER SMALL TU +3083 HIRAGANA LETTER SMALL YA +3085 HIRAGANA LETTER SMALL YU +3087 HIRAGANA LETTER SMALL YO +308E HIRAGANA LETTER SMALL WA +3095 HIRAGANA LETTER SMALL KA +3096 HIRAGANA LETTER SMALL KE +30A1 KATAKANA LETTER SMALL A +30A3 KATAKANA LETTER SMALL I +30A5 KATAKANA LETTER SMALL U +30A7 KATAKANA LETTER SMALL E +30A9 KATAKANA LETTER SMALL O +30C3 KATAKANA LETTER SMALL TU +30E3 KATAKANA LETTER SMALL YA +30E5 KATAKANA LETTER SMALL YU +30E7 KATAKANA LETTER SMALL YO +30EE KATAKANA LETTER SMALL WA +30F5 KATAKANA LETTER SMALL KA +30F6 KATAKANA LETTER SMALL KE +30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK +31F0 KATAKANA LETTER SMALL KU +31F1 KATAKANA LETTER SMALL SI +31F2 KATAKANA LETTER SMALL SU +31F3 KATAKANA LETTER SMALL TO +31F4 KATAKANA LETTER SMALL NU +31F5 KATAKANA LETTER SMALL HA +31F6 KATAKANA LETTER SMALL HI +31F7 KATAKANA LETTER SMALL HU +31F8 KATAKANA LETTER SMALL HE +31F9 KATAKANA LETTER SMALL HO +31FA KATAKANA LETTER SMALL MU +31FB KATAKANA LETTER SMALL RA +31FC KATAKANA LETTER SMALL RI +31FD KATAKANA LETTER SMALL RU +31FE KATAKANA LETTER SMALL RE +31FF KATAKANA LETTER SMALL RO +FF67 HALFWIDTH KATAKANA LETTER SMALL A +FF68 HALFWIDTH KATAKANA LETTER SMALL I +FF69 HALFWIDTH KATAKANA LETTER SMALL U +FF6A HALFWIDTH KATAKANA LETTER SMALL E +FF6B HALFWIDTH KATAKANA LETTER SMALL O +FF6C HALFWIDTH KATAKANA LETTER SMALL YA +FF6D HALFWIDTH KATAKANA LETTER SMALL YU +FF6E HALFWIDTH KATAKANA LETTER SMALL YO +FF6F HALFWIDTH KATAKANA LETTER SMALL TU +FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="zh">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="zh">文文文文文文<br/>&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may appear at line start if zh and normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-cj-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-cj-strict.html new file mode 100644 index 00000000000..dc752f1086c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-cj-strict.html @@ -0,0 +1,119 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>line-break:strict, Conditional Japanese Starter (CJ) (zh)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="With line-break:strict, a browser will NOT allow a conditional Japanese starter at the beginning of a line; the langauge being chinese makes no difference."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `3041 HIRAGANA LETTER SMALL A +3043 HIRAGANA LETTER SMALL I +3045 HIRAGANA LETTER SMALL U +3047 HIRAGANA LETTER SMALL E +3049 HIRAGANA LETTER SMALL O +3063 HIRAGANA LETTER SMALL TU +3083 HIRAGANA LETTER SMALL YA +3085 HIRAGANA LETTER SMALL YU +3087 HIRAGANA LETTER SMALL YO +308E HIRAGANA LETTER SMALL WA +3095 HIRAGANA LETTER SMALL KA +3096 HIRAGANA LETTER SMALL KE +30A1 KATAKANA LETTER SMALL A +30A3 KATAKANA LETTER SMALL I +30A5 KATAKANA LETTER SMALL U +30A7 KATAKANA LETTER SMALL E +30A9 KATAKANA LETTER SMALL O +30C3 KATAKANA LETTER SMALL TU +30E3 KATAKANA LETTER SMALL YA +30E5 KATAKANA LETTER SMALL YU +30E7 KATAKANA LETTER SMALL YO +30EE KATAKANA LETTER SMALL WA +30F5 KATAKANA LETTER SMALL KA +30F6 KATAKANA LETTER SMALL KE +30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK +31F0 KATAKANA LETTER SMALL KU +31F1 KATAKANA LETTER SMALL SI +31F2 KATAKANA LETTER SMALL SU +31F3 KATAKANA LETTER SMALL TO +31F4 KATAKANA LETTER SMALL NU +31F5 KATAKANA LETTER SMALL HA +31F6 KATAKANA LETTER SMALL HI +31F7 KATAKANA LETTER SMALL HU +31F8 KATAKANA LETTER SMALL HE +31F9 KATAKANA LETTER SMALL HO +31FA KATAKANA LETTER SMALL MU +31FB KATAKANA LETTER SMALL RA +31FC KATAKANA LETTER SMALL RI +31FD KATAKANA LETTER SMALL RU +31FE KATAKANA LETTER SMALL RE +31FF KATAKANA LETTER SMALL RO +FF67 HALFWIDTH KATAKANA LETTER SMALL A +FF68 HALFWIDTH KATAKANA LETTER SMALL I +FF69 HALFWIDTH KATAKANA LETTER SMALL U +FF6A HALFWIDTH KATAKANA LETTER SMALL E +FF6B HALFWIDTH KATAKANA LETTER SMALL O +FF6C HALFWIDTH KATAKANA LETTER SMALL YA +FF6D HALFWIDTH KATAKANA LETTER SMALL YU +FF6E HALFWIDTH KATAKANA LETTER SMALL YO +FF6F HALFWIDTH KATAKANA LETTER SMALL TU +FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="zh">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="zh">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if zh and strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-pr-loose.html b/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-pr-loose.html new file mode 100644 index 00000000000..b56cd28c840 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-pr-loose.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PR AFW (loose,zh)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is Chinese, and line-break:loose, a browser allows a break before a PR character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: loose; } +</style> +<script> +var charlist = `00B1 PLUS-MINUS SIGN +20AC EURO SIGN +2116 NUMERO SIGN +FE69 SMALL DOLLAR SIGN +FF04 FULLWIDTH DOLLAR SIGN +FFE1 FULLWIDTH POUND SIGN +FFE5 FULLWIDTH YEN SIGN +FFE6 FULLWIDTH WON SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="zh">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="zh">文文文文文文<br/>&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may appear at line start if zh and loose'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-pr-normal.html b/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-pr-normal.html new file mode 100644 index 00000000000..198bf28cd7e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-pr-normal.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PR AFW (normal,zh)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is Chinese, and line-break:normal, a browser will NOT allow a break before a PR character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: normal; } +</style> +<script> +var charlist = `00B1 PLUS-MINUS SIGN +20AC EURO SIGN +2116 NUMERO SIGN +FE69 SMALL DOLLAR SIGN +FF04 FULLWIDTH DOLLAR SIGN +FFE1 FULLWIDTH POUND SIGN +FFE5 FULLWIDTH YEN SIGN +FFE6 FULLWIDTH WON SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="zh">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="zh">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if zh and normal'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-pr-strict.html b/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-pr-strict.html new file mode 100644 index 00000000000..c71014b42f9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/i18n/zh/css-text-line-break-zh-pr-strict.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<html lang="en" > +<head> +<meta charset="utf-8"/> +<title>CSS text, linebreaks: PR AFW (strict,zh)</title> +<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="When the language is Chinese, and line-break:strict, a browser will NOT allow a break before a PR character with East Asian Width of A, F, or W."> +<style type="text/css"> +@font-face { + font-family: 'mplus-1p-regular'; + src: url('/fonts/mplus-1p-regular.woff') format('woff'); + } +#wrapper { position: relative; } +.test { color: red; } +.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; } +</style> +<style> +.test { line-break: strict; } +</style> +<script> +var charlist = `00B1 PLUS-MINUS SIGN +20AC EURO SIGN +2116 NUMERO SIGN +FE69 SMALL DOLLAR SIGN +FF04 FULLWIDTH DOLLAR SIGN +FFE1 FULLWIDTH POUND SIGN +FFE5 FULLWIDTH YEN SIGN +FFE6 FULLWIDTH WON SIGN` +</script> +</head> +<body> +<script> +var lines = charlist.split('\n') +var out = '<div id="log"></div>\n' +for (var i=0;i<lines.length;i++) { + // get the data + var firstSpace = lines[i].indexOf(' ') + var hex = lines[i].substr(0,firstSpace) + var name = lines[i].substr(firstSpace) + // make a test + out += '<div class="wrapper"><div>'+hex+'</div>' + + '<div class="test" id="test'+i+'" lang="zh">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' + + '<div class="ref" id="ref'+i+'" lang="zh">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' + + '</div>' + } +function spansNearEnough(counter) { + return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left + - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1; +} + +document.querySelector('body').innerHTML = out +setup({explicit_done: true}); + +document.fonts.ready.then(validate); + +function validate() { + for (i=0;i<lines.length;i++) { + test(function() { + assert_true(spansNearEnough(i)); + }, lines[i]+' may NOT appear at line start if zh and strict'); + // Hide successful tests. + if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none' + } + done(); +} +</script> +<!--Notes: +The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited. + +It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance. +--> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-004.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-004.html index daf8420b393..19b98417b0f 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-004.html +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-004.html @@ -1,4 +1,5 @@ <!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"> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-005.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-005.html index 47f675eda6e..5e286a0d769 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-005.html +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-005.html @@ -1,6 +1,7 @@ <!DOCTYPE html> +<html lang=en> <meta charset="utf-8"> -<title>CSS Text Test: overflow-wrap:break-word + white-space:break-spaces</title> +<title>CSS Text Test: line-break: anywhere</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" title="5.3. Line Breaking Strictness: the line-break property" href="https://www.w3.org/TR/css-text-3/#propdef-line-break"> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-006.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-006.html index de5a43eab44..207cf84f756 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-006.html +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-006.html @@ -1,4 +1,5 @@ <!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"> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-007.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-007.html index 300d9bd9298..b8e4627e7bc 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-007.html +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-007.html @@ -1,6 +1,7 @@ <!DOCTYPE html> +<html lang=en> <meta charset="utf-8"> -<title>CSS Text Test: word-break: break-all</title> +<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 Strictness: the line-break property" href="https://www.w3.org/TR/css-text-3/#propdef-line-break"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-008.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-008.html index a7590a2ee27..6b7fb14f5cf 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-008.html +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-008.html @@ -1,6 +1,7 @@ <!DOCTYPE html> +<html lang=en> <meta charset="utf-8"> -<title>CSS Text Test: word-break: break-all</title> +<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="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property"> <link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://www.w3.org/TR/css-text-3/#propdef-line-break"> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-009.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-009.html index 4cc3f4ee392..6a0ab913330 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-009.html +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-009.html @@ -1,4 +1,5 @@ <!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"> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-010.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-010.html index 6554bf68ce1..19cc7966028 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-010.html +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-010.html @@ -1,4 +1,5 @@ <!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"> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-011.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-011.html index 6cbec13008e..70d9628a6f0 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-011.html +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-011.html @@ -1,6 +1,7 @@ <!DOCTYPE html> +<html lang=en> <meta charset="utf-8"> -<title>CSS Text Test: word-break: break-all</title> +<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 Strictness: the line-break property" href="https://www.w3.org/TR/css-text-3/#propdef-line-break"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-012.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-012.html index 2dfe6071fdf..0c01a0c28ba 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-012.html +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-012.html @@ -1,6 +1,7 @@ <!DOCTYPE html> +<html lang=en> <meta charset="utf-8"> -<title>CSS Text Test: word-break: break-all</title> +<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 Strictness: the line-break property" href="https://www.w3.org/TR/css-text-3/#propdef-line-break"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-013.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-013.html index 2b60ff5c622..9aef864c921 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-013.html +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-013.html @@ -1,6 +1,7 @@ <!DOCTYPE html> +<html lang=en> <meta charset="utf-8"> -<title>CSS Text Test: word-break: break-all</title> +<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 Strictness: the line-break property" href="https://www.w3.org/TR/css-text-3/#propdef-line-break"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-014.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-014.html index 04969bb65a9..ddbeddf12fe 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-014.html +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-014.html @@ -1,6 +1,7 @@ <!DOCTYPE html> +<html lang=en> <meta charset="utf-8"> -<title>CSS Text Test: word-break: break-all</title> +<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 Strictness: the line-break property" href="https://www.w3.org/TR/css-text-3/#propdef-line-break"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-015.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-015.html index 34c261e4372..b0edd4e2982 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-015.html +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-015.html @@ -1,6 +1,7 @@ <!DOCTYPE html> +<html lang=en> <meta charset="utf-8"> -<title>CSS Text Test: word-break: break-all</title> +<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 Strictness: the line-break property" href="https://www.w3.org/TR/css-text-3/#propdef-line-break"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-016.html b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-016.html index 81b565209c6..5f80f52c6ea 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-016.html +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-anywhere-016.html @@ -1,6 +1,7 @@ <!DOCTYPE html> +<html lang=en> <meta charset="utf-8"> -<title>CSS Text Test: word-break: break-all</title> +<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 Strictness: the line-break property" href="https://www.w3.org/TR/css-text-3/#propdef-line-break"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> diff --git a/tests/wpt/web-platform-tests/css/css-text/text-transform/reference/text-transform-fullwidth-006-ref.html b/tests/wpt/web-platform-tests/css/css-text/text-transform/reference/text-transform-fullwidth-006-ref.html new file mode 100644 index 00000000000..3d2f9c7be22 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/text-transform/reference/text-transform-fullwidth-006-ref.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Test Reference</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 50px/1 Ahem; + color: green; +} +</style> + +<p>Test passes if there are two green squares and no red. +<div>x x</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/text-transform/reference/text-transform-fullwidth-007-ref.html b/tests/wpt/web-platform-tests/css/css-text/text-transform/reference/text-transform-fullwidth-007-ref.html new file mode 100644 index 00000000000..b8fc5662bd8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/text-transform/reference/text-transform-fullwidth-007-ref.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Test reference</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 50px/1 Ahem; + color: green; +} +</style> + +<p>Test passes if there are two green squares and no red. +<div>x   x</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/text-transform/text-transform-fullwidth-006.html b/tests/wpt/web-platform-tests/css/css-text/text-transform/text-transform-fullwidth-006.html new file mode 100644 index 00000000000..b0a509758ed --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/text-transform/text-transform-fullwidth-006.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: text-transform:fullwidth and collapsed spaces</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-text-3/#text-transform-property"> +<link rel="match" href="reference/text-transform-fullwidth-006-ref.html"> +<meta name="assert" content="full-width does not transform collapsed U+0020 spaces to U+3000, only the remaining one after collapsing."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { font: 50px/1 Ahem; } +#test { + text-transform: fullwidth; + color: green; +} +#ref { + color: red; + position: absolute; + z-index: -1; +} +</style> + +<p>Test passes if there are two green squares and no red. +<div id=ref>x x</div> +<div id=test>x x</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/text-transform/text-transform-fullwidth-007.html b/tests/wpt/web-platform-tests/css/css-text/text-transform/text-transform-fullwidth-007.html new file mode 100644 index 00000000000..6e081544a19 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/text-transform/text-transform-fullwidth-007.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: text-transform:fullwidth and preserved spaces</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="help" href="https://www.w3.org/TR/css-text-3/#text-transform-property"> +<link rel="match" href="reference/text-transform-fullwidth-007-ref.html"> +<meta name="assert" content="full-width does transforms U+0020 spaces to U+3000 within preserved white space."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { font: 50px/1 Ahem; } +#test { + text-transform: fullwidth; + color: green; + white-space: pre-wrap; +} +#ref { + color: red; + position: absolute; + z-index: -1; +} +</style> + +<p>Test passes if there are two green squares and no red. +<div id=ref>x   x</div> +<div id=test>x x</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-001.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-001.html new file mode 100644 index 00000000000..4b01a60395a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-001.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: wrapping opportunity after break-spaces tabs</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-1"> +<link rel="match" href="reference/pre-wrap-001-ref.html"> +<meta name="assert" content="There is a wrapping opportunity at the end of a sequence of tabs with white-space:break-spaces"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 20px/1 Ahem; +} +#test { + white-space: break-spaces; + color: green; + width: 16ch; +} +#ref { + color: red; + position: absolute; + z-index:-1; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div id=ref>XX<br>XX</div> +<div id=test>XX		XX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-002.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-002.html new file mode 100644 index 00000000000..d86918b75fb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-002.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: wrapping opportunity after break-spaces tabs and space</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-1"> +<link rel="match" href="reference/pre-wrap-001-ref.html"> +<meta name="assert" content="There is a wrapping opportunity at the end of a sequence of tabs and spaces with white-space:break-spaces"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 20px/1 Ahem; +} +#test { + white-space: break-spaces; + color: green; + width: 16ch; +} +#ref { + color: red; + position: absolute; + z-index:-1; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div id=ref>XX<br>XX</div> +<div id=test>XX 	 	XX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-003.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-003.html new file mode 100644 index 00000000000..0d762a426aa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-003.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: wrapping opportunity after each break-spaces tab</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-1"> +<link rel="match" href="reference/break-spaces-tab-003-ref.html"> +<meta name="assert" content="There is a wrapping opportunity after each tab in a sequence with white-space:break-spaces."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 20px/1 Ahem; +} +#test { + white-space: break-spaces; + color: green; + width: 1ch; +} +#ref { + color: red; + position: absolute; + z-index:-1; +} +</style> + +<p>Test passes if there are two <strong>filled green squares</strong> and <strong>no red</strong>.</p> +<div id=ref>X<br><br><br><br><br>X</div> +<div id=test>X					X</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-004.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-004.html new file mode 100644 index 00000000000..4ccbdd0f21a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-004.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: wrapping opportunity after each break-spaces space and tab</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-1"> +<link rel="match" href="reference/break-spaces-tab-003-ref.html"> +<meta name="assert" content="There is a wrapping opportunity after each tab and space in a sequence with white-space:break-spaces."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 20px/1 Ahem; +} +#test { + white-space: pre-wrap; + color: green; + width: 2ch; +} +#ref { + color: red; + position: absolute; + z-index:-1; +} +</style> + +<p>Test passes if there are two <strong>filled green squares</strong> and <strong>no red</strong>.</p> +<div id=ref>X<br><br><br><br><br>X</div> +<div id=test>X	 		X</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-005.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-005.html new file mode 100644 index 00000000000..b5cf3f33ec2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-005.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: break-space tabs don't hang</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-3"> +<link rel="match" href="reference/break-spaces-tab-005-ref.html"> +<meta name="assert" content="a sequence of break-spaces tabs at the end of a line does not hang."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 20px/1 Ahem; +} +#test { + white-space: break-spaces; + color: green; + width: 2ch; +} +#ref { + white-space: pre; + width: 2ch; + background: red; + color: green; + position: absolute; + z-index:-1; +} +</style> + +<p>Test passes if there is a green rectangle and no red. +<div id=ref> X<br> X<br>XX<br>XX<br>XX<br>XX<br> </div> +<div id=test>X<wbr>X					XX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-006.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-006.html new file mode 100644 index 00000000000..85d821a3e4d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-tab-006.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: break-spaces tabs and spaces don't hang</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-3"> +<link rel="match" href="reference/break-spaces-tab-005-ref.html"> +<meta name="assert" content="a sequence of break-spaces tabs and spaces at the end of a line does not hang, and can wrap after each tab or space."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 20px/1 Ahem; +} +#test { + white-space: break-spaces; + color: green; + width: 2ch; +} +#ref { + white-space: pre; + width: 2ch; + background: red; + color: green; + position: absolute; + z-index:-1; +} +</style> + +<p>Test passes if there is a green rectangle and no red. +<div id=ref> X<br> X<br>XX<br>XX<br>XX<br>XX<br> </div> +<div id=test>X<wbr>X	 		XX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-leading-spaces-006.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-leading-spaces-006.html index cff928c2fd5..de1c0de11c6 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-leading-spaces-006.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-leading-spaces-006.html @@ -28,5 +28,5 @@ span { color: green; } <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> <div class="ref">XXX<span>XX<br>XXX</span>XX<br><span>XXXXX<br>XXXXX<br>XXXXX</span></div> -<div class="test">XXX +<div class="test">XXX <!--end of line space intentional--> XX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-leading-spaces-007.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-leading-spaces-007.html index ca27b98c2f6..9089466338f 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-leading-spaces-007.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-leading-spaces-007.html @@ -28,5 +28,5 @@ span { color: green; } <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> <div class="ref">XXX<span>XX<br>XXX</span>XX<br><span>XXXXX<br>XXXXX<br>XXXXX</span></div> -<div class="test">XXX +<div class="test">XXX <!--end of line spaces intentional--> XX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-leading-spaces-008.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-leading-spaces-008.html index 7331142c2ea..f112a0c20b9 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-leading-spaces-008.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-leading-spaces-008.html @@ -28,5 +28,5 @@ span { color: green; } <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> <div class="ref">XX<span>XXX<br>XXX</span>XX<br><span>XXXXX<br>XXXXX<br>XXXXX</span></div> -<div class="test">XX +<div class="test">XX <!--end of line spaces intentional--> XX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-leading-spaces-009.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-leading-spaces-009.html index e2786419c1a..2fe58aa5ceb 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-leading-spaces-009.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-leading-spaces-009.html @@ -28,5 +28,5 @@ span { color: green; } <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> <div class="ref">X<span>XXXX<br>XXX</span>XX<br><span>XXXXX<br>XXXXX<br>XXXXX</span></div> -<div class="test">X +<div class="test">X <!--end of line spaces intentional--> XX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-001.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-001.html new file mode 100644 index 00000000000..e57da83e9fb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-001.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: wrapping opportunity after pre-wrap tabs</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-1"> +<link rel="match" href="reference/pre-wrap-001-ref.html"> +<meta name="assert" content="There is a wrapping opportunity at the end of a sequence of tabs with white-space:pre-wrap"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 20px/1 Ahem; +} +#test { + white-space: pre-wrap; + color: green; + width: 16ch; +} +#ref { + color: red; + position: absolute; + z-index:-1; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div id=ref>XX<br>XX</div> +<div id=test>XX		XX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-002.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-002.html new file mode 100644 index 00000000000..11ec8509408 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-002.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: wrapping opportunity after pre-wrap tabs and spaces</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-1"> +<link rel="match" href="reference/pre-wrap-001-ref.html"> +<meta name="assert" content="There is a wrapping opportunity at the end of a sequence of tabs and spaces with white-space:pre-wrap"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 20px/1 Ahem; +} +#test { + white-space: pre-wrap; + color: green; + width: 16ch; +} +#ref { + color: red; + position: absolute; + z-index:-1; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div id=ref>XX<br>XX</div> +<div id=test>XX 	 	XX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-003.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-003.html new file mode 100644 index 00000000000..a54debe80a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-003.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: no wrapping opportunity between pre-wrap tabs</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-1"> +<link rel="match" href="reference/pre-wrap-001-ref.html"> +<meta name="assert" content="There is a wrapping opportunity at the end of a sequence of tabs with white-space:pre-wrap, but not between or before each tab."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 20px/1 Ahem; +} +#test { + white-space: pre-wrap; + color: green; + width: 2ch; +} +#ref { + color: red; + position: absolute; + z-index:-1; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div id=ref>XX<br>XX</div> +<div id=test>XX		XX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-004.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-004.html new file mode 100644 index 00000000000..22c3ec45c68 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-004.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: no wrapping opportunity between pre-wrap tabs and spaces</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-1"> +<link rel="match" href="reference/pre-wrap-001-ref.html"> +<meta name="assert" content="There is a wrapping opportunity at the end of a sequence of tabs and spaces with white-space:pre-wrap, but not between or before each."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 20px/1 Ahem; +} +#test { + white-space: pre-wrap; + color: green; + width: 2ch; +} +#ref { + color: red; + position: absolute; + z-index:-1; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div id=ref>XX<br>XX</div> +<div id=test>XX 	 	XX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-005.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-005.html new file mode 100644 index 00000000000..993aa92e370 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-005.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: pre-wrap tabs hang</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-3"> +<link rel="match" href="reference/pre-wrap-001-ref.html"> +<meta name="assert" content="a sequence of pre-wrap tabs at the end of a line hangs."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 20px/1 Ahem; +} +#test { + white-space: pre-wrap; + color: green; + width: 2ch; +} +#ref { + color: red; + position: absolute; + z-index:-1; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div id=ref>XX<br>XX</div> +<div id=test>X<wbr>X		XX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-006.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-006.html new file mode 100644 index 00000000000..a4c7f3d3ebd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-tab-006.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: pre-wrap tabs and spaces hang</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-3"> +<link rel="match" href="reference/pre-wrap-001-ref.html"> +<meta name="assert" content="a sequence of pre-wrap tabs and spaces at the end of a line hangs."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 20px/1 Ahem; +} +#test { + white-space: pre-wrap; + color: green; + width: 2ch; +} +#ref { + color: red; + position: absolute; + z-index:-1; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div id=ref>XX<br>XX</div> +<div id=test>X<wbr>X	 		 XX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/break-spaces-tab-003-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/break-spaces-tab-003-ref.html new file mode 100644 index 00000000000..52a8c491cca --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/break-spaces-tab-003-ref.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>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; + color: green; +} +</style> + +<p>Test passes if there are two <strong>filled green squares</strong> and <strong>no red</strong>.</p> +<div>X<br><br><br><br><br>X</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/break-spaces-tab-005-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/break-spaces-tab-005-ref.html new file mode 100644 index 00000000000..798e35fd660 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/break-spaces-tab-005-ref.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>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; + white-space: break-spaces; + color: green; + white-space: pre; +} +</style> + +<p>Test passes if there is a green rectangle and no red. +<div>XX<br>XX<br>XX<br>XX<br>XX<br>XX<br>XX</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-006.html b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-006.html deleted file mode 100644 index 820012e6ca1..00000000000 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-006.html +++ /dev/null @@ -1,29 +0,0 @@ -<!doctype html> -<meta charset=utf-8> -<title>CSS Text test: hanging trailing spaces with white-space:pre-wrap</title> -<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> -<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> -<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-004-ref.html"> -<meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap and any overflowing space is removed."> -<style> -div { - font: 25px/1 Ahem; -} -.ref { - position: absolute; - color: red; - z-index: -1; -} -.test span { background: red; } -.test { - color: green; - width: 2ch; - white-space: pre-wrap; -} -.test span { background: green; } -</style> - -<p>This test passes if there is a green square and no red. -<div class="ref">X<span>X</span><br>XX</div> -<div class="test">X<span>  </span><span> XX</span></div> - diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-computed.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-computed.html new file mode 100644 index 00000000000..effeb2974e1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-computed.html @@ -0,0 +1,46 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Transform Module Level 2: getComputedStyle().perspectiveOrigin</title> +<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#perspective-origin-property"> +<meta name="assert" content="perspective-origin computed value is a pair of absolute lengths"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<style> + #target { + width: 200px; + height: 300px; + font-size: 40px; + } +</style> +</head> +<body> +<div id="target"></div> +<script> +test_computed_value("perspective-origin", "10%", "20px 150px"); +test_computed_value("perspective-origin", "10% center", "20px 150px"); +test_computed_value("perspective-origin", "20% 30px", "40px 30px"); +test_computed_value("perspective-origin", "30px center", "30px 150px"); +test_computed_value("perspective-origin", "40px top", "40px 0px"); +test_computed_value("perspective-origin", "bottom 10% right 20%", "160px 270px"); +test_computed_value("perspective-origin", "bottom right", "200px 300px"); +test_computed_value("perspective-origin", "center", "100px 150px"); +test_computed_value("perspective-origin", "center 50px", "100px 50px"); +test_computed_value("perspective-origin", "center bottom", "100px 300px"); +test_computed_value("perspective-origin", "center center", "100px 150px"); +test_computed_value("perspective-origin", "center left", "0px 150px"); +test_computed_value("perspective-origin", "left", "0px 150px"); +test_computed_value("perspective-origin", "left 10px", "0px 10px"); +test_computed_value("perspective-origin", "left bottom", "0px 300px"); +test_computed_value("perspective-origin", "left center", "0px 150px"); +test_computed_value("perspective-origin", "right 40%", "200px 120px"); +test_computed_value("perspective-origin", "right 30% top -60px", "140px -60px"); +test_computed_value("perspective-origin", "top", "100px 0px"); +test_computed_value("perspective-origin", "right 20px bottom 30px", "180px 270px"); + +test_computed_value("perspective-origin", "right calc(10px - 0.5em) top calc(10px - 0.5em)", "210px -10px"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-parsing-invalid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-invalid.html index 2ed6721e091..2ed6721e091 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-parsing-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-invalid.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-parsing-valid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-valid.html index 79f4e0df12e..79f4e0df12e 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-parsing-valid.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/perspective-origin-valid.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-computed.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-computed.html new file mode 100644 index 00000000000..696d89db67f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-computed.html @@ -0,0 +1,49 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Transform Module Level 2: getComputedStyle().transformOrigin</title> +<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#transform-origin-property"> +<meta name="assert" content="transform-origin computed value is two or three absolute lengths"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<style> + #target { + width: 200px; + height: 300px; + font-size: 40px; + } +</style> +</head> +<body> +<div id="target"></div> +<script> +test_computed_value("transform-origin", "10%", "20px 150px"); +test_computed_value("transform-origin", "10% center", "20px 150px"); +test_computed_value("transform-origin", "20% 30px", "40px 30px"); +test_computed_value("transform-origin", "30px center", "30px 150px"); +test_computed_value("transform-origin", "40px top", "40px 0px"); +test_computed_value("transform-origin", "bottom right", "200px 300px"); +test_computed_value("transform-origin", "center", "100px 150px"); +test_computed_value("transform-origin", "center 50px", "100px 50px"); +test_computed_value("transform-origin", "center bottom", "100px 300px"); +test_computed_value("transform-origin", "center center", "100px 150px"); +test_computed_value("transform-origin", "center left", "0px 150px"); +test_computed_value("transform-origin", "left", "0px 150px"); +test_computed_value("transform-origin", "left 10px", "0px 10px"); +test_computed_value("transform-origin", "left bottom", "0px 300px"); +test_computed_value("transform-origin", "left center", "0px 150px"); +test_computed_value("transform-origin", "right 40%", "200px 120px"); +test_computed_value("transform-origin", "top", "100px 0px"); + +test_computed_value("transform-origin", "-1px bottom 5px", "-1px 300px 5px"); +test_computed_value("transform-origin", "left center 6px", "0px 150px 6px"); +test_computed_value("transform-origin", "center top", "100px 0px"); +test_computed_value("transform-origin", "right bottom 7px", "200px 300px 7px"); +test_computed_value("transform-origin", "-1px -2px -3px"); + +test_computed_value("transform-origin", "calc(-100% + 10px - 0.5em) calc(10px - 0.5em) calc(10px - 0.5em)", "-210px -10px -10px"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-invalid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-invalid.html index 19a7c963a70..0dd1eeaf592 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-invalid.html @@ -19,6 +19,10 @@ test_invalid_value("transform-origin", "1px left"); test_invalid_value("transform-origin", "top 1px"); // Blink fails. test_invalid_value("transform-origin", "right left"); test_invalid_value("transform-origin", "top bottom"); + +test_invalid_value("transform-origin", "bottom 10% right 20%"); +test_invalid_value("transform-origin", "right 30% top -60px"); +test_invalid_value("transform-origin", "right 20px bottom 30px"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/cssom-view/scrollLeftTop.html b/tests/wpt/web-platform-tests/css/cssom-view/scrollLeftTop.html new file mode 100644 index 00000000000..55b40136007 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom-view/scrollLeftTop.html @@ -0,0 +1,136 @@ +<!DOCTYPE html> +<title>CSSOM View - scrollLeft/scrollTop considers writing-mode and css direction</title> +<meta charset="utf-8"> +<link rel="author" title="Cathie Chen" href="mailto:cathiechen@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/cssom-view/#scrolling-area-origin"> +<link rel="help" href="https://drafts.csswg.org/cssom-view/#scroll-an-element"> +<meta name="assert" content="This test verifies the assigned and extreme values of the scroll positions of an element."> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<head> + <style> + .scroller { + overflow: scroll; + width: 150px; + height: 100px; + } + .content { + width: 300px; + height: 400px; + } + .horizontal-tb { + writing-mode: horizontal-tb; + } + .vertical-lr { + writing-mode: vertical-lr; + } + .vertical-rl { + writing-mode: vertical-rl; + } + .rtl { + direction: rtl; + } + </style> +</head> + +<body> + <h1>scrollLeft/scrollTop</h1> + <h2>writing-mode: horizontal-tb;</h2> + <div id="target_scroller" class="scroller horizontal-tb ltr"> + <div id="target_content" class="content"></div> + </div> + <div class="scroller horizontal-tb rtl"> + <div class="content"></div> + </div> + <h2>writing-mode: vertical-lr;</h2> + <div class="scroller vertical-lr ltr"> + <div class="content"></div> + </div> + <div class="scroller vertical-lr rtl"> + <div class="content"></div> + </div> + <h2>writing-mode: vertical-rl;</h2> + <div class="scroller vertical-rl ltr"> + <div class="content"></div> + </div> + <div class="scroller vertical-rl rtl"> + <div class="content"></div> + </div> + + <script> + var scroller = document.querySelector("#target_scroller"); + var content = document.querySelector("#target_content"); + var scrollbar_width = scroller.offsetWidth - scroller.clientWidth; + var scroller_width = scroller.offsetWidth; + var scroller_height = scroller.offsetHeight; + var content_width = content.offsetWidth; + var content_height = content.offsetHeight; + + expectedScrollTop = content_height - scroller_height + scrollbar_width; + expectedScrollLeft = content_width - scroller_width + scrollbar_width; + + const epsilon = 0.5; + test(() => { + var scroller = document.querySelector(".horizontal-tb.ltr"); + assert_approx_equals(scroller.scrollLeft, 0, epsilon, "initial scrollLeft"); + assert_approx_equals(scroller.scrollTop, 0, epsilon, "initial scrollTop"); + scroller.scrollLeft = 2*content_width; + scroller.scrollTop = 2*content_height; + assert_approx_equals(scroller.scrollLeft, expectedScrollLeft, epsilon, "ending scrollLeft"); + assert_approx_equals(scroller.scrollTop, expectedScrollTop, epsilon, "ending scrollTop"); + }, `writing-mode:horizontal-tb; direction:ltr`); + + test(() => { + var scroller = document.querySelector(".horizontal-tb.rtl"); + assert_approx_equals(scroller.scrollLeft, 0, epsilon, "initial scrollLeft"); + assert_approx_equals(scroller.scrollTop, 0, epsilon, "initial scrollTop"); + scroller.scrollLeft = -2*content_width; + scroller.scrollTop = 2*content_height; + assert_approx_equals(scroller.scrollLeft, -expectedScrollLeft, epsilon, "ending scrollLeft"); + assert_approx_equals(scroller.scrollTop, expectedScrollTop, epsilon, "ending scrollTop"); + }, `writing-mode:horizontal-tb; direction:rtl`); + + test(() => { + var scroller = document.querySelector(".vertical-lr.ltr"); + assert_approx_equals(scroller.scrollLeft, 0, epsilon, "initial scrollLeft"); + assert_approx_equals(scroller.scrollTop, 0, epsilon, "initial scrollTop"); + scroller.scrollLeft = 2*content_width; + scroller.scrollTop = 2*content_height; + assert_approx_equals(scroller.scrollLeft, expectedScrollLeft, epsilon, "ending scrollLeft"); + assert_approx_equals(scroller.scrollTop, expectedScrollTop, epsilon, "ending scrollTop"); + }, `writing-mode:vertical-lr; direction:ltr`); + + test(() => { + var scroller = document.querySelector(".vertical-lr.rtl"); + assert_approx_equals(scroller.scrollLeft, 0, epsilon, "initial scrollLeft"); + assert_approx_equals(scroller.scrollTop, 0, epsilon, "initial scrollTop"); + scroller.scrollLeft = 2*content_width; + scroller.scrollTop = -2*content_height; + assert_approx_equals(scroller.scrollLeft, expectedScrollLeft, epsilon, "ending scrollLeft"); + assert_approx_equals(scroller.scrollTop, -expectedScrollTop, epsilon, "ending scrollTop"); + }, `writing-mode:vertical-lr; direction:rtl`); + + test(() => { + var scroller = document.querySelector(".vertical-rl.ltr"); + assert_approx_equals(scroller.scrollLeft, 0, epsilon, "initial scrollLeft"); + assert_approx_equals(scroller.scrollTop, 0, epsilon, "initial scrollTop"); + scroller.scrollLeft = -2*content_width; + scroller.scrollTop = 2*content_height; + assert_approx_equals(scroller.scrollLeft, -expectedScrollLeft, epsilon, "ending scrollLeft"); + assert_approx_equals(scroller.scrollTop, expectedScrollTop, epsilon, "ending scrollTop"); + }, `writing-mode:vertical-rl; direction:ltr`); + + test(() => { + var scroller = document.querySelector(".vertical-rl.rtl"); + assert_approx_equals(scroller.scrollLeft, 0, epsilon, "initial scrollLeft"); + assert_approx_equals(scroller.scrollTop, 0, epsilon, "initial scrollTop"); + scroller.scrollLeft = -2*content_width; + scroller.scrollTop = -2*content_height; + assert_approx_equals(scroller.scrollLeft, -expectedScrollLeft, epsilon, "ending scrollLeft"); + assert_approx_equals(scroller.scrollTop, -expectedScrollTop, epsilon, "ending scrollTop"); + }, `writing-mode:vertical-rl; direction:rtl`); + </script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-plus-opacity-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-plus-opacity-ref.html new file mode 100644 index 00000000000..347b7a684ca --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-plus-opacity-ref.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>backdrop-filter: Correctly apply backdrop-filter with opacity</title> +<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org"> + + + +<p>Expected: A green box.</p> + +<div class="greenbox"></div> + + +<style> +.greenbox { + position: absolute; + background: green; + width: 100px; + height: 100px; + top: 100px; + left: 60px; +} +</style> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-plus-opacity.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-plus-opacity.html new file mode 100644 index 00000000000..cb189f9f3e9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-plus-opacity.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>backdrop-filter: Correctly apply backdrop-filter with opacity</title> +<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty"> +<link rel="match" href="backdrop-filter-plus-opacity-ref.html"> + +<p>Expected: A green box.</p> + +<div class="greenbox"></div> +<div class="filter"></div> + +<style> +.greenbox { + position: absolute; + background: green; + width: 100px; + height: 100px; + top: 100px; + left: 60px; +} +.filter { + position: absolute; + width: 200px; + height: 200px; + top: 50px; + left: 10px; + backdrop-filter: invert(1); + opacity: 0; +} +</style> diff --git a/tests/wpt/web-platform-tests/css/mediaqueries/width-equals-window-inner-width.html b/tests/wpt/web-platform-tests/css/mediaqueries/width-equals-window-inner-width.html new file mode 100644 index 00000000000..775c1112de7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/mediaqueries/width-equals-window-inner-width.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<meta name="viewport" content="width=device-width, initial-scale=1"> +<title>CSS Test: CSS media query width equals window innerWidth</title> + +<link rel="author" title="Jinfeng Ma" href="mailto:majinfeng1@xiaomi.org"> +<link rel="help" href="https://www.w3.org/TR/css3-mediaqueries/#width"> +<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-window-innerwidth"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<!-- +It'd be best to programmatically change device scale factor so that the document +width becomes non integral but for now this test is only effective when run on +devices with a fractional device scale factor. +--> +<script type="text/javascript"> + 'use strict'; + test(() => { + assert_true(window.matchMedia('(width: ' + window.innerWidth + 'px)').matches); + }, 'CSS media query width equals window innerWidth.'); +</script> diff --git a/tests/wpt/web-platform-tests/element-timing/images-repeated-resource.html b/tests/wpt/web-platform-tests/element-timing/images-repeated-resource.html index 9bc8b5f45e4..a6ad7acefcb 100644 --- a/tests/wpt/web-platform-tests/element-timing/images-repeated-resource.html +++ b/tests/wpt/web-platform-tests/element-timing/images-repeated-resource.html @@ -13,8 +13,10 @@ body { <script> let beforeRender; let numEntries = 0; - let responseEnd1; - let responseEnd2; + let loadTime1; + let loadTime2; + let renderTime1; + let renderTime2; let img; let img2; const index = window.location.href.lastIndexOf('/'); @@ -26,23 +28,33 @@ body { } const observer = new PerformanceObserver( t.step_func(function(entryList) { - entryList.getEntries().forEach(entry => { - // Easier to check the |element| attribute here since element ID is the same for both images. - checkElement(entry, pathname, entry.identifier, 'image_id', beforeRender, null); - checkNaturalSize(entry, 100, 100); - if (entry.identifier === 'my_image') { - ++numEntries; - responseEnd1 = entry.responseEnd; - assert_equals(entry.element, img); - } - else if (entry.identifier === 'my_image2') { - ++numEntries; - responseEnd2 = entry.responseEnd; - assert_equals(entry.element, img2); - } - }); + assert_equals(entryList.getEntries().length, 1); + const entry = entryList.getEntries()[0]; + // Easier to check the |element| attribute here since element ID is the same for both images. + checkElement(entry, pathname, entry.identifier, 'image_id', beforeRender, null); + checkNaturalSize(entry, 100, 100); + if (entry.identifier === 'my_image') { + ++numEntries; + loadTime1 = entry.loadTime; + renderTime1 = entry.renderTime; + assert_equals(entry.element, img); + + img2 = document.createElement('img'); + img2.src = 'resources/square100.png'; + img2.setAttribute('elementtiming', 'my_image2'); + img2.setAttribute('id', 'image_id'); + document.body.appendChild(img2); + beforeRender = performance.now(); + } + else if (entry.identifier === 'my_image2') { + ++numEntries; + loadTime2 = entry.loadTime; + renderTime2 = entry.renderTime; + assert_equals(entry.element, img2); + } if (numEntries == 2) { - assert_equals(responseEnd1, responseEnd2); + assert_greater_than(loadTime2, loadTime1, 'Second image loads after first.'); + assert_greater_than(renderTime2, renderTime1, 'Second image renders after first'); t.done(); } }) @@ -57,16 +69,9 @@ body { img.setAttribute('elementtiming', 'my_image'); img.setAttribute('id', 'image_id'); document.body.appendChild(img); - - img2 = document.createElement('img'); - img2.src = 'resources/square100.png'; - img2.setAttribute('elementtiming', 'my_image2'); - img2.setAttribute('id', 'image_id'); - document.body.appendChild(img2); - beforeRender = performance.now(); }; - }, 'Element with elementtiming attribute is observable.'); + }, 'Elements with elementtiming and same src are observable.'); </script> </body> diff --git a/tests/wpt/web-platform-tests/element-timing/resources/element-timing-helpers.js b/tests/wpt/web-platform-tests/element-timing/resources/element-timing-helpers.js index f98f9b21134..8933732616c 100644 --- a/tests/wpt/web-platform-tests/element-timing/resources/element-timing-helpers.js +++ b/tests/wpt/web-platform-tests/element-timing/resources/element-timing-helpers.js @@ -22,7 +22,8 @@ function checkElement(entry, expectedUrl, expectedIdentifier, expectedID, before assert_equals(entry.name, 'image-paint'); const rt_entries = performance.getEntriesByName(expectedUrl, 'resource'); assert_equals(rt_entries.length, 1); - assert_equals(rt_entries[0].responseEnd, entry.responseEnd); + assert_greater_than_equal(entry.loadTime, rt_entries[0].responseEnd, + 'Image loadTime is after the resource responseEnd'); } function checkElementWithoutResourceTiming(entry, expectedUrl, expectedIdentifier, @@ -30,8 +31,8 @@ function checkElementWithoutResourceTiming(entry, expectedUrl, expectedIdentifie checkElementInternal(entry, expectedUrl, expectedIdentifier, expectedID, beforeRender, expectedElement); assert_equals(entry.name, 'image-paint'); - // No associated resource from ResourceTiming, so the responseEnd should be 0. - assert_equals(entry.responseEnd, 0); + // No associated resource from ResourceTiming, so not much to compare loadTime with. + assert_greater_than(entry.loadTime, 0); } // Checks that the rect matches the desired values [left right top bottom]. @@ -57,5 +58,5 @@ function checkTextElement(entry, expectedIdentifier, expectedID, beforeRender, checkElementInternal(entry, '', expectedIdentifier, expectedID, beforeRender, expectedElement); assert_equals(entry.name, 'text-paint'); - assert_equals(entry.responseEnd, 0); + assert_equals(entry.loadTime, 0); } diff --git a/tests/wpt/web-platform-tests/fetch/api/response/response-consume-empty.html b/tests/wpt/web-platform-tests/fetch/api/response/response-consume-empty.html index 6e51ff8b59a..4bfcfbc8f44 100644 --- a/tests/wpt/web-platform-tests/fetch/api/response/response-consume-empty.html +++ b/tests/wpt/web-platform-tests/fetch/api/response/response-consume-empty.html @@ -89,7 +89,7 @@ assert_false(response.bodyUsed, "bodyUsed is false at init"); if (asText) { return response.text().then(function(bodyAsString) { - assert_equals(bodyAsString, "", "Resolved value should be empty"); + assert_equals(bodyAsString.length, 0, "Resolved value should be empty"); assert_true(response.bodyUsed, "bodyUsed is true after being consumed"); }); } diff --git a/tests/wpt/web-platform-tests/html/dom/interfaces.https.html b/tests/wpt/web-platform-tests/html/dom/interfaces.https.html index 47254a4361c..6ca77212532 100644 --- a/tests/wpt/web-platform-tests/html/dom/interfaces.https.html +++ b/tests/wpt/web-platform-tests/html/dom/interfaces.https.html @@ -8,6 +8,7 @@ <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> <script src=/common/subset-tests-by-key.js></script> +<script src=/common/get-host-info.sub.js></script> <script src=/resources/WebIDLParser.js></script> <script src=/resources/idlharness.js></script> @@ -200,7 +201,8 @@ idl_test( PeerConnection: [], MediaStreamEvent: [], ErrorEvent: [], - WebSocket: ['new WebSocket("wss://foo")'], + // https://web-platform-tests.org/writing-tests/server-features.html?tests-involving-multiple-origins + WebSocket: ['new WebSocket("wss://nonexistent.' + get_host_info().ORIGINAL_HOST + '")'], CloseEvent: ['new CloseEvent("close")'], AbstractWorker: [], Worker: [], diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-fast.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-fast.vtt index cd138fd32af..7fe5b1241a2 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-fast.vtt +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-fast.vtt @@ -5,9 +5,9 @@ Lorem 2 -00:00:00.300 --> 00:00:00.700 +00:00:00.300 --> 00:00:01.300 ipsum 3 -00:00:01.200 --> 00:00:01.500 +00:00:01.800 --> 00:00:02.800 dolor diff --git a/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/tranferFromImageBitmap-ToBlob-offscreen.html b/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/tranferFromImageBitmap-ToBlob-offscreen.html index 6a555fe25aa..81d0c900650 100644 --- a/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/tranferFromImageBitmap-ToBlob-offscreen.html +++ b/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/tranferFromImageBitmap-ToBlob-offscreen.html @@ -15,21 +15,29 @@ function testCanvas(ctx, r, g, b, a) } promise_test(function() { - function testTransferFromImageBitmapNullability(greenImage) { + function transferFromImageBitmapToBlobOffscreen(greenImage) { var bitmapCanvas = new OffscreenCanvas(width,height); var bitmapCtx = bitmapCanvas.getContext('bitmaprenderer'); bitmapCtx.transferFromImageBitmap(greenImage); + return bitmapCanvas.convertToBlob(); + } + + function drawBlobToCanvas(blob) { // Make sure the bitmap renderer canvas is filled correctly. - var pngImage = document.getElementById("img"); - bitmapCanvas.convertToBlob().then(function(blob){ - pngImage.src = URL.createObjectURL(blob); - var myCanvasToTest = document.createElement('canvas'); - myCanvasToTest.width = width; - myCanvasToTest.height = height; - var myCtxToTest = myCanvasToTest.getContext('2d'); - myCtxToTest.drawImage(pngImage, 0, 0); - testCanvas(myCtxToTest, 0, 255, 0, 255); + var pngImage = new Image(); + var myCanvasToTest = document.createElement('canvas'); + myCanvasToTest.width = width; + myCanvasToTest.height = height; + + // Wait for the blob img to load. + return new Promise(function(resolve) { + pngImage.src = URL.createObjectURL(blob); + pngImage.onload = function() { + var myCtxToTest = myCanvasToTest.getContext('2d'); + myCtxToTest.drawImage(pngImage, 0, 0); + resolve(myCtxToTest); + }; }); } @@ -40,11 +48,13 @@ promise_test(function() { greenCtx.fillStyle = '#0f0'; greenCtx.fillRect(0, 0, width, height); - return Promise.all([ - createImageBitmap(greenCanvas), - ]).then(([greenImage]) => { - testTransferFromImageBitmapNullability(greenImage); - }); -},'Test that transferToBlob works and produce the expected image'); + return createImageBitmap(greenCanvas).then( + greenImage => transferFromImageBitmapToBlobOffscreen(greenImage) + ).then( + blob => drawBlobToCanvas(blob) + ).then( + ctx => testCanvas(ctx, 0, 255, 0, 255) + ); +},'Test that convertToBlob works and produce the expected image'); </script> diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini index c83e8ff9261..e34c73f1ba9 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini @@ -4,5 +4,4 @@ [TestDriver actions: actions with key pressed] expected: - if product == "firefox": FAIL if os == "mac" and product == "chrome": FAIL diff --git a/tests/wpt/web-platform-tests/interfaces/css-properties-values-api.idl b/tests/wpt/web-platform-tests/interfaces/css-properties-values-api.idl index 4ba38970e30..ee444ebb29d 100644 --- a/tests/wpt/web-platform-tests/interfaces/css-properties-values-api.idl +++ b/tests/wpt/web-platform-tests/interfaces/css-properties-values-api.idl @@ -3,7 +3,7 @@ // (https://github.com/tidoust/reffy-reports) // Source: CSS Properties and Values API Level 1 (https://drafts.css-houdini.org/css-properties-values-api-1/) -dictionary PropertyDescriptor { +dictionary PropertyDefinition { required DOMString name; DOMString syntax = "*"; required boolean inherits; @@ -11,5 +11,17 @@ dictionary PropertyDescriptor { }; partial namespace CSS { - void registerProperty(PropertyDescriptor descriptor); + void registerProperty(PropertyDefinition definition); +}; + +partial interface CSSRule { + const unsigned short PROPERTY_RULE = 18; +}; + +[Exposed=Window] +interface CSSPropertyRule : CSSRule { + readonly attribute CSSOMString name; + readonly attribute CSSOMString syntax; + readonly attribute boolean inherits; + readonly attribute CSSOMString? initialValue; }; diff --git a/tests/wpt/web-platform-tests/interfaces/geometry.idl b/tests/wpt/web-platform-tests/interfaces/geometry.idl index 5d5fe4fc2c4..1b83959465c 100644 --- a/tests/wpt/web-platform-tests/interfaces/geometry.idl +++ b/tests/wpt/web-platform-tests/interfaces/geometry.idl @@ -15,7 +15,7 @@ interface DOMPointReadOnly { readonly attribute unrestricted double z; readonly attribute unrestricted double w; - DOMPoint matrixTransform(optional DOMMatrixInit matrix); + [NewObject] DOMPoint matrixTransform(optional DOMMatrixInit matrix); [Default] object toJSON(); }; diff --git a/tests/wpt/web-platform-tests/interfaces/longtasks.idl b/tests/wpt/web-platform-tests/interfaces/longtasks.idl index 21bb1dd117b..333b842f86e 100644 --- a/tests/wpt/web-platform-tests/interfaces/longtasks.idl +++ b/tests/wpt/web-platform-tests/interfaces/longtasks.idl @@ -5,6 +5,7 @@ interface PerformanceLongTaskTiming : PerformanceEntry { readonly attribute FrozenArray<TaskAttributionTiming> attribution; + [Default] object toJSON(); }; interface TaskAttributionTiming : PerformanceEntry { @@ -12,4 +13,5 @@ interface TaskAttributionTiming : PerformanceEntry { readonly attribute DOMString containerSrc; readonly attribute DOMString containerId; readonly attribute DOMString containerName; + [Default] object toJSON(); }; diff --git a/tests/wpt/web-platform-tests/largest-contentful-paint/cross-origin-image.sub.html b/tests/wpt/web-platform-tests/largest-contentful-paint/cross-origin-image.sub.html index 6e86f13b9cc..88775b861a6 100644 --- a/tests/wpt/web-platform-tests/largest-contentful-paint/cross-origin-image.sub.html +++ b/tests/wpt/web-platform-tests/largest-contentful-paint/cross-origin-image.sub.html @@ -9,6 +9,7 @@ if (!window.LargestContentfulPaint) { assert_unreached("LargestContentfulPaint is not implemented"); } + const beforeLoad = performance.now(); const observer = new PerformanceObserver( t.step_func_done(function(entryList) { assert_equals(entryList.getEntries().length, 1); @@ -22,8 +23,8 @@ assert_equals(entry.id, 'image_id'); const pathname = 'http://{{domains[www]}}:{{ports[http][1]}}/images/blue.png'; assert_equals(entry.url, pathname); - assert_equals(entry.responseEnd, - performance.getEntriesByName(pathname, 'resource')[0].responseEnd); + assert_greater_than_equal(entry.loadTime, beforeLoad); + assert_less_than(entry.loadTime, performance.now()); assert_equals(entry.element, document.getElementById('image_id')); }) ); diff --git a/tests/wpt/web-platform-tests/largest-contentful-paint/loadTime-after-appendChild.html b/tests/wpt/web-platform-tests/largest-contentful-paint/loadTime-after-appendChild.html new file mode 100644 index 00000000000..fb0eddb220e --- /dev/null +++ b/tests/wpt/web-platform-tests/largest-contentful-paint/loadTime-after-appendChild.html @@ -0,0 +1,39 @@ +<!DOCTYPE HTML> +<meta charset=utf-8> +<title>Largest Contentful Paint: delayed appended image.</title> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + async_test(function (t) { + if (!window.LargestContentfulPaint) { + assert_unreached("LargestContentfulPaint is not implemented"); + } + let beforeLoad; + const observer = new PerformanceObserver( + t.step_func_done(entryList => { + assert_equals(entryList.getEntries().length, 1); + const entry = entryList.getEntries()[0]; + assert_equals(entry.entryType, 'largest-contentful-paint'); + assert_equals(entry.startTime, 0); + assert_equals(entry.duration, 0); + assert_equals(entry.url, window.location.origin + '/images/black-rectangle.png'); + assert_greater_than(entry.renderTime, entry.loadTime, + 'The image render time should occur after it is appended to the div.'); + assert_greater_than(entry.loadTime, beforeLoad, + 'The image load timestamp should occur after script starts running.'); + assert_less_than(entry.renderTime, performance.now(), + 'Image render time should be before the observer callback is executed.') + }) + ); + observer.observe({type: 'largest-contentful-paint', buffered: true}); + const img = document.createElement('img'); + img.src = '/images/black-rectangle.png'; + t.step_timeout(() => { + beforeLoad = performance.now(); + document.getElementById('image_div').appendChild(img); + }, 200) + }, 'Image loadTime occurs after appendChild is called.'); +</script> +<div id='image_div'></div> +</body> diff --git a/tests/wpt/web-platform-tests/largest-contentful-paint/observe-image.html b/tests/wpt/web-platform-tests/largest-contentful-paint/observe-image.html index 4d56cc2d838..16b3502eb34 100644 --- a/tests/wpt/web-platform-tests/largest-contentful-paint/observe-image.html +++ b/tests/wpt/web-platform-tests/largest-contentful-paint/observe-image.html @@ -9,7 +9,7 @@ if (!window.LargestContentfulPaint) { assert_unreached("LargestContentfulPaint is not implemented"); } - let beforeRender = performance.now(); + const beforeRender = performance.now(); const observer = new PerformanceObserver( t.step_func_done(function(entryList) { assert_equals(entryList.getEntries().length, 1); @@ -28,8 +28,10 @@ const index = window.location.href.lastIndexOf('/') - 25; const pathname = window.location.href.substring(0, index) + '/images/blue.png'; assert_equals(entry.url, pathname); - assert_equals(entry.responseEnd, - performance.getEntriesByName(pathname, 'resource')[0].responseEnd); + assert_greater_than(entry.loadTime, beforeRender, + 'The load timestamp should occur after script starts running.'); + assert_less_than(entry.loadTime, entry.renderTime, + 'The load timestamp should occur before the render timestamp.') assert_equals(entry.element, document.getElementById('image_id')); }) ); diff --git a/tests/wpt/web-platform-tests/largest-contentful-paint/observe-text.html b/tests/wpt/web-platform-tests/largest-contentful-paint/observe-text.html index 7dbfbe52f3d..2cf1344f255 100644 --- a/tests/wpt/web-platform-tests/largest-contentful-paint/observe-text.html +++ b/tests/wpt/web-platform-tests/largest-contentful-paint/observe-text.html @@ -10,11 +10,11 @@ p { } </style> <script> - let beforeRender; async_test(function (t) { if (!window.LargestContentfulPaint) { assert_unreached("LargestContentfulPaint is not implemented"); } + let beforeRender; const observer = new PerformanceObserver( t.step_func_done(function(entryList) { assert_equals(entryList.getEntries().length, 1); @@ -28,7 +28,7 @@ p { // Width of at least 100 px. // TODO: find a good way to bound text width. assert_greater_than_equal(entry.size, 1200); - assert_equals(entry.responseEnd, 0); + assert_equals(entry.loadTime, 0); assert_equals(entry.id, 'my_text'); assert_equals(entry.url, ''); assert_equals(entry.element, document.getElementById('my_text')); diff --git a/tests/wpt/web-platform-tests/largest-contentful-paint/repeated-image.html b/tests/wpt/web-platform-tests/largest-contentful-paint/repeated-image.html new file mode 100644 index 00000000000..94406b20d62 --- /dev/null +++ b/tests/wpt/web-platform-tests/largest-contentful-paint/repeated-image.html @@ -0,0 +1,61 @@ +<!DOCTYPE HTML> +<meta charset=utf-8> +<title>Largest Contentful Paint: repeated image.</title> +<style> + #image_id { + width: 10px; + height: 10px; + } +</style> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + async_test(function (t) { + if (!window.LargestContentfulPaint) { + assert_unreached("LargestContentfulPaint is not implemented"); + } + const beforeFirstLoad = performance.now(); + let firstCallback = true; + const path = window.location.origin + '/images/black-rectangle.png'; + let beforeSecondLoad; + const observer = new PerformanceObserver( + t.step_func(entryList => { + assert_equals(entryList.getEntries().length, 1); + const entry = entryList.getEntries()[0]; + assert_equals(entry.entryType, 'largest-contentful-paint'); + assert_equals(entry.startTime, 0); + assert_equals(entry.duration, 0); + assert_equals(entry.url, path); + assert_less_than(entry.renderTime, performance.now(), + 'Image render time should be before the observer callback is executed.') + if (firstCallback) { + assert_equals(entry.id, 'image_id'); + assert_greater_than(entry.renderTime, entry.loadTime, + 'The first image render time should occur after its load time.'); + assert_greater_than(entry.loadTime, beforeFirstLoad, + 'The first image load timestamp should occur after script starts running.'); + // Image is shrunk to be 10 x 10. + assert_equals(entry.size, 100); + const img = document.createElement('img'); + img.src = '/images/black-rectangle.png'; + beforeSecondLoad = performance.now(); + document.getElementById('image_div').appendChild(img); + firstCallback = false; + return; + } + // The second image is added at its natural size: 100 x 50. + assert_equals(entry.size, 5000); + assert_greater_than(entry.loadTime, beforeSecondLoad, + 'The second image load time should occur after adding it to the document body.'); + assert_greater_than(entry.renderTime, entry.loadTime, + 'The second image render time should occur after its load time.'); + t.done(); + }) + ); + observer.observe({type: 'largest-contentful-paint', buffered: true}); + }, 'Repeated image produces different timestamps.'); +</script> +<img src='/images/black-rectangle.png' id='image_id'/> +<div id='image_div'></div> +</body> diff --git a/tests/wpt/web-platform-tests/largest-contentful-paint/supported-lcp-type.html b/tests/wpt/web-platform-tests/largest-contentful-paint/supported-lcp-type.html new file mode 100644 index 00000000000..25d4eaa0367 --- /dev/null +++ b/tests/wpt/web-platform-tests/largest-contentful-paint/supported-lcp-type.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<head> +<title>PerformanceObserver.supportedEntryTypes contains "largest-contentful-paint"</title> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + if (typeof PerformanceObserver.supportedEntryTypes === "undefined") + assert_unreached("supportedEntryTypes is not supported."); + assert_greater_than(PerformanceObserver.supportedEntryTypes.indexOf("largest-contentful-paint"), -1, + "There should be an entry 'largest-contentful-paint' in PerformanceObserver.supportedEntryTypes"); +}, "supportedEntryTypes contains 'largest-contentful-paint'."); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/layout-instability/supported-layout-type.html b/tests/wpt/web-platform-tests/layout-instability/supported-layout-type.html index 9bc53701658..8679a2de738 100644 --- a/tests/wpt/web-platform-tests/layout-instability/supported-layout-type.html +++ b/tests/wpt/web-platform-tests/layout-instability/supported-layout-type.html @@ -1,6 +1,6 @@ <!DOCTYPE html> <head> -<title>PerformanceObserver.supportedEntryTypes contains "layoutShift"</title> +<title>PerformanceObserver.supportedEntryTypes contains "layout-shift"</title> </head> <body> <script src="/resources/testharness.js"></script> diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist index 02b1bb0c78f..c344c3a8344 100644 --- a/tests/wpt/web-platform-tests/lint.whitelist +++ b/tests/wpt/web-platform-tests/lint.whitelist @@ -28,10 +28,6 @@ TRAILING WHITESPACE: webaudio/* TRAILING WHITESPACE: WebIDL/* TRAILING WHITESPACE: webvtt/* TRAILING WHITESPACE: server-timing/resources/parsing/*.sub.headers -TRAILING WHITESPACE: css/css-text/white-space/pre-wrap-leading-spaces-006.html -TRAILING WHITESPACE: css/css-text/white-space/pre-wrap-leading-spaces-007.html -TRAILING WHITESPACE: css/css-text/white-space/pre-wrap-leading-spaces-008.html -TRAILING WHITESPACE: css/css-text/white-space/pre-wrap-leading-spaces-009.html ## File types that should never be checked ## diff --git a/tests/wpt/web-platform-tests/loading/lazyload/common.js b/tests/wpt/web-platform-tests/loading/lazyload/common.js new file mode 100644 index 00000000000..f5013fc288f --- /dev/null +++ b/tests/wpt/web-platform-tests/loading/lazyload/common.js @@ -0,0 +1,13 @@ +// Helper to access the element, its associated loading promise, and also to +// resolve the promise. +class ElementLoadPromise { + constructor(element_id) { + this.element_id = element_id; + this.promise = new Promise(resolve => { + this.resolve = resolve + }); + } + element() { + return document.getElementById(this.element_id); + } +} diff --git a/tests/wpt/web-platform-tests/loading/lazyload/original-base-url-applied-tentative.html b/tests/wpt/web-platform-tests/loading/lazyload/original-base-url-applied-tentative.html new file mode 100644 index 00000000000..06f9c257ee9 --- /dev/null +++ b/tests/wpt/web-platform-tests/loading/lazyload/original-base-url-applied-tentative.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<head> + <title>Deferred iframes and images with loading='lazy' use the original base URL specified at the parse time</title> + <link rel="author" title="Raj T" href="mailto:rajendrant@chromium.org"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="common.js"></script> +</head> + +<!-- +Marked as tentative until https://github.com/whatwg/html/pull/3752 is landed. +--> + +<script> + const below_viewport_iframe = new ElementLoadPromise("below_viewport_iframe"); + + // Change the base URL and scroll down to load the deferred elements. + window.addEventListener("load", () => { + window.history.pushState(1, document.title, '/invalid-url-where-no-subresources-exist/') + below_viewport_iframe.element().scrollIntoView(); + }); + + async_test(function(t) { + below_viewport_iframe.promise.then( + t.step_func_done(function() { + assert_true(below_viewport_iframe.element().contentDocument.body.innerHTML.includes("<p>Subframe</p>")); + })); + }, "Test that when deferred iframe is loaded, it uses the base URL computed at parse time."); +</script> + +<body> + <div style="height:10000px;"></div> + <script> + // Change the base URL so that the iframe makes use of that in its relative + // URL to absolute URL computation at parse time. + window.history.pushState(1, document.title, 'resources/') + </script> + <iframe id="below_viewport_iframe" src="subframe.html" loading="lazy" width="200px" height="100px" onload="below_viewport_iframe.resolve();"> + </iframe> +</body> diff --git a/tests/wpt/web-platform-tests/loading/lazyload/original-referrer-policy-applied-tentative.sub.html b/tests/wpt/web-platform-tests/loading/lazyload/original-referrer-policy-applied-tentative.sub.html new file mode 100644 index 00000000000..2ffbc821c66 --- /dev/null +++ b/tests/wpt/web-platform-tests/loading/lazyload/original-referrer-policy-applied-tentative.sub.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<head> + <title>Deferred iframes and images with loading='lazy' use the original referrer-policy specified at the parse time</title> + <link rel="author" title="Raj T" href="mailto:rajendrant@chromium.org"> + <link rel="help" href="https://github.com/scott-little/lazyload"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="common.js"></script> +</head> + +<!-- +Marked as tentative until https://github.com/whatwg/html/pull/3752 is landed. +--> + +<script> + const below_viewport_iframe = new ElementLoadPromise("below_viewport_iframe"); + + // Change the referrer-policy and scroll down to load the deferred elements. + window.addEventListener("load", () => { + below_viewport_iframe.element().referrerPolicy = "no-referrer"; + document.getElementById("below_viewport_iframe").scrollIntoView(); + }); + + async_test(function(t) { + below_viewport_iframe.promise.then( + t.step_func_done(function() { + // The referer header should be the full URL (as specified in the iframe + // at parse time), and not the origin (as specified in meta referrer + // tag) or null (as overridden by iframe referrerpolicy=no-referrer). + assert_true(below_viewport_iframe.element().contentDocument.body.innerHTML + .includes("Referer: http://{{host}}:{{ports[http][0]}}/loading/lazyload/")); + })); + }, "Test that when deferred iframe is loaded, it uses the referrer-policy specified at parse time."); +</script> + +<body> + <meta name="referrer" content="origin"> + <div style="height:10000px;"></div> + <iframe id="below_viewport_iframe" src="/xhr/resources/echo-headers.py" loading="lazy" width="200px" height="100px" referrerpolicy="unsafe-url" onload="below_viewport_iframe.resolve();"> + </iframe> +</body> diff --git a/tests/wpt/web-platform-tests/loading/lazyload/picture-loading-lazy.tentative.html b/tests/wpt/web-platform-tests/loading/lazyload/picture-loading-lazy.tentative.html new file mode 100644 index 00000000000..58f8c3a4d5a --- /dev/null +++ b/tests/wpt/web-platform-tests/loading/lazyload/picture-loading-lazy.tentative.html @@ -0,0 +1,68 @@ +<!DOCTYPE html> +<head> + <title>Images with loading='lazy' in picture elements load when near the viewport</title> + <link rel="author" title="Raj T" href="mailto:rajendrant@chromium.org"> + <link rel="help" href="https://github.com/scott-little/lazyload"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="common.js"></script> +</head> + +<!-- +Marked as tentative until https://github.com/whatwg/html/pull/3752 is landed. +--> + +<script> +const in_viewport_img = new ElementLoadPromise("in_viewport_img"); +const lazy_attribute_img = new ElementLoadPromise("lazy_attribute_img"); +const eager_attribute_img = new ElementLoadPromise("eager_attribute_img"); + +const document_load_promise = new Promise(resolve => { + window.addEventListener("load", resolve); +}); + +async_test(function(t) { + document_load_promise.then(t.step_func_done(function() { + assert_false(lazy_attribute_img.element().complete); + lazy_attribute_img.element().scrollIntoView(); + })); +}, "Test that the loading=lazy <picture> element below viewport was deferred, on document load."); + +async_test(function(t) { + in_viewport_img.promise.then(t.step_func_done()); +}, "Test that in viewport <picture> element was loaded"); + +async_test(function(t) { + eager_attribute_img.promise.then(t.step_func_done()); +}, "Test that eager <picture> element was loaded"); + +async_test(function(t) { + lazy_attribute_img.promise.then(t.step_func_done()); +}, "Test that deferred <picture> element was loaded-in as well, after scrolled down"); + +</script> + +<body> +<picture> + <source sizes='50vw' srcset='resources/image.png?in_viewport_img'> + <img id='in_viewport_img' src='img-not-loaded.png' loading="lazy" onload="in_viewport_img.resolve();"> +</picture> +<div style="height:10000px;"></div> +<picture> + <source sizes='50vw' srcset='resources/image.png?lazy_attribute_img'> + <img id='lazy_attribute_img' src='img-not-loaded.png' loading="lazy" onload="lazy_attribute_img.resolve();"> +</picture> +<picture> + <source sizes='50vw' srcset='resources/image.png?eager_attribute_img'> + <img id='eager_attribute_img' src='img-not-loaded.png' loading="eager" onload="eager_attribute_img.resolve();"> +</picture> + +<!-- + This async script loads very slowly in order to ensure that, if the + below_viewport image has started loading, it has a chance to finish + loading before window.load() happens, so that the test will dependably fail + in that case instead of potentially passing depending on how long different + resource fetches take. +--> +<script async src="/common/slow.py"></script> +</body> diff --git a/tests/wpt/web-platform-tests/longtask-timing/idlharness.window.js b/tests/wpt/web-platform-tests/longtask-timing/idlharness.window.js index 0ef7e85440e..fd9a3f042f6 100644 --- a/tests/wpt/web-platform-tests/longtask-timing/idlharness.window.js +++ b/tests/wpt/web-platform-tests/longtask-timing/idlharness.window.js @@ -7,8 +7,10 @@ idl_test( ['longtasks'], - ['performance-timeline'], + ['performance-timeline', 'hr-time'], (idl_array, t) => new Promise((resolve, reject) => { + + const longTask = () => { const begin = self.performance.now(); while (self.performance.now() < begin + 100); diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_support.js b/tests/wpt/web-platform-tests/pointerevents/pointerevent_support.js index 3b37f48889f..29d48e03b0a 100644 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_support.js +++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_support.js @@ -272,7 +272,7 @@ function touchScrollInTarget(target, direction) { throw("scroll direction '" + direction + "' is not expected, direction should be 'down', 'up', 'left' or 'right'"); } return new test_driver.Actions() - .addPointer("pointer1", "touch") + .addPointer("touchPointer1", "touch") .pointerMove(0, 0, {origin: target}) .pointerDown() .pointerMove(x_delta, y_delta, {origin: target}) diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-keyboard.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-keyboard.html index fdddd3313f4..aeff71331dd 100644 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-keyboard.html +++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-keyboard.html @@ -121,6 +121,7 @@ // Inject keyboard scroll inputs. actions_promise = new test_driver.Actions() + .addPointer("mousePointer1", "mouse") .pointerMove(0, 0, {origin: target0}) .pointerDown() .pointerUp() diff --git a/tests/wpt/web-platform-tests/resources/idlharness.js b/tests/wpt/web-platform-tests/resources/idlharness.js index cb294c072de..9be554d96b6 100644 --- a/tests/wpt/web-platform-tests/resources/idlharness.js +++ b/tests/wpt/web-platform-tests/resources/idlharness.js @@ -193,6 +193,12 @@ self.IdlArray = function() this["implements"] = {}; this["includes"] = {}; this["inheritance"] = {}; + + /** + * Record of skipped IDL items, in case we later realize that they are a + * dependency (to retroactively process them). + */ + this.skipped = new Map(); }; IdlArray.prototype.add_idls = function(raw_idls, options) @@ -244,22 +250,41 @@ IdlArray.prototype.add_dependency_idls = function(raw_idls, options) all_deps.add(k); this.includes[k].forEach(v => all_deps.add(v)); }); - this.partials.map(p => p.name).forEach(v => all_deps.add(v)); - // Add the attribute idlTypes of all the nested members of all tested idls. - for (const obj of [this.members, this.partials]) { - const tested = Object.values(obj).filter(m => !m.untested && m.members); - for (const parsed of tested) { - for (const attr of Object.values(parsed.members).filter(m => !m.untested && m.type === 'attribute')) { - all_deps.add(attr.idlType.idlType); + this.partials.forEach(p => all_deps.add(p.name)); + + // Add the attribute idlTypes of all the nested members of idls. + const attrDeps = parsedIdls => { + return parsedIdls.reduce((deps, parsed) => { + if (parsed.members) { + for (const attr of Object.values(parsed.members).filter(m => m.type === 'attribute')) { + let attrType = attr.idlType; + // Check for generic members (e.g. FrozenArray<MyType>) + if (attrType.generic) { + deps.add(attrType.generic); + attrType = attrType.idlType; + } + deps.add(attrType.idlType); + } } - } - } + if (parsed.base in this.members) { + attrDeps([this.members[parsed.base]]).forEach(dep => deps.add(dep)); + } + return deps; + }, new Set()); + }; + + const testedMembers = Object.values(this.members).filter(m => !m.untested && m.members); + attrDeps(testedMembers).forEach(dep => all_deps.add(dep)); + + const testedPartials = this.partials.filter(m => !m.untested && m.members); + attrDeps(testedPartials).forEach(dep => all_deps.add(dep)); + if (options && options.except && options.only) { throw new IdlHarnessError("The only and except options can't be used together."); } - const should_skip = name => { + const defined_or_untested = name => { // NOTE: Deps are untested, so we're lenient, and skip re-encountered definitions. // e.g. for 'idl' containing A:B, B:C, C:D // array.add_idls(idl, {only: ['A','B']}). @@ -268,9 +293,7 @@ IdlArray.prototype.add_dependency_idls = function(raw_idls, options) return name in this.members || this.is_excluded_by_options(name, options); } - // Record of skipped items, in case we later determine they are a dependency. // Maps name -> [parsed_idl, ...] - const skipped = new Map(); const process = function(parsed) { var deps = []; if (parsed.name) { @@ -284,13 +307,15 @@ IdlArray.prototype.add_dependency_idls = function(raw_idls, options) } deps = deps.filter(function(name) { - if (!name || should_skip(name) || !all_deps.has(name)) { + if (!name + || name === parsed.name && defined_or_untested(name) + || !all_deps.has(name)) { // Flag as skipped, if it's not already processed, so we can // come back to it later if we retrospectively call it a dep. if (name && !(name in this.members)) { - skipped.has(name) - ? skipped.get(name).push(parsed) - : skipped.set(name, [parsed]); + this.skipped.has(name) + ? this.skipped.get(name).push(parsed) + : this.skipped.set(name, [parsed]); } return false; } @@ -328,9 +353,9 @@ IdlArray.prototype.add_dependency_idls = function(raw_idls, options) } for (const deferred of follow_up) { - if (skipped.has(deferred)) { - const next = skipped.get(deferred); - skipped.delete(deferred); + if (this.skipped.has(deferred)) { + const next = this.skipped.get(deferred); + this.skipped.delete(deferred); next.forEach(process); } } diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/interfaces-window.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/interfaces-window.https.html index f70cf40931d..cc3bdaf11fc 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/interfaces-window.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/interfaces-window.https.html @@ -10,8 +10,8 @@ 'use strict'; promise_test(async (t) => { - const srcs = ['dom', 'html', 'service-workers', 'dedicated-workers']; - const [dom, html, serviceWorkerIdl, dedicated] = await Promise.all( + const srcs = ['dom', 'html', 'service-workers']; + const [dom, html, serviceWorkerIdl] = await Promise.all( srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text()))); var idlArray = new IdlArray(); @@ -29,7 +29,6 @@ promise_test(async (t) => { 'Cache', 'CacheStorage', ]}); - idlArray.add_dependency_idls(dedicated); idlArray.add_dependency_idls(dom); idlArray.add_dependency_idls(html); idlArray.add_objects({ diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-smaller-body-after-update-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-smaller-body-after-update-worker.js new file mode 100644 index 00000000000..d43f6b2f5c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-smaller-body-after-update-worker.js @@ -0,0 +1 @@ +// Hello world! diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-smaller-body-before-update-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-smaller-body-before-update-worker.js new file mode 100644 index 00000000000..30c8783a702 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-smaller-body-before-update-worker.js @@ -0,0 +1,2 @@ +// Hello world! +// **with extra body** diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-worker-from-file.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-worker-from-file.py new file mode 100644 index 00000000000..7604719c8e0 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-worker-from-file.py @@ -0,0 +1,31 @@ +import os + +def serve_js_from_file(request, response, filename): + body = '' + path = os.path.join(os.path.dirname(__file__), filename) + with open(path, 'rb') as f: + body = f.read() + return ( + [ + ('Cache-Control', 'no-cache, must-revalidate'), + ('Pragma', 'no-cache'), + ('Content-Type', 'application/javascript') + ], body) + +def main(request, response): + key = request.GET["Key"] + + visited_count = request.server.stash.take(key) + if visited_count is None: + visited_count = 0 + + # Keep how many times the test requested this resource. + visited_count += 1 + request.server.stash.put(key, visited_count) + + # Serve a file based on how many times it's requested. + if visited_count == 1: + return serve_js_from_file(request, response, request.GET["First"]) + if visited_count == 2: + return serve_js_from_file(request, response, request.GET["Second"]) + raise "Unknown state" diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/update.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/update.https.html index 7232419cd0a..f7fae35ed28 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/update.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/update.https.html @@ -10,11 +10,12 @@ 'use strict'; const SCOPE = 'resources/simple.txt'; -const WORKER_URL_BASE = 'resources/update-worker.py'; -async function prepare_ready_registration(t, mode) { +// Create a service worker (update-worker.py). The response to update() will be +// different based on the mode. +async function prepare_ready_registration_with_mode(t, mode) { const key = token(); - const worker_url = `${WORKER_URL_BASE}?Key=${key}&Mode=${mode}`; + const worker_url = `resources/update-worker.py?Key=${key}&Mode=${mode}`; const expected_url = normalizeURL(worker_url); const registration = await service_worker_unregister_and_register( t, worker_url, SCOPE); @@ -28,6 +29,27 @@ async function prepare_ready_registration(t, mode) { return [registration, expected_url]; } +// Create a service worker (update-worker-from-file.py), which is initially +// |initial_worker| and |updated_worker| later. +async function prepare_ready_registration_with_file( + t, initial_worker, updated_worker) { + const key = token(); + const worker_url = `resources/update-worker-from-file.py?` + + `First=${initial_worker}&Second=${updated_worker}&Key=${key}`; + const expected_url = normalizeURL(worker_url); + + const registration = await service_worker_unregister_and_register( + t, worker_url, SCOPE); + await wait_for_state(t, registration.installing, 'activated'); + assert_equals(registration.installing, null, + 'prepare_ready: installing'); + assert_equals(registration.waiting, null, + 'prepare_ready: waiting'); + assert_equals(registration.active.scriptURL, expected_url, + 'prepare_ready: active'); + return [registration, expected_url]; +} + function assert_installing_and_active(registration, expected_url) { assert_equals(registration.installing.scriptURL, expected_url, 'assert_installing_and_active: installing'); @@ -57,7 +79,7 @@ function assert_active_only(registration, expected_url) { promise_test(async t => { const [registration, expected_url] = - await prepare_ready_registration(t, 'normal'); + await prepare_ready_registration_with_mode(t, 'normal'); t.add_cleanup(() => registration.unregister()); await Promise.all([registration.update(), wait_for_update(t, registration)]); @@ -72,34 +94,34 @@ promise_test(async t => { promise_test(async t => { const [registration, expected_url] = - await prepare_ready_registration(t, 'bad_mime_type'); + await prepare_ready_registration_with_mode(t, 'bad_mime_type'); t.add_cleanup(() => registration.unregister()); - promise_rejects(t, 'SecurityError', registration.update()); + await promise_rejects(t, 'SecurityError', registration.update()); assert_active_only(registration, expected_url); }, 'update() should fail when mime type is invalid.'); promise_test(async t => { const [registration, expected_url] = - await prepare_ready_registration(t, 'redirect'); + await prepare_ready_registration_with_mode(t, 'redirect'); t.add_cleanup(() => registration.unregister()); - promise_rejects(t, new TypeError(), registration.update()) + await promise_rejects(t, new TypeError(), registration.update()); assert_active_only(registration, expected_url); }, 'update() should fail when a response for the main script is redirect.'); promise_test(async t => { const [registration, expected_url] = - await prepare_ready_registration(t, 'syntax_error'); + await prepare_ready_registration_with_mode(t, 'syntax_error'); t.add_cleanup(() => registration.unregister()); - promise_rejects(t, new TypeError(), registration.update()); + await promise_rejects(t, new TypeError(), registration.update()); assert_active_only(registration, expected_url); }, 'update() should fail when a new script contains a syntax error.'); promise_test(async t => { const [registration, expected_url] = - await prepare_ready_registration(t, 'throw_install'); + await prepare_ready_registration_with_mode(t, 'throw_install'); t.add_cleanup(() => registration.unregister()); await Promise.all([registration.update(), wait_for_update(t, registration)]); @@ -108,7 +130,7 @@ promise_test(async t => { promise_test(async t => { const [registration, expected_url] = - await prepare_ready_registration(t, 'normal'); + await prepare_ready_registration_with_mode(t, 'normal'); t.add_cleanup(() => registration.unregister()); // We need to hold a client alive so that unregister() below doesn't remove @@ -117,8 +139,26 @@ promise_test(async t => { const frame = await with_iframe(SCOPE); t.add_cleanup(() => frame.remove()); - promise_rejects( + await promise_rejects( t, new TypeError(), Promise.all([registration.unregister(), registration.update()])); -}, 'update() should fail when the pending uninstall flag is set.') +}, 'update() should fail when the pending uninstall flag is set.'); + +promise_test(async t => { + const [registration, expected_url] = + await prepare_ready_registration_with_file( + t, + 'update-smaller-body-before-update-worker.js', + 'update-smaller-body-after-update-worker.js'); + t.add_cleanup(() => registration.unregister()); + + await Promise.all([registration.update(), wait_for_update(t, registration)]); + assert_installing_and_active(registration, expected_url); + + await wait_for_state(t, registration.installing, 'installed'); + assert_waiting_and_active(registration, expected_url); + + await wait_for_state(t, registration.waiting, 'activated'); + assert_active_only(registration, expected_url); +}, 'update() should succeed when the script shrinks.'); </script> diff --git a/tests/wpt/web-platform-tests/sms/interceptor.https.html b/tests/wpt/web-platform-tests/sms/interceptor.https.html index b7e8fd53bff..86b21922284 100644 --- a/tests/wpt/web-platform-tests/sms/interceptor.https.html +++ b/tests/wpt/web-platform-tests/sms/interceptor.https.html @@ -165,4 +165,21 @@ promise_test(async t => { let sms = await navigator.sms.receive({timeout: undefined}); assert_equals(sms.content, "hello"); }, 'Should use default value for timeout (undefined)'); + +promise_test(async t => { + await expect(receive).andReturn((timeout) => { + return Promise.resolve({ + status: Status.kCancelled, + }); + }); + + try { + await navigator.sms.receive(); + assert_unreached('Expected CancelledError to be thrown.'); + } catch (error) { + assert_equals(error.name, "AbortError"); + assert_equals(error.message, "SMSReceiver was aborted."); + } +}, 'Deal with cancelled requests'); + </script> diff --git a/tests/wpt/web-platform-tests/sms/sms_provider.js b/tests/wpt/web-platform-tests/sms/sms_provider.js index 6a54e47b241..4506135551c 100644 --- a/tests/wpt/web-platform-tests/sms/sms_provider.js +++ b/tests/wpt/web-platform-tests/sms/sms_provider.js @@ -73,6 +73,7 @@ function intercept() { Status.kSuccess = blink.mojom.SmsStatus.kSuccess; Status.kTimeout = blink.mojom.SmsStatus.kTimeout; + Status.kCancelled = blink.mojom.SmsStatus.kCancelled; return smsReceiverImpl; } diff --git a/tests/wpt/web-platform-tests/std-toast/attributes.html b/tests/wpt/web-platform-tests/std-toast/attributes.html index 97bab585c70..9b87280b668 100644 --- a/tests/wpt/web-platform-tests/std-toast/attributes.html +++ b/tests/wpt/web-platform-tests/std-toast/attributes.html @@ -100,11 +100,6 @@ testToastElement((toast) => { assertToastNotShown(toast); }, 'setting `toast.open` to some falsy value on a shown toast will hide the toast'); -testToastElement((toast) => { - toast.toggleAttribute('open'); - assert_true(toast.open); -}, 'toggling `open` on a hidden toast sets `toast.open` to true'); - testToastElementAsync((t, toast) => { toast.toggleAttribute('open', true); @@ -115,7 +110,18 @@ testToastElementAsync((t, toast) => { }, 'toggling open attribute does not start timeout'); testToastElement((toast) => { - const permitted_properties = ['constructor', 'show', 'hide', 'toggle', 'open', 'action', 'closeButton']; + const permitted_properties = ['constructor', 'show', 'hide', 'toggle', 'open', 'action', 'closeButton', 'type']; assert_array_equals(permitted_properties.sort(), Object.getOwnPropertyNames(toast.__proto__).sort()); }, 'toast only exposes certain properties'); + +testToastElement((toast) => { + assert_false(toast.hasAttribute('type')); + assert_equals(toast.type, ''); +}, 'default type is empty string without attribute present'); + +testToastElement((toast) => { + toast.type = 'info'; + assert_equals(toast.type, ''); + assert_equals(toast.getAttribute('type'), 'info'); +}, 'info was briefly a valid type, but no longer is, so it will return empty string'); </script> diff --git a/tests/wpt/web-platform-tests/std-toast/reflection.html b/tests/wpt/web-platform-tests/std-toast/reflection.html new file mode 100644 index 00000000000..36cbaf65228 --- /dev/null +++ b/tests/wpt/web-platform-tests/std-toast/reflection.html @@ -0,0 +1,24 @@ +<!doctype html> +<title>HTML5 reflection tests: std-toast</title> +<meta name=timeout content=long> + +<div id=log></div> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/dom/original-harness.js"></script> +<script src="/html/dom/new-harness.js"></script> + +<script type="module"> +import 'std:elements/toast'; + +const toastElement = { + 'std-toast': { + open: 'boolean', + type: {type: 'enum', keywords: ['success', 'error', 'warning']}, + }, +}; + +mergeElements(toastElement); +</script> +<script src="/html/dom/reflection.js" defer></script> diff --git a/tests/wpt/web-platform-tests/std-toast/styles.html b/tests/wpt/web-platform-tests/std-toast/styles.html index 98e6723c3c8..1db8620485d 100644 --- a/tests/wpt/web-platform-tests/std-toast/styles.html +++ b/tests/wpt/web-platform-tests/std-toast/styles.html @@ -61,4 +61,40 @@ testToastElement((toast) => { assertComputedStyleMapsEqual(toast, mockToast); }, 'the computed style map of a closed unstyled toast is the same as a span given toast defaults'); -</script>
\ No newline at end of file + +testToastElement((toast) => { + toast.type = 'error'; + + const styles = window.getComputedStyle(toast); + assert_equals(styles.borderColor, 'rgb(255, 0, 0)'); +}, 'changing type to error changes the border color to red'); + +testToastElement((toast) => { + toast.type = 'warning'; + + const styles = window.getComputedStyle(toast); + assert_equals(styles.borderColor, 'rgb(255, 165, 0)'); +}, 'changing type to warning changes the border color to orange'); + +testToastElement((toast) => { + toast.type = 'success'; + + const styles = window.getComputedStyle(toast); + assert_equals(styles.borderColor, 'rgb(0, 128, 0)'); +}, 'changing type to success changes the border color to green'); + +testToastElement((toast) => { + const styler = document.createElement('style'); + styler.append(` + [type=error i] { + border-color: pink; + } + `); + document.querySelector('main').appendChild(styler); + + toast.type = 'error'; + + const styles = window.getComputedStyle(toast); + assert_equals(styles.borderColor, 'rgb(255, 192, 203)'); +}, 'outside styles can set type styles'); +</script> diff --git a/tests/wpt/web-platform-tests/streams/byte-length-queuing-strategy.any.js b/tests/wpt/web-platform-tests/streams/byte-length-queuing-strategy.any.js index d47e7cd4faa..6a61adcdc96 100644 --- a/tests/wpt/web-platform-tests/streams/byte-length-queuing-strategy.any.js +++ b/tests/wpt/web-platform-tests/streams/byte-length-queuing-strategy.any.js @@ -107,3 +107,26 @@ test(() => { 'ByteLengthQueuingStrategy.name must be "ByteLengthQueuingStrategy"'); }, 'ByteLengthQueuingStrategy.name is correct'); + +class SubClass extends ByteLengthQueuingStrategy { + size() { + return 2; + } + + subClassMethod() { + return true; + } +} + +test(() => { + + const sc = new SubClass({highWaterMark: 77}); + assert_equals(sc.constructor.name, 'SubClass', + 'constructor.name should be correct'); + assert_equals(sc.highWaterMark, 77, + 'highWaterMark should come from the parent class'); + assert_equals(sc.size(), 2, + 'size() on the subclass should override the parent'); + assert_true(sc.subClassMethod(), 'subClassMethod() should work'); + +}, 'subclassing ByteLengthQueuingStrategy should work correctly'); diff --git a/tests/wpt/web-platform-tests/streams/count-queuing-strategy.any.js b/tests/wpt/web-platform-tests/streams/count-queuing-strategy.any.js index 20bb4c1842d..5aae61eda33 100644 --- a/tests/wpt/web-platform-tests/streams/count-queuing-strategy.any.js +++ b/tests/wpt/web-platform-tests/streams/count-queuing-strategy.any.js @@ -106,3 +106,26 @@ test(() => { 'CountQueuingStrategy.name must be "CountQueuingStrategy"'); }, 'CountQueuingStrategy.name is correct'); + +class SubClass extends CountQueuingStrategy { + size() { + return 2; + } + + subClassMethod() { + return true; + } +} + +test(() => { + + const sc = new SubClass({highWaterMark: 77}); + assert_equals(sc.constructor.name, 'SubClass', + 'constructor.name should be correct'); + assert_equals(sc.highWaterMark, 77, + 'highWaterMark should come from the parent class'); + assert_equals(sc.size(), 2, + 'size() on the subclass should override the parent'); + assert_true(sc.subClassMethod(), 'subClassMethod() should work'); + +}, 'subclassing CountQueuingStrategy should work correctly'); diff --git a/tests/wpt/web-platform-tests/tools/wpt/browser.py b/tests/wpt/web-platform-tests/tools/wpt/browser.py index fe794a59a88..1f013415316 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/browser.py +++ b/tests/wpt/web-platform-tests/tools/wpt/browser.py @@ -408,10 +408,10 @@ class Firefox(Browser): return m.group(1) -class Fennec(Browser): - """Fennec-specific interface.""" +class FirefoxAndroid(Browser): + """Android-specific Firefox interface.""" - product = "fennec" + product = "firefox_android" requirements = "requirements_firefox.txt" def install(self, dest=None, channel=None): diff --git a/tests/wpt/web-platform-tests/tools/wpt/run.py b/tests/wpt/web-platform-tests/tools/wpt/run.py index 4693bb7f11f..6acc5b8e740 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/run.py +++ b/tests/wpt/web-platform-tests/tools/wpt/run.py @@ -251,9 +251,9 @@ Consider installing certutil via your OS package manager or directly.""") kwargs["extra_prefs"].append("media.navigator.streams.fake=true") -class Fennec(BrowserSetup): - name = "fennec" - browser_cls = browser.Fennec +class FirefoxAndroid(BrowserSetup): + name = "firefox_android" + browser_cls = browser.FirefoxAndroid def setup_kwargs(self, kwargs): pass @@ -510,8 +510,8 @@ class Epiphany(BrowserSetup): product_setup = { - "fennec": Fennec, "firefox": Firefox, + "firefox_android": FirefoxAndroid, "chrome": Chrome, "chrome_android": ChromeAndroid, "chrome_ios": ChromeiOS, diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/__init__.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/__init__.py index 8698e816305..18434e499dc 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/__init__.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/__init__.py @@ -28,8 +28,8 @@ product_list = ["chrome", "edgechromium", "edge", "edge_webdriver", - "fennec", "firefox", + "firefox_android", "ie", "safari", "sauce", diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/fennec.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox_android.py index b1f535a8540..d8d5c7f7284 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/fennec.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox_android.py @@ -20,9 +20,9 @@ from .firefox import (get_timeout_multiplier, # noqa: F401 FirefoxBrowser) # noqa: F401 -__wptrunner__ = {"product": "fennec", +__wptrunner__ = {"product": "firefox_android", "check_args": "check_args", - "browser": "FennecBrowser", + "browser": "FirefoxAndroidBrowser", "executor": {"testharness": "MarionetteTestharnessExecutor", "reftest": "MarionetteRefTestExecutor"}, "browser_kwargs": "browser_kwargs", @@ -100,31 +100,19 @@ def write_hosts_file(config, device): os.remove(hosts_path) -class FennecBrowser(FirefoxBrowser): +class FirefoxAndroidBrowser(FirefoxBrowser): init_timeout = 300 shutdown_timeout = 60 - def __init__(self, logger, prefs_root, test_type, package_name=None, + def __init__(self, logger, prefs_root, test_type, package_name="org.mozilla.geckoview.test", device_serial="emulator-5444", **kwargs): FirefoxBrowser.__init__(self, logger, None, prefs_root, test_type, **kwargs) - self._package_name = package_name + self.package_name = package_name self.device_serial = device_serial self.tests_root = kwargs["tests_root"] self.install_fonts = kwargs["install_fonts"] self.stackwalk_binary = kwargs["stackwalk_binary"] - @property - def package_name(self): - """ - Name of app to run on emulator. - """ - if self._package_name is None: - self._package_name = "org.mozilla.fennec" - user = os.getenv("USER") - if user: - self._package_name += "_" + user - return self._package_name - def start(self, **kwargs): if self.marionette_port is None: self.marionette_port = get_free_port() 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 new file mode 100644 index 00000000000..73bbb4f8ab5 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-nfc/NDEFMessage_constructor.https.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<title>NDEFMessage constructor</title> +<link rel="help" href="https://w3c.github.io/web-nfc/#dom-ndefmessage"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/nfc_help.js"></script> +<script> + + test(() => { + assert_equals(NDEFMessage.length, 1); + assert_throws(new TypeError, () => new NDEFMessage()); + }, 'NDEFMessage constructor without init dict'); + + test(() => { + const message = new NDEFMessage(null); + assert_equals(message.url.length, 0, 'empty url'); + assert_equals(message.records.length, 0, 'empty records'); + }, 'NDEFMessage constructor with null init dict'); + + test(() => { + const message = new NDEFMessage( + createMessage([createTextRecord(test_text_data)])); + assert_equals(message.records.length, 1, 'one text record'); + assert_equals(message.records[0].recordType, 'text', 'messageType'); + assert_equals(message.records[0].mediaType, 'text/plain', 'mediaType'); + assert_true(typeof message.records[0].data() === 'string'); + assert_equals(message.records[0].data(), test_text_data, + 'data() contains the same text content'); + }, 'NDEFMessage constructor with a text record'); + +</script> 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 new file mode 100644 index 00000000000..81148856473 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-nfc/NDEFRecord_constructor.https.html @@ -0,0 +1,71 @@ +<!DOCTYPE html> +<title>NDEFRecord constructor</title> +<link rel="help" href="https://w3c.github.io/web-nfc/#dom-ndefrecord"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/nfc_help.js"></script> +<script> + + test(() => { + assert_equals(NDEFRecord.length, 1); + assert_throws(new TypeError, () => new NDEFRecord()); + }, 'NDEFRecord constructor without init dict'); + + test(() => { + const record = new NDEFRecord(null); + assert_equals(record.recordType.length, 0, 'empty recordType'); + assert_equals(record.mediaType.length, 0, 'empty mediaType'); + assert_equals(record.data(), null, 'null data'); + }, 'NDEFRecord constructor with null init dict'); + + 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'); + + const data_1 = record.data(); + assert_true(data_1 instanceof ArrayBuffer); + assert_not_equals(data_1, buffer, 'data() returns a new object'); + assert_array_equals(new Uint8Array(data_1), original_data, + 'data() has the same content with the original buffer'); + + const data_2 = record.data(); + assert_true(data_2 instanceof ArrayBuffer); + assert_not_equals(data_2, data_1, 'data() again returns another new object'); + assert_array_equals(new Uint8Array(data_2), original_data, + 'data() has the same content with the original buffer'); + + buffer_view.set([4, 3, 2, 1]); + const data_3 = record.data(); + assert_true(data_3 instanceof ArrayBuffer); + assert_array_equals(new Uint8Array(data_1), original_data, + 'Modifying the original buffer does not affect data() content'); + assert_array_equals(new Uint8Array(data_2), original_data, + 'Modifying the original buffer does not affect data() content'); + assert_array_equals(new Uint8Array(data_3), original_data, + 'Modifying the original buffer does not affect data() content'); + }, 'NDEFRecord constructor with opaque data'); + + test(() => { + const record = new NDEFRecord(createJsonRecord(test_json_data)); + assert_equals(record.recordType, 'json', 'recordType'); + assert_equals(record.mediaType, 'application/json', 'mediaType'); + + const data_1 = record.data(); + assert_true(typeof data_1 === 'object'); + assert_not_equals(data_1, test_json_data, 'data() returns a new object'); + assert_object_equals(data_1, test_json_data, + 'data() has the same content with the original dictionary'); + + const data_2 = record.data(); + assert_true(typeof data_2 === 'object'); + assert_not_equals(data_2, data_1, 'data() again returns another new object'); + assert_object_equals(data_2, test_json_data, + 'data() has the same content with the original dictionary'); + }, 'NDEFRecord constructor with json data'); + +</script> diff --git a/tests/wpt/web-platform-tests/web-nfc/NFCReadingEvent_constructor.https.html b/tests/wpt/web-platform-tests/web-nfc/NFCReadingEvent_constructor.https.html index 3c4242943d6..172b0a619c2 100644 --- a/tests/wpt/web-platform-tests/web-nfc/NFCReadingEvent_constructor.https.html +++ b/tests/wpt/web-platform-tests/web-nfc/NFCReadingEvent_constructor.https.html @@ -13,10 +13,28 @@ test(() => { const message = createMessage([createJsonRecord(test_json_data)]); + const event = new NFCReadingEvent('type', {serialNumber: null, message: message}); + assert_equals(event.serialNumber, '', 'serialNumber'); + }, 'NFCReadingEvent constructor with null serialNumber'); + + test(() => { + const message = createMessage([createJsonRecord(test_json_data)]); + const event = new NFCReadingEvent('type', {message: message}); + assert_equals(event.serialNumber, '', 'serialNumber'); + }, 'NFCReadingEvent constructor with serialNumber not present'); + + test(() => { + const event = new NFCReadingEvent('type', {serialNumber: '', message: null}); + assert_equals(0, event.message.records.length, 'no records'); + assert_equals(0, event.message.url.length, 'empty url'); + }, 'NFCReadingEvent constructor with null message'); + + test(() => { + const message = createMessage([createJsonRecord(test_json_data)]); const event = new NFCReadingEvent('type', {serialNumber: '', message: message}); assert_equals(event.type, 'type', 'type'); assert_equals(event.serialNumber, '', 'serialNumber'); - assertWebNDEFMessagesEqual(event.message, message, 'message'); + assertWebNDEFMessagesEqual(event.message, new NDEFMessage(message), 'message'); }, 'NFCReadingEvent constructor with valid parameters'); </script> diff --git a/tests/wpt/web-platform-tests/web-nfc/resources/nfc_help.js b/tests/wpt/web-platform-tests/web-nfc/resources/nfc_help.js index 812d0f07118..67fd5af381c 100644 --- a/tests/wpt/web-platform-tests/web-nfc/resources/nfc_help.js +++ b/tests/wpt/web-platform-tests/web-nfc/resources/nfc_help.js @@ -6,6 +6,7 @@ const test_number_data = 42; const test_json_data = {level: 1, score: 100, label: 'Game'}; const test_url_data = "https://w3c.github.io/web-nfc"; const test_buffer_data = new ArrayBuffer(test_text_byte_array.length); +const test_buffer_view = new Uint8Array(test_buffer_data).set(test_text_byte_array); function noop() {}; @@ -55,14 +56,14 @@ function assertWebNDEFMessagesEqual(a, b) { let recordB = b.records[i]; assert_equals(recordA.recordType, recordB.recordType); assert_equals(recordA.mediaType, recordB.mediaType); - if (recordA.data instanceof ArrayBuffer) { - assert_array_equals(new Uint8Array(recordA.data), - new Uint8Array(recordB.data)); - } else if (typeof recordA.data === 'object') { - assert_object_equals(recordA.data, recordB.data); - } else if (typeof recordA.data === 'number' - || typeof recordA.data === 'string') { - assert_true(recordA.data == recordB.data); + if (recordA.data() instanceof ArrayBuffer) { + assert_array_equals(new Uint8Array(recordA.data()), + new Uint8Array(recordB.data())); + } else if (typeof recordA.data() === 'object') { + assert_object_equals(recordA.data(), recordB.data()); + } else if (typeof recordA.data() === 'number' + || typeof recordA.data() === 'string') { + assert_true(recordA.data() == recordB.data()); } } } diff --git a/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_contextmenu.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_contextmenu.py index c64c51252a5..fda3f18bbc1 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_contextmenu.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_contextmenu.py @@ -18,7 +18,7 @@ def test_control_click(session, test_actions_page, key_chain, mouse_chain, modif outer = session.find.css("#outer", all=False) mouse_chain.click(element=outer) session.actions.perform([key_chain.dict, mouse_chain.dict]) - if os == "windows": + if os != "mac": expected = [ {"type": "mousemove"}, {"type": "mousedown"}, diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-getStats.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-getStats.https.html index c2c4e8e3717..a42086a3733 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-getStats.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-getStats.https.html @@ -172,14 +172,14 @@ - All RTCOutboundRTPStreamStats objects corresponding to selector. - All stats objects referenced directly or indirectly by the RTCOutboundRTPStreamStats objects added. - */ + */ promise_test(async t => { const pc = createPeerConnectionWithCleanup(t); const pc2 = createPeerConnectionWithCleanup(t); let [track, mediaStream] = await getTrackFromUserMedia('audio'); pc.addTrack(track, mediaStream); - exchangeIceCandidates(pc, pc2); + coupleIceCandidates(pc, pc2); await doSignalingHandshake(pc, pc2); await listenToIceConnected(pc); const stats = await pc.getStats(track); @@ -202,11 +202,16 @@ let [track, mediaStream] = await getTrackFromUserMedia('audio'); pc.addTrack(track, mediaStream); - exchangeIceCandidates(pc, pc2); + coupleIceCandidates(pc, pc2); await doSignalingHandshake(pc, pc2); - await new Promise(resolve => { - pc2.getReceivers()[0].track.addEventListener('unmute', resolve); - }); + // Wait for unmute if the track is not already unmuted. + // According to spec, it should be muted when being created, but this + // is not what this test is testing, so allow it to be unmuted. + if (pc2.getReceivers()[0].track.muted) { + await new Promise(resolve => { + pc2.getReceivers()[0].track.addEventListener('unmute', resolve); + }); + } const stats = await pc2.getStats(track); validateStatsReport(stats); assert_stats_report_has_stats(stats, ['inbound-rtp']); @@ -335,7 +340,7 @@ })); - exchangeIceCandidates(pc1, pc2); + coupleIceCandidates(pc1, pc2); doSignalingHandshake(pc1, pc2); })) .catch(t.step_func(err => { diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html index cae62b24b6c..2315c12f6c8 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html @@ -7,9 +7,6 @@ <script> 'use strict'; - // Test is based on the following editor draft: - // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html - // The following helper functions are called from RTCPeerConnection-helper.js: // assert_session_desc_similar() // generateAudioReceiveOnlyOffer @@ -162,27 +159,77 @@ }); }, 'setRemoteDescription(offer) with invalid SDP should reject with RTCError'); - /* - 4.3.1.6. Set the RTCSessionSessionDescription - 2.1.3. If the description's type is invalid for the current signaling state of - connection, then reject p with a newly created InvalidStateError and abort - these steps. - - [JSEP] - 5.6. If the type is "offer", the PeerConnection state MUST be either "stable" or - "have-remote-offer". - */ - promise_test(t => { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - return pc.createOffer() - .then(offer => { - return pc.setLocalDescription(offer) - .then(() => { - return promise_rejects(t, 'InvalidStateError', - pc.setRemoteDescription(offer)); - }); - }); - }, 'setRemoteDescription(offer) from have-local-offer state should reject with InvalidStateError'); + promise_test(async t => { + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + await pc1.setLocalDescription(await pc1.createOffer()); + await pc1.setRemoteDescription(await pc2.createOffer()); + assert_equals(pc1.signalingState, 'have-remote-offer'); + }, 'setRemoteDescription(offer) from have-local-offer should roll back and succeed'); + promise_test(async t => { + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + await pc1.setLocalDescription(await pc1.createOffer()); + const p = pc1.setRemoteDescription(await pc2.createOffer()); + await new Promise(r => pc1.onsignalingstatechange = r); + assert_equals(pc1.signalingState, 'stable'); + assert_equals(pc1.pendingLocalDescription, null); + assert_equals(pc1.pendingRemoteDescription, null); + await new Promise(r => pc1.onsignalingstatechange = r); + assert_equals(pc1.signalingState, 'have-remote-offer'); + assert_equals(pc1.pendingLocalDescription, null); + assert_equals(pc1.pendingRemoteDescription.type, 'answer'); + await p; + }, 'setRemoteDescription(offer) from have-local-offer fires signalingstatechange twice'); + + promise_test(async t => { + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + await pc1.setLocalDescription(await pc1.createOffer()); + const offer = await pc2.createOffer(); + const p1 = pc1.setLocalDescription({type: 'rollback'}); + await new Promise(r => pc1.onsignalingstatechange = r); + assert_equals(pc1.signalingState, 'stable'); + const p2 = pc1.addIceCandidate(); + const p3 = pc1.setRemoteDescription(offer); + await promise_rejects(t, 'InvalidStateError', p2); + await p1; + await p3; + assert_equals(pc1.signalingState, 'have-remote-offer'); + }, 'Naive rollback approach is not glare-proof (control)'); + + promise_test(async t => { + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + await pc1.setLocalDescription(await pc1.createOffer()); + const p = pc1.setRemoteDescription(await pc2.createOffer()); + await new Promise(r => pc1.onsignalingstatechange = r); + assert_equals(pc1.signalingState, 'stable'); + await pc1.addIceCandidate(); + await p; + assert_equals(pc1.signalingState, 'have-remote-offer'); + }, 'setRemoteDescription(offer) from have-local-offer is glare-proof'); + + promise_test(async t => { + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + await pc1.setLocalDescription(await pc1.createOffer()); + const p = pc1.setRemoteDescription({type: 'offer', sdp: 'Invalid SDP'}); + await new Promise(r => pc1.onsignalingstatechange = r); + assert_equals(pc1.signalingState, 'stable'); + assert_equals(pc1.pendingLocalDescription, null); + assert_equals(pc1.pendingRemoteDescription, null); + await promise_rejects(t, 'RTCError', p); + }, 'setRemoteDescription(invalidOffer) from have-local-offer does not undo rollback'); </script> diff --git a/tests/wpt/web-platform-tests/webxr/resources/webxr_test_asserts.js b/tests/wpt/web-platform-tests/webxr/resources/webxr_test_asserts.js index 36524211d01..24b5274bc23 100644 --- a/tests/wpt/web-platform-tests/webxr/resources/webxr_test_asserts.js +++ b/tests/wpt/web-platform-tests/webxr/resources/webxr_test_asserts.js @@ -6,19 +6,107 @@ // |epsilon| - float specifying precision // |prefix| - string used as a prefix for logging let assert_point_approx_equals = function(p1, p2, epsilon = FLOAT_EPSILON, prefix = "") { - assert_approx_equals(p1.x, p2.x, epsilon, prefix + "xs must match"); - assert_approx_equals(p1.y, p2.y, epsilon, prefix + "ys must match"); - assert_approx_equals(p1.z, p2.z, epsilon, prefix + "zs must match"); - assert_approx_equals(p1.w, p2.w, epsilon, prefix + "ws must match"); + if (p1 == null && p2 == null) { + return; + } + + assert_not_equals(p1, null, prefix + "p1 must be non-null"); + assert_not_equals(p2, null, prefix + "p2 must be non-null"); + + let mismatched_component = null; + for (const v of ['x', 'y', 'z', 'w']) { + if (Math.abs(p1[v] - p2[v]) > epsilon) { + mismatched_component = v; + break; + } + } + + if (mismatched_component !== null) { + let error_message = prefix + ' Point comparison failed.\n'; + error_message += ` p1: {x: ${p1.x}, y: ${p1.y}, z: ${p1.z}, w: ${p1.w}}\n`; + error_message += ` p2: {x: ${p2.x}, y: ${p2.y}, z: ${p2.z}, w: ${p2.w}}\n`; + error_message += ` Difference in component ${mismatched_component} exceeded the given epsilon.\n`; + assert_approx_equals(p2[mismatched_component], p1[mismatched_component], epsilon, error_message); + } }; // |m1|, |m2| - arrays of floating point numbers // |epsilon| - float specifying precision // |prefix| - string used as a prefix for logging let assert_matrix_approx_equals = function(m1, m2, epsilon = FLOAT_EPSILON, prefix = "") { - assert_equals(m1.length, m2.length, prefix + "Matrix lengths should match"); - for(var i = 0; i < m1.length; ++i) { - assert_approx_equals(m1[i], m2[i], epsilon, prefix + "Component number " + i + " should match"); + if (m1 == null && m2 == null) { + return; + } + + assert_not_equals(m1, null, prefix + "m1 must be non-null"); + assert_not_equals(m2, null, prefix + "m2 must be non-null"); + + assert_equals(m1.length, 16, prefix + "m1 must have length of 16"); + assert_equals(m2.length, 16, prefix + "m2 must have length of 16"); + + let mismatched_element = -1; + for (let i = 0; i < 16; ++i) { + if (Math.abs(m1[i] - m2[i]) > epsilon) { + mismatched_element = i; + break; + } + } + + if (mismatched_element > -1) { + let error_message = prefix + 'Matrix comparison failed.\n'; + error_message += ' Difference in element ' + mismatched_element + + ' exceeded the given epsilon.\n'; + + error_message += ' Matrix 1: [' + m1.join(',') + ']\n'; + error_message += ' Matrix 2: [' + m2.join(',') + ']\n'; + + assert_approx_equals( + m1[mismatched_element], m2[mismatched_element], epsilon, + error_message); + } +} + + +// |m1|, |m2| - arrays of floating point numbers +// |epsilon| - float specifying precision +// |prefix| - string used as a prefix for logging +let assert_matrix_significantly_not_equals = function(m1, m2, epsilon = FLOAT_EPSILON, prefix = "") { + if (m1 == null && m2 == null) { + return; + } + + assert_not_equals(m1, null, prefix + "m1 must be non-null"); + assert_not_equals(m2, null, prefix + "m2 must be non-null"); + + assert_equals(m1.length, 16, prefix + "m1 must have length of 16"); + assert_equals(m2.length, 16, prefix + "m2 must have length of 16"); + + let mismatch = false; + for (let i = 0; i < 16; ++i) { + if (Math.abs(m1[i] - m2[i]) > epsilon) { + mismatch = true; + break; + } + } + + if (!mismatch) { + let m1_str = '['; + let m2_str = '['; + for (let i = 0; i < 16; ++i) { + m1_str += m1[i] + (i < 15 ? ', ' : ''); + m2_str += m2[i] + (i < 15 ? ', ' : ''); + } + m1_str += ']'; + m2_str += ']'; + + let error_message = prefix + 'Matrix comparison failed.\n'; + error_message += + ' No element exceeded the given epsilon ' + epsilon + '.\n'; + + error_message += ' Matrix A: ' + m1_str + '\n'; + error_message += ' Matrix B: ' + m2_str + '\n'; + + assert_unreached(error_message); } } diff --git a/tests/wpt/web-platform-tests/webxr/resources/webxr_util.js b/tests/wpt/web-platform-tests/webxr/resources/webxr_util.js index baf1d66b00d..d75e5c7bd2e 100644 --- a/tests/wpt/web-platform-tests/webxr/resources/webxr_util.js +++ b/tests/wpt/web-platform-tests/webxr/resources/webxr_util.js @@ -28,14 +28,18 @@ function xr_session_promise_test( name, func, fakeDeviceInit, sessionMode, sessionInit, properties) { let testDeviceController; let testSession; + let sessionObjects = {}; const webglCanvas = document.getElementsByTagName('canvas')[0]; + // We can't use assert_true here because it causes the wpt testharness to treat + // this as a test page and not as a test. if (!webglCanvas) { promise_test(async (t) => { Promise.reject('xr_session_promise_test requires a canvas on the page!'); }, name, properties); } let gl = webglCanvas.getContext('webgl', {alpha: false, antialias: false}); + sessionObjects.gl = gl; xr_promise_test( name, @@ -75,7 +79,8 @@ function xr_session_promise_test( session.updateRenderState({ baseLayer: glLayer }); - resolve(func(session, testDeviceController, t)); + sessionObjects.glLayer = glLayer; + resolve(func(session, testDeviceController, t, sessionObjects)); }) .catch((err) => { reject( diff --git a/tests/wpt/web-platform-tests/webxr/xrWebGLLayer_framebuffer.https.html b/tests/wpt/web-platform-tests/webxr/xrWebGLLayer_framebuffer.https.html index 7c4ff17c254..ba6b7dc0b92 100644 --- a/tests/wpt/web-platform-tests/webxr/xrWebGLLayer_framebuffer.https.html +++ b/tests/wpt/web-platform-tests/webxr/xrWebGLLayer_framebuffer.https.html @@ -20,26 +20,37 @@ let testFunction = function(session, fakeDeviceController, t) { let gl = layer.context; // The layer's framebuffer is a WebGL framebuffer - assert_not_equals(layer.framebuffer, null); - assert_true(layer.framebuffer instanceof WebGLFramebuffer); + t.step(() => { + assert_not_equals(layer.framebuffer, null); + assert_true(layer.framebuffer instanceof WebGLFramebuffer); - // The XR framebuffer is not bound to the GL context by default. - assert_not_equals(layer.framebuffer, gl.getParameter(gl.FRAMEBUFFER_BINDING)); + // The XR framebuffer is not bound to the GL context by default. + assert_not_equals(layer.framebuffer, gl.getParameter(gl.FRAMEBUFFER_BINDING)); + }); // The XR framebuffer can be bound to the GL context. gl.bindFramebuffer(gl.FRAMEBUFFER, layer.framebuffer); - assert_equals(layer.framebuffer, gl.getParameter(gl.FRAMEBUFFER_BINDING)); + + t.step(() => { + assert_equals(layer.framebuffer, gl.getParameter(gl.FRAMEBUFFER_BINDING)); + }); // The XR framebuffer has a 2D texture let attachment = gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE); - assert_equals(attachment, gl.TEXTURE); + + t.step(() => { + assert_equals(attachment, gl.TEXTURE); + }); // Check that each viewport fits inside the framebuffer dimensions let viewer_pose = xrFrame.getViewerPose(space); for (view of viewer_pose.views) { let viewport = layer.getViewport(view); - assert_less_than_equal(viewport.x + viewport.width, layer.framebufferWidth); - assert_less_than_equal(viewport.y + viewport.height, layer.framebufferHeight); + + t.step(() => { + assert_less_than_equal(viewport.x + viewport.width, layer.framebufferWidth); + assert_less_than_equal(viewport.y + viewport.height, layer.framebufferHeight); + }); } // Finished test. diff --git a/tests/wpt/web-platform-tests/webxr/xrWebGLLayer_viewports.https.html b/tests/wpt/web-platform-tests/webxr/xrWebGLLayer_viewports.https.html index 8cfccff3c01..94a23dcdb42 100644 --- a/tests/wpt/web-platform-tests/webxr/xrWebGLLayer_viewports.https.html +++ b/tests/wpt/web-platform-tests/webxr/xrWebGLLayer_viewports.https.html @@ -22,18 +22,18 @@ let testFunction = function(session, fakeDeviceController, t) { let layer = xrFrame.session.renderState.baseLayer; for (view of viewer_pose.views) { let viewport = layer.getViewport(view); - let index = (view.eye === "right"? 1: 0); - let params = fakeDeviceInitParams.views[index]; - // Ensure the returned object is an XRViewport object - assert_not_equals(viewport, null); - assert_true(viewport instanceof XRViewport); + t.step(() => { + // Ensure the returned object is an XRViewport object + assert_not_equals(viewport, null); + assert_true(viewport instanceof XRViewport); - // Ensure the viewport dimensions are valid - assert_greater_than_equal(viewport.x, 0); - assert_greater_than_equal(viewport.y, 0); - assert_equals(viewport.width, params.resolution.width); - assert_equals(viewport.height, params.resolution.height); + // Ensure the viewport dimensions are valid + assert_greater_than_equal(viewport.x, 0); + assert_greater_than_equal(viewport.y, 0); + assert_greater_than_equal(viewport.width, 1); + assert_greater_than_equal(viewport.height, 1); + }); // Ensure none of the viewports overlap for (other of viewer_pose.views) { @@ -43,7 +43,10 @@ let testFunction = function(session, fakeDeviceController, t) { (otherport.x + otherport.width <= viewport.x) || (viewport.y + viewport.height <= otherport.y) || (otherport.y + otherport.height <= viewport.y); - assert_true(no_overlap, "Overlap between viewport " + view.eye + " and " + other.eye); + + t.step(() => { + assert_true(no_overlap, "Overlap between viewport " + view.eye + " and " + other.eye); + }); } } } diff --git a/tests/wpt/web-platform-tests/xhr/getallresponseheaders.htm b/tests/wpt/web-platform-tests/xhr/getallresponseheaders.htm index 72e27a5947c..759d6b68a1f 100644 --- a/tests/wpt/web-platform-tests/xhr/getallresponseheaders.htm +++ b/tests/wpt/web-platform-tests/xhr/getallresponseheaders.htm @@ -7,7 +7,7 @@ async_test((t) => { const client = new XMLHttpRequest() client.onload = t.step_func_done(() => { - assert_equals(client.getAllResponseHeaders(), "also-here: Mr. PB\r\newok: lego\r\nfoo-test: 1, 2\r\n") + assert_equals(client.getAllResponseHeaders(), "also-here: Mr. PB\r\newok: lego\r\nfoo-test: 1, 2\r\n__custom: token\r\n") }) client.onerror = t.unreached_func("unexpected error") client.open("GET", "resources/headers.asis") diff --git a/tests/wpt/web-platform-tests/xhr/resources/headers.asis b/tests/wpt/web-platform-tests/xhr/resources/headers.asis index d25fe52efeb..69273ac87fe 100644 --- a/tests/wpt/web-platform-tests/xhr/resources/headers.asis +++ b/tests/wpt/web-platform-tests/xhr/resources/headers.asis @@ -1,5 +1,6 @@ HTTP/1.1 200 YAYAYAYA foo-TEST: 1 FOO-test: 2 +__Custom: token ALSO-here: Mr. PB ewok: lego |