mirror of
https://github.com/servo/servo.git
synced 2025-08-13 17:35:36 +01:00
Sync WPT with upstream (10-08-2025) (#38583)
Automated downstream sync of changes from upstream as of 10-08-2025 [no-wpt-sync] Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
This commit is contained in:
parent
2f0afb0ec0
commit
86c37a380b
223 changed files with 7100 additions and 1428 deletions
716
tests/wpt/meta/MANIFEST.json
vendored
716
tests/wpt/meta/MANIFEST.json
vendored
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,4 @@
|
||||||
|
[eval-allowed-by-hash-long-script.sub.html]
|
||||||
|
expected: ERROR
|
||||||
|
[Expecting alerts: ["PASS, long text that exceeds the 40 character limit used for report snippets"\]]
|
||||||
|
expected: FAIL
|
3
tests/wpt/meta/css/css-gaps/animation/gap-decorations-color-neutral-keyframe-004.html.ini
vendored
Normal file
3
tests/wpt/meta/css/css-gaps/animation/gap-decorations-color-neutral-keyframe-004.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[gap-decorations-color-neutral-keyframe-004.html]
|
||||||
|
[gap decorations row-rule-color value list supports neutral keyframe.]
|
||||||
|
expected: FAIL
|
3
tests/wpt/meta/css/css-gaps/animation/gap-decorations-color-neutral-keyframe-005.html.ini
vendored
Normal file
3
tests/wpt/meta/css/css-gaps/animation/gap-decorations-color-neutral-keyframe-005.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[gap-decorations-color-neutral-keyframe-005.html]
|
||||||
|
[gap decorations row-rule-color value list supports neutral keyframe.]
|
||||||
|
expected: FAIL
|
3
tests/wpt/meta/css/css-gaps/animation/rule-color-interpolation-conversion-001.html.ini
vendored
Normal file
3
tests/wpt/meta/css/css-gaps/animation/rule-color-interpolation-conversion-001.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[rule-color-interpolation-conversion-001.html]
|
||||||
|
[CSS gap color change computed value to non compatible value mid-animation]
|
||||||
|
expected: FAIL
|
3
tests/wpt/meta/css/css-gaps/animation/rule-color-interpolation-conversion-002.html.ini
vendored
Normal file
3
tests/wpt/meta/css/css-gaps/animation/rule-color-interpolation-conversion-002.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[rule-color-interpolation-conversion-002.html]
|
||||||
|
[CSS gap color change computed value to compatible value mid-animation]
|
||||||
|
expected: FAIL
|
2
tests/wpt/meta/css/css-gaps/animation/rule-color-interpolation-conversion-crash.html.ini
vendored
Normal file
2
tests/wpt/meta/css/css-gaps/animation/rule-color-interpolation-conversion-crash.html.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[rule-color-interpolation-conversion-crash.html]
|
||||||
|
expected: TIMEOUT
|
144
tests/wpt/meta/css/css-gaps/animation/rule-color-interpolation-multiple-values-001.html.ini
vendored
Normal file
144
tests/wpt/meta/css/css-gaps/animation/rule-color-interpolation-multiple-values-001.html.ini
vendored
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
[rule-color-interpolation-multiple-values-001.html]
|
||||||
|
[CSS Transitions: property <row-rule-color> from neutral to [red red red\] at (-0.3) should be [black black black\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions: property <row-rule-color> from neutral to [red red red\] at (0) should be [black black black\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions: property <row-rule-color> from neutral to [red red red\] at (0.3) should be [rgb(77, 0, 0) rgb(77, 0, 0) rgb(77, 0, 0)\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions: property <row-rule-color> from neutral to [red red red\] at (0.6) should be [rgb(153, 0, 0) rgb(153, 0, 0) rgb(153, 0, 0)\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions: property <row-rule-color> from neutral to [red red red\] at (1) should be [red red red\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions: property <row-rule-color> from neutral to [red red red\] at (1.5) should be [red red red\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions with transition: all: property <row-rule-color> from neutral to [red red red\] at (-0.3) should be [black black black\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions with transition: all: property <row-rule-color> from neutral to [red red red\] at (0) should be [black black black\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions with transition: all: property <row-rule-color> from neutral to [red red red\] at (0.3) should be [rgb(77, 0, 0) rgb(77, 0, 0) rgb(77, 0, 0)\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions with transition: all: property <row-rule-color> from neutral to [red red red\] at (0.6) should be [rgb(153, 0, 0) rgb(153, 0, 0) rgb(153, 0, 0)\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions with transition: all: property <row-rule-color> from neutral to [red red red\] at (1) should be [red red red\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions with transition: all: property <row-rule-color> from neutral to [red red red\] at (1.5) should be [red red red\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <row-rule-color> from neutral to [red red red\] at (-0.3) should be [black black black\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <row-rule-color> from neutral to [red red red\] at (0) should be [black black black\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <row-rule-color> from neutral to [red red red\] at (0.3) should be [rgb(77, 0, 0) rgb(77, 0, 0) rgb(77, 0, 0)\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <row-rule-color> from neutral to [red red red\] at (0.6) should be [rgb(153, 0, 0) rgb(153, 0, 0) rgb(153, 0, 0)\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <row-rule-color> from neutral to [red red red\] at (1) should be [red red red\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <row-rule-color> from neutral to [red red red\] at (1.5) should be [red red red\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <row-rule-color> from neutral to [red red red\] at (-0.3) should be [black black black\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <row-rule-color> from neutral to [red red red\] at (0) should be [black black black\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <row-rule-color> from neutral to [red red red\] at (0.3) should be [rgb(77, 0, 0) rgb(77, 0, 0) rgb(77, 0, 0)\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <row-rule-color> from neutral to [red red red\] at (0.6) should be [rgb(153, 0, 0) rgb(153, 0, 0) rgb(153, 0, 0)\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <row-rule-color> from neutral to [red red red\] at (1) should be [red red red\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <row-rule-color> from neutral to [red red red\] at (1.5) should be [red red red\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions: property <column-rule-color> from neutral to [red blue red\] at (-0.3) should be [black red blue\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions: property <column-rule-color> from neutral to [red blue red\] at (0) should be [black red blue\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions: property <column-rule-color> from neutral to [red blue red\] at (0.3) should be [rgb(77, 0, 0) rgb(179, 0, 77) rgb(77, 0, 179)\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions: property <column-rule-color> from neutral to [red blue red\] at (0.6) should be [rgb(153, 0, 0) rgb(102, 0, 153) rgb(153, 0, 102)\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions: property <column-rule-color> from neutral to [red blue red\] at (1) should be [red blue red\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions: property <column-rule-color> from neutral to [red blue red\] at (1.5) should be [red blue red\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions with transition: all: property <column-rule-color> from neutral to [red blue red\] at (-0.3) should be [black red blue\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions with transition: all: property <column-rule-color> from neutral to [red blue red\] at (0) should be [black red blue\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions with transition: all: property <column-rule-color> from neutral to [red blue red\] at (0.3) should be [rgb(77, 0, 0) rgb(179, 0, 77) rgb(77, 0, 179)\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions with transition: all: property <column-rule-color> from neutral to [red blue red\] at (0.6) should be [rgb(153, 0, 0) rgb(102, 0, 153) rgb(153, 0, 102)\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions with transition: all: property <column-rule-color> from neutral to [red blue red\] at (1) should be [red blue red\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Transitions with transition: all: property <column-rule-color> from neutral to [red blue red\] at (1.5) should be [red blue red\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <column-rule-color> from neutral to [red blue red\] at (-0.3) should be [black red blue\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <column-rule-color> from neutral to [red blue red\] at (0) should be [black red blue\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <column-rule-color> from neutral to [red blue red\] at (0.3) should be [rgb(77, 0, 0) rgb(179, 0, 77) rgb(77, 0, 179)\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <column-rule-color> from neutral to [red blue red\] at (0.6) should be [rgb(153, 0, 0) rgb(102, 0, 153) rgb(153, 0, 102)\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <column-rule-color> from neutral to [red blue red\] at (1) should be [red blue red\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <column-rule-color> from neutral to [red blue red\] at (1.5) should be [red blue red\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <column-rule-color> from neutral to [red blue red\] at (-0.3) should be [black red blue\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <column-rule-color> from neutral to [red blue red\] at (0) should be [black red blue\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <column-rule-color> from neutral to [red blue red\] at (0.3) should be [rgb(77, 0, 0) rgb(179, 0, 77) rgb(77, 0, 179)\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <column-rule-color> from neutral to [red blue red\] at (0.6) should be [rgb(153, 0, 0) rgb(102, 0, 153) rgb(153, 0, 102)\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <column-rule-color> from neutral to [red blue red\] at (1) should be [red blue red\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Web Animations: property <column-rule-color> from neutral to [red blue red\] at (1.5) should be [red blue red\]]
|
||||||
|
expected: FAIL
|
1098
tests/wpt/meta/css/css-gaps/animation/rule-color-interpolation-repeaters-001.html.ini
vendored
Normal file
1098
tests/wpt/meta/css/css-gaps/animation/rule-color-interpolation-repeaters-001.html.ini
vendored
Normal file
File diff suppressed because it is too large
Load diff
3
tests/wpt/meta/css/css-gaps/animation/rule-width-interpolation-conversion-001.html.ini
vendored
Normal file
3
tests/wpt/meta/css/css-gaps/animation/rule-width-interpolation-conversion-001.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[rule-width-interpolation-conversion-001.html]
|
||||||
|
[CSS gap width change computed value to non compatible value mid-animation]
|
||||||
|
expected: FAIL
|
3
tests/wpt/meta/css/css-gaps/animation/rule-width-interpolation-conversion-002.html.ini
vendored
Normal file
3
tests/wpt/meta/css/css-gaps/animation/rule-width-interpolation-conversion-002.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[rule-width-interpolation-conversion-002.html]
|
||||||
|
[CSS gap width change computed value to non compatible value mid-animation]
|
||||||
|
expected: FAIL
|
6
tests/wpt/meta/css/css-gaps/parsing/rule-overlap-computed.html.ini
vendored
Normal file
6
tests/wpt/meta/css/css-gaps/parsing/rule-overlap-computed.html.ini
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[rule-overlap-computed.html]
|
||||||
|
[Property gap-rule-overlap value 'row-over-column']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property gap-rule-overlap value 'column-over-row']
|
||||||
|
expected: FAIL
|
6
tests/wpt/meta/css/css-gaps/parsing/rule-overlap-valid.html.ini
vendored
Normal file
6
tests/wpt/meta/css/css-gaps/parsing/rule-overlap-valid.html.ini
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[rule-overlap-valid.html]
|
||||||
|
[e.style['gap-rule-overlap'\] = "row-over-column" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['gap-rule-overlap'\] = "column-over-row" should set the property value]
|
||||||
|
expected: FAIL
|
|
@ -1,6 +0,0 @@
|
||||||
[rule-paint-order-computed.html]
|
|
||||||
[Property gap-rule-paint-order value 'row-over-column']
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property gap-rule-paint-order value 'column-over-row']
|
|
||||||
expected: FAIL
|
|
|
@ -1,6 +0,0 @@
|
||||||
[rule-paint-order-valid.html]
|
|
||||||
[e.style['gap-rule-paint-order'\] = "row-over-column" should set the property value]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[e.style['gap-rule-paint-order'\] = "column-over-row" should set the property value]
|
|
||||||
expected: FAIL
|
|
2
tests/wpt/meta/css/css-grid/masonry/tentative/order/masonry-order-001.html.ini
vendored
Normal file
2
tests/wpt/meta/css/css-grid/masonry/tentative/order/masonry-order-001.html.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[masonry-order-001.html]
|
||||||
|
expected: FAIL
|
|
@ -1,12 +0,0 @@
|
||||||
[grid-template-columns-repeat-auto-valid.tentative.html]
|
|
||||||
[e.style['grid-template-columns'\] = "repeat(auto-fill, auto)" should set the property value]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[e.style['grid-template-columns'\] = "repeat(auto-fit, auto 100px auto)" should set the property value]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[e.style['grid-template-columns'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] auto)" should set the property value]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[e.style['grid-template-columns'\] = "repeat(auto-fit, [three\] auto [four\])" should set the property value]
|
|
||||||
expected: FAIL
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
[grid-template-columns-repeat-intrinsic-valid.tentative.html]
|
||||||
|
[e.style['grid-template-columns'\] = "repeat(auto-fill, auto)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-columns'\] = "repeat(auto-fit, auto 100px auto)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-columns'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] auto)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-columns'\] = "repeat(auto-fit, [three\] auto [four\])" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-columns'\] = "repeat(auto-fill, min-content)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-columns'\] = "repeat(auto-fit, min-content 100px min-content)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-columns'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] min-content)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-columns'\] = "repeat(auto-fit, [three\] min-content [four\])" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-columns'\] = "repeat(auto-fill, max-content)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-columns'\] = "repeat(auto-fit, max-content 100px max-content)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-columns'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] max-content)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-columns'\] = "repeat(auto-fit, [three\] max-content [four\])" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-columns'\] = "repeat(auto-fill, fit-content(200px))" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-columns'\] = "repeat(auto-fit, fit-content(200px) 100px fit-content(200px))" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-columns'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] fit-content(200px))" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-columns'\] = "repeat(auto-fit, [three\] fit-content(200px) [four\])" should set the property value]
|
||||||
|
expected: FAIL
|
|
@ -1,12 +0,0 @@
|
||||||
[grid-template-rows-repeat-auto-valid.tentative.html]
|
|
||||||
[e.style['grid-template-rows'\] = "repeat(auto-fill, auto)" should set the property value]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[e.style['grid-template-rows'\] = "repeat(auto-fit, auto 100px auto)" should set the property value]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[e.style['grid-template-rows'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] auto)" should set the property value]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[e.style['grid-template-rows'\] = "repeat(auto-fit, [three\] auto [four\])" should set the property value]
|
|
||||||
expected: FAIL
|
|
48
tests/wpt/meta/css/css-grid/parsing/grid-template-rows-repeat-intrinsic-valid.tentative.html.ini
vendored
Normal file
48
tests/wpt/meta/css/css-grid/parsing/grid-template-rows-repeat-intrinsic-valid.tentative.html.ini
vendored
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
[grid-template-rows-repeat-intrinsic-valid.tentative.html]
|
||||||
|
[e.style['grid-template-rows'\] = "repeat(auto-fill, auto)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-rows'\] = "repeat(auto-fit, auto 100px auto)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-rows'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] auto)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-rows'\] = "repeat(auto-fit, [three\] auto [four\])" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-rows'\] = "repeat(auto-fill, min-content)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-rows'\] = "repeat(auto-fit, min-content 100px min-content)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-rows'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] min-content)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-rows'\] = "repeat(auto-fit, [three\] min-content [four\])" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-rows'\] = "repeat(auto-fill, max-content)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-rows'\] = "repeat(auto-fit, max-content 100px max-content)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-rows'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] max-content)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-rows'\] = "repeat(auto-fit, [three\] max-content [four\])" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-rows'\] = "repeat(auto-fill, fit-content(200px))" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-rows'\] = "repeat(auto-fit, fit-content(200px) 100px fit-content(200px))" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-rows'\] = "repeat(auto-fill, minmax(30px, 5fr) [two\] fit-content(200px))" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template-rows'\] = "repeat(auto-fit, [three\] fit-content(200px) [four\])" should set the property value]
|
||||||
|
expected: FAIL
|
15
tests/wpt/meta/css/css-mixins/contents-rule.html.ini
vendored
Normal file
15
tests/wpt/meta/css/css-mixins/contents-rule.html.ini
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
[contents-rule.html]
|
||||||
|
[Simple @contents with no fallback]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Implicit semicolon after @contents, at end of block]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Block in @apply overrides fallback]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Fallback is used if @apply has no block]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[@contents is ignored if there is no @contents parameter]
|
||||||
|
expected: FAIL
|
3
tests/wpt/meta/css/css-mixins/cross-stylesheet.html.ini
vendored
Normal file
3
tests/wpt/meta/css/css-mixins/cross-stylesheet.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[cross-stylesheet.html]
|
||||||
|
[CSS Mixins: Mixin from another stylesheet]
|
||||||
|
expected: FAIL
|
9
tests/wpt/meta/css/css-mixins/shadow-dom.html.ini
vendored
Normal file
9
tests/wpt/meta/css/css-mixins/shadow-dom.html.ini
vendored
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
[shadow-dom.html]
|
||||||
|
[Style in shadow DOM should have access to outside non-adopted mixins]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Style in shadow DOM should have access to inside mixins]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Style in shadow DOM should have access to mixins from adopted stylesheets]
|
||||||
|
expected: FAIL
|
2
tests/wpt/meta/css/css-position/replaced-object-backdrop.html.ini
vendored
Normal file
2
tests/wpt/meta/css/css-position/replaced-object-backdrop.html.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[replaced-object-backdrop.html]
|
||||||
|
expected: FAIL
|
|
@ -16,3 +16,81 @@
|
||||||
|
|
||||||
[Property text-autospace value 'initial']
|
[Property text-autospace value 'initial']
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'ideograph-alpha ideograph-numeric']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'punctuation']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'punctuation ideograph-alpha']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'punctuation ideograph-alpha ideograph-numeric']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'ideograph-alpha insert']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'ideograph-numeric insert']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'ideograph-alpha ideograph-numeric insert']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'punctuation insert']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'punctuation ideograph-alpha insert']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'insert ideograph-alpha']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'insert ideograph-numeric']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'insert ideograph-alpha ideograph-numeric']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'insert punctuation']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'insert punctuation ideograph-alpha']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'insert punctuation ideograph-alpha ideograph-numeric']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'ideograph-alpha replace']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'ideograph-numeric replace']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'ideograph-alpha ideograph-numeric replace']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'punctuation replace']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'punctuation ideograph-alpha replace']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'replace ideograph-alpha']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'replace ideograph-numeric']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'replace ideograph-alpha ideograph-numeric']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'replace punctuation']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'replace punctuation ideograph-alpha']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property text-autospace value 'replace punctuation ideograph-alpha ideograph-numeric']
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
[elementsFromPoint-iframes.html]
|
|
||||||
[elementsFromPoint on inner documents]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[elementsFromPoint on the root document for points in iframe elements]
|
|
||||||
expected: FAIL
|
|
|
@ -1,3 +0,0 @@
|
||||||
[elementsFromPoint-invalid-cases.html]
|
|
||||||
[The root element is the last element returned for valid queries]
|
|
||||||
expected: FAIL
|
|
3
tests/wpt/meta/css/cssom/StyleSheetList-constructable-with-style-recalc.html.ini
vendored
Normal file
3
tests/wpt/meta/css/cssom/StyleSheetList-constructable-with-style-recalc.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[StyleSheetList-constructable-with-style-recalc.html]
|
||||||
|
[document.styleSheets does not include adopted style sheets]
|
||||||
|
expected: FAIL
|
3
tests/wpt/meta/css/cssom/StyleSheetList-constructable.html.ini
vendored
Normal file
3
tests/wpt/meta/css/cssom/StyleSheetList-constructable.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[StyleSheetList-constructable.html]
|
||||||
|
[document.styleSheets does not include adopted style sheets]
|
||||||
|
expected: FAIL
|
|
@ -10,3 +10,15 @@
|
||||||
|
|
||||||
[CaretRange.getClientRect() should return a DOMRect that matches one obtained from a manually constructed Range]
|
[CaretRange.getClientRect() should return a DOMRect that matches one obtained from a manually constructed Range]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[document.caretPositionFromPoint() should return a CaretPosition over elements with `user-select: none`]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[document.caretPositionFromPoint() should return a CaretPosition over video elements]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[document.caretPositionFromPoint() should return a CaretPosition over audio elements]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[document.caretPositionFromPoint() should return a CaretPosition over SVG elements]
|
||||||
|
expected: FAIL
|
||||||
|
|
3
tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/008.html.ini
vendored
Normal file
3
tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/008.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[008.html]
|
||||||
|
[Link with onclick form submit to javascript url and href navigation ]
|
||||||
|
expected: FAIL
|
|
@ -7,3 +7,9 @@
|
||||||
|
|
||||||
[Navigating to a different document with link click]
|
[Navigating to a different document with link click]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Navigating to a different document with location.href]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Navigating to a different document with location.assign]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -10,3 +10,6 @@
|
||||||
|
|
||||||
[load event does not fire on window.open('about:blank?foo')]
|
[load event does not fire on window.open('about:blank?foo')]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[load event does not fire on window.open('about:blank')]
|
||||||
|
expected: FAIL
|
||||||
|
|
9
tests/wpt/meta/html/dom/partial-updates/tentative/template-patch-range.html.ini
vendored
Normal file
9
tests/wpt/meta/html/dom/partial-updates/tentative/template-patch-range.html.ini
vendored
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
[template-patch-range.html]
|
||||||
|
[<template patchstartafter=first patchendbefore=last> should insert the patch between two existing nodes]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<template patchendbefore=last> should insert the patch before an existing node]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<template patchstartafter=first> should insert the patch after an existing node]
|
||||||
|
expected: FAIL
|
|
@ -1,4 +1,5 @@
|
||||||
[supported-elements.html]
|
[supported-elements.html]
|
||||||
|
expected: TIMEOUT
|
||||||
[Contenteditable element should support autofocus]
|
[Contenteditable element should support autofocus]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -9,7 +10,7 @@
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Area element should support autofocus]
|
[Area element should support autofocus]
|
||||||
expected: FAIL
|
expected: NOTRUN
|
||||||
|
|
||||||
[Host element with delegatesFocus should support autofocus]
|
[Host element with delegatesFocus should support autofocus]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
[iframe-loading-lazy-reload-location-reload.html]
|
||||||
|
[Reloading iframe loading='lazy' before it is loaded: location.reload]
|
||||||
|
expected: FAIL
|
|
@ -1,3 +1,4 @@
|
||||||
[iframe_sandbox_popups_escaping-1.html]
|
[iframe_sandbox_popups_escaping-1.html]
|
||||||
|
expected: CRASH
|
||||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
[iframe_sandbox_popups_nonescaping-2.html]
|
[iframe_sandbox_popups_nonescaping-2.html]
|
||||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||||
expected: NOTRUN
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[animated-webp-update.tentative.html]
|
||||||
|
expected: FAIL
|
|
@ -1,3 +0,0 @@
|
||||||
[intrinsic_sizes.htm]
|
|
||||||
[default object size after src is removed]
|
|
||||||
expected: FAIL
|
|
|
@ -1,3 +0,0 @@
|
||||||
[historical.html]
|
|
||||||
[<input name=isindex> should not be supported]
|
|
||||||
expected: FAIL
|
|
|
@ -7,3 +7,6 @@
|
||||||
|
|
||||||
[invoker inside popover still works, even with weird nesting]
|
[invoker inside popover still works, even with weird nesting]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[invoker inside popover still works, even inside of a shadowroot]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[interestfor-pseudo-element-appearance.tentative.html]
|
||||||
|
expected: FAIL
|
|
@ -4,6 +4,3 @@
|
||||||
|
|
||||||
[different-site document prefetch without 'as' should not be consumed]
|
[different-site document prefetch without 'as' should not be consumed]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[different-site document prefetch with 'as=document' should not be consumed]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -68,11 +68,17 @@
|
||||||
[Decode-error (style): main]
|
[Decode-error (style): main]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[MIME-error (script): main]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[404 (style): main]
|
[404 (style): main]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CORS (style): main]
|
[CORS (style): main]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[success (style): main]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[404 (xhr): main]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Decode-error (script): main]
|
||||||
|
expected: FAIL
|
||||||
|
|
24
tests/wpt/meta/reporting/crashReport-test.html.ini
vendored
Normal file
24
tests/wpt/meta/reporting/crashReport-test.html.ini
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
[crashReport-test.html]
|
||||||
|
[crashReport getter returns null in detached Documents]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[crashReport initialize() throws InvalidStateError in detached Documents]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[crashReport.set() throws InvalidStateError in detached Documents]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[crashReport.remove() throws InvalidStateError in detached Documents]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[crashReport.initialize() with size > 5MB rejects with NotAllowedError]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Calling crashReport.initialize() a second time throws InvalidStateError]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[crashReport.set() throws before initialize() resolves]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[crashReport.set() and .remove() succeed after initialize() resolves]
|
||||||
|
expected: FAIL
|
|
@ -1,3 +0,0 @@
|
||||||
[change-layout-in-error.html]
|
|
||||||
[Changing layout in window error handler should not result in lifecyle loop when resize observer loop limit is reached.]
|
|
||||||
expected: FAIL
|
|
|
@ -1,3 +1,3 @@
|
||||||
[eventloop.html]
|
[eventloop.html]
|
||||||
[test0: multiple notifications inside same event loop]
|
[test1: depths of shadow roots]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -31,3 +31,6 @@
|
||||||
|
|
||||||
[getComposedRanges returns a sequence with a static range without rescoping when there is a selection in an outer shadow tree and the inner shadow tree is specified as an argument]
|
[getComposedRanges returns a sequence with a static range without rescoping when there is a selection in an outer shadow tree and the inner shadow tree is specified as an argument]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[getComposedRanges returns a sequence with a static range pointing to a shadow tree when there is a selection in the shadow tree and the shadow tree is specified as an argument]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -108,21 +108,6 @@
|
||||||
[Window interface: attribute caches]
|
[Window interface: attribute caches]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[ServiceWorkerContainer interface: operation register((TrustedScriptURL or USVString), optional RegistrationOptions)]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
||||||
[NavigationPreloadManager interface: operation enable()]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
||||||
[NavigationPreloadManager interface: operation disable()]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
||||||
[NavigationPreloadManager interface: operation setHeaderValue(ByteString)]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
||||||
[NavigationPreloadManager interface: operation getState()]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
||||||
|
|
||||||
[idlharness.https.any.serviceworker.html]
|
[idlharness.https.any.serviceworker.html]
|
||||||
expected: ERROR
|
expected: ERROR
|
||||||
|
|
|
@ -34,3 +34,6 @@
|
||||||
|
|
||||||
[document.caretPositionFromPoint() should return a CaretPosition at the specified location pointing to the inner shadow tree when the point is in an inner shadow tree and the inner shadow tree and the outer shadow tree are specified as an argument]
|
[document.caretPositionFromPoint() should return a CaretPosition at the specified location pointing to the inner shadow tree when the point is in an inner shadow tree and the inner shadow tree and the outer shadow tree are specified as an argument]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[document.caretPositionFromPoint() should return a CaretPosition at the specified location pointing to a closed shadow tree when the shadow tree is specified as an argument]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -886,3 +886,15 @@
|
||||||
|
|
||||||
[X SNR (-301.3207293613 dB) is not greater than or equal to 85.58. Got -301.3207293613.]
|
[X SNR (-301.3207293613 dB) is not greater than or equal to 85.58. Got -301.3207293613.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[X Stitched sine-wave buffers at sample rate 44100 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.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[14970\]\t-7.6012745677376742e+26\t7.6832914352416992e-1\t7.6012745677376742e+26\t9.8932529525981143e+26\t9.0957000000000003e-5\n\t[14971\]\t4.5687935130846336e-41\t7.2672140598297119e-1\t7.2672140598297119e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 7.6012745677376742e+26 at index of 14970.\n\tMax RelError of 9.8932529525981143e+26 at index of 14970.\n]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[X SNR (-494.1836424576893 dB) is not greater than or equal to 85.58. Got -494.1836424576893.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[X Stitched sine-wave buffers at sample rate 44100 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.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[14970\]\t-5.7105342676777582e-10\t7.6832914352416992e-1\t7.6832914409522335e-1\t1.0000000007432406e+0\t9.0957000000000003e-5\n\t[14971\]\t4.5567423462914402e-41\t7.2672140598297119e-1\t7.2672140598297119e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 7.6832914409522335e-1 at index of 14970.\n\tMax RelError of 1.0000000007432406e+0 at index of 14970.\n]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[X SNR (42.94790593253836 dB) is not greater than or equal to 85.58. Got 42.94790593253836.]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -16,3 +16,9 @@
|
||||||
|
|
||||||
[# AUDIT TASK RUNNER FINISHED: 2 out of 2 tasks were failed.]
|
[# AUDIT TASK RUNNER FINISHED: 2 out of 2 tasks were failed.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[NaN should not occur during extreme linearRampToValueAtTime events]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Interpolation of linear ramp between very close time values]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -7,3 +7,6 @@
|
||||||
|
|
||||||
[# AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed.]
|
[# AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test summing junction behavior of AudioParam with multiple audio-rate sources and intrinsic gain]
|
||||||
|
expected: FAIL
|
||||||
|
|
2
tests/wpt/meta/workers/constructors/Worker/Worker-constructor.html.ini
vendored
Normal file
2
tests/wpt/meta/workers/constructors/Worker/Worker-constructor.html.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[Worker-constructor.html]
|
||||||
|
expected: ERROR
|
|
@ -414,30 +414,6 @@ function assert_large_array_equals(actual, expected, description) {
|
||||||
assert_equals(array_string, expected_string, description);
|
assert_equals(array_string, expected_string, description);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verifies a record from the results of `getAllRecords()`.
|
|
||||||
function assert_record_equals(actual_record, expected_record) {
|
|
||||||
assert_class_string(
|
|
||||||
actual_record, 'IDBRecord', 'The record must be an IDBRecord');
|
|
||||||
assert_idl_attribute(
|
|
||||||
actual_record, 'key', 'The record must have a key attribute');
|
|
||||||
assert_idl_attribute(
|
|
||||||
actual_record, 'primaryKey',
|
|
||||||
'The record must have a primaryKey attribute');
|
|
||||||
assert_idl_attribute(
|
|
||||||
actual_record, 'value', 'The record must have a value attribute');
|
|
||||||
|
|
||||||
// Verify the key properties.
|
|
||||||
assert_equals(
|
|
||||||
actual_record.primaryKey, expected_record.primaryKey,
|
|
||||||
'The record must have the expected primaryKey');
|
|
||||||
assert_equals(
|
|
||||||
actual_record.key, expected_record.key,
|
|
||||||
'The record must have the expected key');
|
|
||||||
|
|
||||||
// Verify the value.
|
|
||||||
assert_idb_value_equals(actual_record.value, expected_record.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verifies two IDB values are equal. The expected value may be a primitive, an
|
// Verifies two IDB values are equal. The expected value may be a primitive, an
|
||||||
// object, or an array.
|
// object, or an array.
|
||||||
function assert_idb_value_equals(actual_value, expected_value) {
|
function assert_idb_value_equals(actual_value, expected_value) {
|
||||||
|
|
|
@ -26,9 +26,9 @@ promise_test(async () => {
|
||||||
tone: 'as-is',
|
tone: 'as-is',
|
||||||
format: 'as-is',
|
format: 'as-is',
|
||||||
length: 'as-is',
|
length: 'as-is',
|
||||||
expectedInputLanguages: ['es'], // not supported
|
expectedInputLanguages: ['zu'], // not supported
|
||||||
expectedContextLanguages: ['en'],
|
expectedContextLanguages: ['en'],
|
||||||
outputLanguage: 'es', // not supported
|
outputLanguage: 'zu', // not supported
|
||||||
});
|
});
|
||||||
assert_equals(availability, 'unavailable');
|
assert_equals(availability, 'unavailable');
|
||||||
}, 'Rewriter.availability() returns unavailable for unsupported languages');
|
}, 'Rewriter.availability() returns unavailable for unsupported languages');
|
||||||
|
|
|
@ -27,9 +27,9 @@ promise_test(async () => {
|
||||||
type: 'tldr',
|
type: 'tldr',
|
||||||
format: 'plain-text',
|
format: 'plain-text',
|
||||||
length: 'medium',
|
length: 'medium',
|
||||||
expectedInputLanguages: ['es'], // not supported
|
expectedInputLanguages: ['zu'], // not supported
|
||||||
expectedContextLanguages: ['en'],
|
expectedContextLanguages: ['en'],
|
||||||
outputLanguage: 'es', // not supported
|
outputLanguage: 'zu', // not supported
|
||||||
});
|
});
|
||||||
assert_equals(availability, 'unavailable');
|
assert_equals(availability, 'unavailable');
|
||||||
}, 'Summarizer.availability() returns unavailable for unsupported languages');
|
}, 'Summarizer.availability() returns unavailable for unsupported languages');
|
||||||
|
|
|
@ -26,9 +26,9 @@ promise_test(async () => {
|
||||||
tone: 'neutral',
|
tone: 'neutral',
|
||||||
format: 'plain-text',
|
format: 'plain-text',
|
||||||
length: 'medium',
|
length: 'medium',
|
||||||
expectedInputLanguages: ['es'], // not supported
|
expectedInputLanguages: ['zu'], // not supported
|
||||||
expectedContextLanguages: ['en'],
|
expectedContextLanguages: ['en'],
|
||||||
outputLanguage: 'es', // not supported
|
outputLanguage: 'zu', // not supported
|
||||||
});
|
});
|
||||||
assert_equals(availability, 'unavailable');
|
assert_equals(availability, 'unavailable');
|
||||||
}, 'Writer.availability() returns unavailable for unsupported languages');
|
}, 'Writer.availability() returns unavailable for unsupported languages');
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline' 'eval-sha256-VQy4ev8+SNjwocE4f/UdEfFZK/kEkq7mIM/M/mZrVpE='; connect-src 'self';">
|
||||||
|
<title>eval-allowed</title>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../support/logTest.sub.js?logs=[]"></script>
|
||||||
|
<script src='../../support/alertAssert.sub.js?alerts=["PASS, long text that exceeds the 40 character limit used for report snippets"]'></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
window.addEventListener('securitypolicyviolation', function(e) {
|
||||||
|
log("Fail");
|
||||||
|
});
|
||||||
|
|
||||||
|
eval("alert_assert('PASS, long text that exceeds the 40 character limit used for report snippets')");
|
||||||
|
</script>
|
||||||
|
<div id="log"></div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -8,6 +8,8 @@
|
||||||
<script src="/common/get-host-info.sub.js"></script>
|
<script src="/common/get-host-info.sub.js"></script>
|
||||||
<script src="/cookies/resources/cookie-helper.sub.js"></script>
|
<script src="/cookies/resources/cookie-helper.sub.js"></script>
|
||||||
<script src="/cookies/partitioned-cookies/resources/test-helpers.js"></script>
|
<script src="/cookies/partitioned-cookies/resources/test-helpers.js"></script>
|
||||||
|
<script src="/resources/testdriver.js"></script>
|
||||||
|
<script src="/resources/testdriver-vendor.js"></script>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<script>
|
<script>
|
||||||
|
@ -65,7 +67,9 @@ document.body.onload = async () => {
|
||||||
encodeURIComponent(self.origin)}`,
|
encodeURIComponent(self.origin)}`,
|
||||||
get_host_info().HTTPS_NOTSAMESITE_ORIGIN + self.location.pathname);
|
get_host_info().HTTPS_NOTSAMESITE_ORIGIN + self.location.pathname);
|
||||||
const popup = window.open(crossSiteUrl);
|
const popup = window.open(crossSiteUrl);
|
||||||
fetch_tests_from_window(popup);
|
await fetch_tests_from_window(popup);
|
||||||
|
|
||||||
|
await test_driver.delete_all_cookies();
|
||||||
};
|
};
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,18 +1,25 @@
|
||||||
// META: title=Cookie Store API: cookieListItem attributes
|
// META: title=Cookie Store API: cookieListItem attributes
|
||||||
// META: global=window,serviceworker
|
// META: global=serviceworker
|
||||||
|
|
||||||
|
// This is a copy of cookieListItem_attributes.https.window.js, minus all the bits that only work
|
||||||
|
// in a window context, which unfortunately includes the testdriver asserts.
|
||||||
|
//
|
||||||
|
// Please keep them synchronized.
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const kCurrentHostname = (new URL(self.location.href)).hostname;
|
const currentHostname = (new URL(self.location.href)).hostname;
|
||||||
|
|
||||||
const kOneDay = 24 * 60 * 60 * 1000;
|
const oneDayInSeconds = 24 * 60 * 60;
|
||||||
const kFourHundredDays = 400 * kOneDay;
|
const fourHundredDaysInSeconds = 400 * oneDayInSeconds;
|
||||||
const kTenYears = 10 * 365 * kOneDay;
|
const tenYearsInSeconds = 10 * 365 * oneDayInSeconds;
|
||||||
const kFourHundredDaysFromNow = Date.now() + kFourHundredDays;
|
const fourHundredDaysFromNowInSeconds = Date.now() / 1000 + fourHundredDaysInSeconds;
|
||||||
const kTenYearsFromNow = Date.now() + kTenYears;
|
const tenYearsFromNowInSeconds = Date.now() / 1000 + tenYearsInSeconds;
|
||||||
|
|
||||||
const kCookieListItemKeys =
|
function assert_cookie_keys(cookie) {
|
||||||
['domain', 'expires', 'name', 'path', 'sameSite', 'secure', 'value'].sort();
|
const cookieKeys = Object.keys(cookie);
|
||||||
|
assert_array_equals(cookieKeys, ['name', 'value']);
|
||||||
|
}
|
||||||
|
|
||||||
promise_test(async testCase => {
|
promise_test(async testCase => {
|
||||||
await cookieStore.delete('cookie-name');
|
await cookieStore.delete('cookie-name');
|
||||||
|
@ -25,15 +32,7 @@ promise_test(async testCase => {
|
||||||
const cookie = await cookieStore.get('cookie-name');
|
const cookie = await cookieStore.get('cookie-name');
|
||||||
assert_equals(cookie.name, 'cookie-name');
|
assert_equals(cookie.name, 'cookie-name');
|
||||||
assert_equals(cookie.value, 'cookie-value');
|
assert_equals(cookie.value, 'cookie-value');
|
||||||
assert_equals(cookie.domain, null);
|
assert_cookie_keys(cookie);
|
||||||
assert_equals(cookie.path, '/');
|
|
||||||
assert_equals(cookie.expires, null);
|
|
||||||
assert_equals(cookie.secure, true);
|
|
||||||
assert_equals(cookie.sameSite, 'strict');
|
|
||||||
const itemKeys = Object.keys(cookie);
|
|
||||||
for (const key of kCookieListItemKeys) {
|
|
||||||
assert_in_array(key, itemKeys);
|
|
||||||
}
|
|
||||||
}, 'CookieListItem - cookieStore.set defaults with positional name and value');
|
}, 'CookieListItem - cookieStore.set defaults with positional name and value');
|
||||||
|
|
||||||
promise_test(async testCase => {
|
promise_test(async testCase => {
|
||||||
|
@ -46,37 +45,21 @@ promise_test(async testCase => {
|
||||||
const cookie = await cookieStore.get('cookie-name');
|
const cookie = await cookieStore.get('cookie-name');
|
||||||
assert_equals(cookie.name, 'cookie-name');
|
assert_equals(cookie.name, 'cookie-name');
|
||||||
assert_equals(cookie.value, 'cookie-value');
|
assert_equals(cookie.value, 'cookie-value');
|
||||||
assert_equals(cookie.domain, null);
|
assert_cookie_keys(cookie);
|
||||||
assert_equals(cookie.path, '/');
|
|
||||||
assert_equals(cookie.expires, null);
|
|
||||||
assert_equals(cookie.secure, true);
|
|
||||||
assert_equals(cookie.sameSite, 'strict');
|
|
||||||
const itemKeys = Object.keys(cookie);
|
|
||||||
for (const key of kCookieListItemKeys) {
|
|
||||||
assert_in_array(key, itemKeys);
|
|
||||||
}
|
|
||||||
}, 'CookieListItem - cookieStore.set defaults with name and value in options');
|
}, 'CookieListItem - cookieStore.set defaults with name and value in options');
|
||||||
|
|
||||||
promise_test(async testCase => {
|
promise_test(async testCase => {
|
||||||
await cookieStore.delete('cookie-name');
|
await cookieStore.delete('cookie-name');
|
||||||
|
|
||||||
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
|
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
|
||||||
expires: kTenYearsFromNow });
|
expires: tenYearsFromNowInSeconds * 1000 });
|
||||||
testCase.add_cleanup(async () => {
|
testCase.add_cleanup(async () => {
|
||||||
await cookieStore.delete('cookie-name');
|
await cookieStore.delete('cookie-name');
|
||||||
});
|
});
|
||||||
const cookie = await cookieStore.get('cookie-name');
|
const cookie = await cookieStore.get('cookie-name');
|
||||||
assert_equals(cookie.name, 'cookie-name');
|
assert_equals(cookie.name, 'cookie-name');
|
||||||
assert_equals(cookie.value, 'cookie-value');
|
assert_equals(cookie.value, 'cookie-value');
|
||||||
assert_equals(cookie.domain, null);
|
assert_cookie_keys(cookie);
|
||||||
assert_equals(cookie.path, '/');
|
|
||||||
assert_approx_equals(cookie.expires, kFourHundredDaysFromNow, kOneDay);
|
|
||||||
assert_equals(cookie.secure, true);
|
|
||||||
assert_equals(cookie.sameSite, 'strict');
|
|
||||||
const itemKeys = Object.keys(cookie);
|
|
||||||
for (const key of kCookieListItemKeys) {
|
|
||||||
assert_in_array(key, itemKeys);
|
|
||||||
}
|
|
||||||
}, 'CookieListItem - cookieStore.set with expires set to a timestamp 10 ' +
|
}, 'CookieListItem - cookieStore.set with expires set to a timestamp 10 ' +
|
||||||
'years in the future');
|
'years in the future');
|
||||||
|
|
||||||
|
@ -84,40 +67,29 @@ promise_test(async testCase => {
|
||||||
await cookieStore.delete('cookie-name');
|
await cookieStore.delete('cookie-name');
|
||||||
|
|
||||||
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
|
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
|
||||||
expires: new Date(kTenYearsFromNow) });
|
expires: new Date(tenYearsFromNowInSeconds) * 1000 });
|
||||||
testCase.add_cleanup(async () => {
|
testCase.add_cleanup(async () => {
|
||||||
await cookieStore.delete('cookie-name');
|
await cookieStore.delete('cookie-name');
|
||||||
});
|
});
|
||||||
const cookie = await cookieStore.get('cookie-name');
|
const cookie = await cookieStore.get('cookie-name');
|
||||||
assert_equals(cookie.name, 'cookie-name');
|
assert_equals(cookie.name, 'cookie-name');
|
||||||
assert_equals(cookie.value, 'cookie-value');
|
assert_equals(cookie.value, 'cookie-value');
|
||||||
assert_equals(cookie.domain, null);
|
assert_cookie_keys(cookie);
|
||||||
assert_equals(cookie.path, '/');
|
|
||||||
assert_approx_equals(cookie.expires, kFourHundredDaysFromNow, kOneDay);
|
|
||||||
assert_equals(cookie.secure, true);
|
|
||||||
}, 'CookieListItem - cookieStore.set with expires set to a Date 10 ' +
|
}, 'CookieListItem - cookieStore.set with expires set to a Date 10 ' +
|
||||||
'years in the future');
|
'years in the future');
|
||||||
|
|
||||||
promise_test(async testCase => {
|
promise_test(async testCase => {
|
||||||
await cookieStore.delete({ name: 'cookie-name', domain: kCurrentHostname });
|
await cookieStore.delete({ name: 'cookie-name', domain: currentHostname });
|
||||||
|
|
||||||
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
|
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
|
||||||
domain: kCurrentHostname });
|
domain: currentHostname });
|
||||||
testCase.add_cleanup(async () => {
|
testCase.add_cleanup(async () => {
|
||||||
await cookieStore.delete({ name: 'cookie-name', domain: kCurrentHostname });
|
await cookieStore.delete({ name: 'cookie-name', domain: currentHostname });
|
||||||
});
|
});
|
||||||
const cookie = await cookieStore.get('cookie-name');
|
const cookie = await cookieStore.get('cookie-name');
|
||||||
assert_equals(cookie.name, 'cookie-name');
|
assert_equals(cookie.name, 'cookie-name');
|
||||||
assert_equals(cookie.value, 'cookie-value');
|
assert_equals(cookie.value, 'cookie-value');
|
||||||
assert_equals(cookie.domain, kCurrentHostname);
|
assert_cookie_keys(cookie);
|
||||||
assert_equals(cookie.path, '/');
|
|
||||||
assert_equals(cookie.expires, null);
|
|
||||||
assert_equals(cookie.secure, true);
|
|
||||||
assert_equals(cookie.sameSite, 'strict');
|
|
||||||
const itemKeys = Object.keys(cookie);
|
|
||||||
for (const key of kCookieListItemKeys) {
|
|
||||||
assert_in_array(key, itemKeys);
|
|
||||||
}
|
|
||||||
}, 'CookieListItem - cookieStore.set with domain set to the current hostname');
|
}, 'CookieListItem - cookieStore.set with domain set to the current hostname');
|
||||||
|
|
||||||
promise_test(async testCase => {
|
promise_test(async testCase => {
|
||||||
|
@ -135,15 +107,7 @@ promise_test(async testCase => {
|
||||||
const cookie = await cookieStore.get('cookie-name');
|
const cookie = await cookieStore.get('cookie-name');
|
||||||
assert_equals(cookie.name, 'cookie-name');
|
assert_equals(cookie.name, 'cookie-name');
|
||||||
assert_equals(cookie.value, 'cookie-value');
|
assert_equals(cookie.value, 'cookie-value');
|
||||||
assert_equals(cookie.domain, null);
|
assert_cookie_keys(cookie);
|
||||||
assert_equals(cookie.path, currentDirectory);
|
|
||||||
assert_equals(cookie.expires, null);
|
|
||||||
assert_equals(cookie.secure, true);
|
|
||||||
assert_equals(cookie.sameSite, 'strict');
|
|
||||||
const itemKeys = Object.keys(cookie);
|
|
||||||
for (const key of kCookieListItemKeys) {
|
|
||||||
assert_in_array(key, itemKeys);
|
|
||||||
}
|
|
||||||
}, 'CookieListItem - cookieStore.set with path set to the current directory');
|
}, 'CookieListItem - cookieStore.set with path set to the current directory');
|
||||||
|
|
||||||
promise_test(async testCase => {
|
promise_test(async testCase => {
|
||||||
|
@ -160,15 +124,7 @@ promise_test(async testCase => {
|
||||||
const cookie = await cookieStore.get('cookie-name');
|
const cookie = await cookieStore.get('cookie-name');
|
||||||
assert_equals(cookie.name, 'cookie-name');
|
assert_equals(cookie.name, 'cookie-name');
|
||||||
assert_equals(cookie.value, 'cookie-value');
|
assert_equals(cookie.value, 'cookie-value');
|
||||||
assert_equals(cookie.domain, null);
|
assert_cookie_keys(cookie);
|
||||||
assert_equals(cookie.path, currentDirectory);
|
|
||||||
assert_equals(cookie.expires, null);
|
|
||||||
assert_equals(cookie.secure, true);
|
|
||||||
assert_equals(cookie.sameSite, 'strict');
|
|
||||||
const itemKeys = Object.keys(cookie);
|
|
||||||
for (const key of kCookieListItemKeys) {
|
|
||||||
assert_in_array(key, itemKeys);
|
|
||||||
}
|
|
||||||
}, 'CookieListItem - cookieStore.set does not add / to path if it does not end with /');
|
}, 'CookieListItem - cookieStore.set does not add / to path if it does not end with /');
|
||||||
|
|
||||||
['strict', 'lax', 'none'].forEach(sameSiteValue => {
|
['strict', 'lax', 'none'].forEach(sameSiteValue => {
|
||||||
|
@ -183,47 +139,7 @@ promise_test(async testCase => {
|
||||||
const cookie = await cookieStore.get('cookie-name');
|
const cookie = await cookieStore.get('cookie-name');
|
||||||
assert_equals(cookie.name, 'cookie-name');
|
assert_equals(cookie.name, 'cookie-name');
|
||||||
assert_equals(cookie.value, 'cookie-value');
|
assert_equals(cookie.value, 'cookie-value');
|
||||||
assert_equals(cookie.domain, null);
|
assert_cookie_keys(cookie);
|
||||||
assert_equals(cookie.path, '/');
|
|
||||||
assert_equals(cookie.expires, null);
|
|
||||||
assert_equals(cookie.secure, true);
|
|
||||||
assert_equals(cookie.sameSite, sameSiteValue);
|
|
||||||
const itemKeys = Object.keys(cookie);
|
|
||||||
for (const key of kCookieListItemKeys) {
|
|
||||||
assert_in_array(key, itemKeys);
|
|
||||||
}
|
|
||||||
}, `CookieListItem - cookieStore.set with sameSite set to ${sameSiteValue}`);
|
}, `CookieListItem - cookieStore.set with sameSite set to ${sameSiteValue}`);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
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.secure, true);
|
|
||||||
}, 'CookieListItem - secure defaults to true');
|
|
||||||
|
|
||||||
|
|
||||||
if (self.GLOBAL.isWindow()) {
|
|
||||||
promise_test(async testCase => {
|
|
||||||
await cookieStore.delete('cookie-name');
|
|
||||||
testCase.add_cleanup(async () => {
|
|
||||||
await cookieStore.delete('cookie-name');
|
|
||||||
});
|
|
||||||
|
|
||||||
let encodedCookie = encodeURIComponent(JSON.stringify("cookie-name=1; max-age=99999999999999999999999999999; path=/"));
|
|
||||||
await fetch(`/cookies/resources/cookie.py?set=${encodedCookie}`);
|
|
||||||
|
|
||||||
assert_equals(document.cookie, "cookie-name=1", 'The cookie was set as expected.');
|
|
||||||
|
|
||||||
const cookie = await cookieStore.get('cookie-name');
|
|
||||||
assert_equals(cookie.name, 'cookie-name');
|
|
||||||
assert_equals(cookie.value, '1');
|
|
||||||
assert_approx_equals(cookie.expires, kFourHundredDaysFromNow, kOneDay);
|
|
||||||
}, "Test max-age attribute over the 400 days");
|
|
||||||
}
|
|
||||||
|
|
201
tests/wpt/tests/cookiestore/cookieListItem_attributes.https.window.js
vendored
Normal file
201
tests/wpt/tests/cookiestore/cookieListItem_attributes.https.window.js
vendored
Normal file
|
@ -0,0 +1,201 @@
|
||||||
|
// META: title=Cookie Store API: cookieListItem attributes
|
||||||
|
// META: script=/resources/testdriver.js
|
||||||
|
// META: script=/resources/testdriver-vendor.js
|
||||||
|
|
||||||
|
// Please keep this synchronized with cookieListItem_attributes.https.any.js.
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const currentHostname = location.hostname;
|
||||||
|
|
||||||
|
const oneDayInSeconds = 24 * 60 * 60;
|
||||||
|
const fourHundredDaysInSeconds = 400 * oneDayInSeconds;
|
||||||
|
const tenYearsInSeconds = 10 * 365 * oneDayInSeconds;
|
||||||
|
const fourHundredDaysFromNowInSeconds = Date.now() / 1000 + fourHundredDaysInSeconds;
|
||||||
|
const tenYearsFromNowInSeconds = Date.now() / 1000 + tenYearsInSeconds;
|
||||||
|
|
||||||
|
function assert_cookie_keys(cookie) {
|
||||||
|
const cookieKeys = Object.keys(cookie);
|
||||||
|
assert_array_equals(cookieKeys, ['name', 'value']);
|
||||||
|
}
|
||||||
|
|
||||||
|
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');
|
||||||
|
assert_cookie_keys(cookie);
|
||||||
|
|
||||||
|
const internalCookie = await test_driver.get_named_cookie('cookie-name');
|
||||||
|
assert_equals(internalCookie.name, 'cookie-name');
|
||||||
|
assert_equals(internalCookie.value, 'cookie-value');
|
||||||
|
assert_equals(internalCookie.path, '/');
|
||||||
|
assert_equals(internalCookie.domain, currentHostname);
|
||||||
|
assert_true(internalCookie.secure);
|
||||||
|
assert_false(internalCookie.httpOnly);
|
||||||
|
assert_equals(internalCookie.expiry, undefined);
|
||||||
|
assert_equals(internalCookie.sameSite, 'Strict');
|
||||||
|
}, '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');
|
||||||
|
assert_cookie_keys(cookie);
|
||||||
|
|
||||||
|
const internalCookie = await test_driver.get_named_cookie('cookie-name');
|
||||||
|
assert_equals(internalCookie.name, 'cookie-name');
|
||||||
|
assert_equals(internalCookie.value, 'cookie-value');
|
||||||
|
assert_equals(internalCookie.path, '/');
|
||||||
|
assert_equals(internalCookie.domain, currentHostname);
|
||||||
|
assert_true(internalCookie.secure);
|
||||||
|
assert_false(internalCookie.httpOnly);
|
||||||
|
assert_equals(internalCookie.expiry, undefined);
|
||||||
|
assert_equals(internalCookie.sameSite, 'Strict');
|
||||||
|
}, 'CookieListItem - cookieStore.set defaults with name and value in options');
|
||||||
|
|
||||||
|
promise_test(async testCase => {
|
||||||
|
await cookieStore.delete('cookie-name');
|
||||||
|
|
||||||
|
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
|
||||||
|
expires: tenYearsFromNowInSeconds * 1000 });
|
||||||
|
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');
|
||||||
|
assert_cookie_keys(cookie);
|
||||||
|
|
||||||
|
const internalCookie = await test_driver.get_named_cookie('cookie-name');
|
||||||
|
assert_approx_equals(internalCookie.expiry, fourHundredDaysFromNowInSeconds, oneDayInSeconds);
|
||||||
|
}, 'CookieListItem - cookieStore.set with expires set to a timestamp 10 ' +
|
||||||
|
'years in the future');
|
||||||
|
|
||||||
|
promise_test(async testCase => {
|
||||||
|
await cookieStore.delete('cookie-name');
|
||||||
|
|
||||||
|
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
|
||||||
|
expires: new Date(tenYearsFromNowInSeconds) * 1000 });
|
||||||
|
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');
|
||||||
|
assert_cookie_keys(cookie);
|
||||||
|
|
||||||
|
const internalCookie = await test_driver.get_named_cookie('cookie-name');
|
||||||
|
assert_approx_equals(internalCookie.expiry, fourHundredDaysFromNowInSeconds, oneDayInSeconds);
|
||||||
|
}, 'CookieListItem - cookieStore.set with expires set to a Date 10 ' +
|
||||||
|
'years in the future');
|
||||||
|
|
||||||
|
promise_test(async testCase => {
|
||||||
|
await cookieStore.delete({ name: 'cookie-name', domain: currentHostname });
|
||||||
|
|
||||||
|
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
|
||||||
|
domain: currentHostname });
|
||||||
|
testCase.add_cleanup(async () => {
|
||||||
|
await cookieStore.delete({ name: 'cookie-name', domain: currentHostname });
|
||||||
|
});
|
||||||
|
const cookie = await cookieStore.get('cookie-name');
|
||||||
|
assert_equals(cookie.name, 'cookie-name');
|
||||||
|
assert_equals(cookie.value, 'cookie-value');
|
||||||
|
assert_cookie_keys(cookie);
|
||||||
|
|
||||||
|
const internalCookie = await test_driver.get_named_cookie('cookie-name');
|
||||||
|
assert_equals(internalCookie.domain, currentHostname);
|
||||||
|
}, 'CookieListItem - cookieStore.set with domain set to the current hostname');
|
||||||
|
|
||||||
|
promise_test(async testCase => {
|
||||||
|
const currentUrl = new URL(self.location.href);
|
||||||
|
const currentPath = currentUrl.pathname;
|
||||||
|
const currentDirectory =
|
||||||
|
currentPath.substr(0, currentPath.lastIndexOf('/') + 1);
|
||||||
|
await cookieStore.delete({ name: 'cookie-name', path: currentDirectory });
|
||||||
|
|
||||||
|
await cookieStore.set({ name: 'cookie-name', value: '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');
|
||||||
|
assert_cookie_keys(cookie);
|
||||||
|
|
||||||
|
const internalCookie = await test_driver.get_named_cookie('cookie-name');
|
||||||
|
assert_equals(internalCookie.path, currentDirectory);
|
||||||
|
}, 'CookieListItem - cookieStore.set with path set to the current directory');
|
||||||
|
|
||||||
|
promise_test(async testCase => {
|
||||||
|
const currentUrl = new URL(self.location.href);
|
||||||
|
const currentPath = currentUrl.pathname;
|
||||||
|
const currentDirectory = currentPath.substr(0, currentPath.lastIndexOf('/'));
|
||||||
|
await cookieStore.delete({ name: 'cookie-name', path: currentDirectory });
|
||||||
|
|
||||||
|
await cookieStore.set({ name: 'cookie-name', value: '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');
|
||||||
|
assert_cookie_keys(cookie);
|
||||||
|
|
||||||
|
const internalCookie = await test_driver.get_named_cookie('cookie-name');
|
||||||
|
assert_equals(internalCookie.path, currentDirectory);
|
||||||
|
}, 'CookieListItem - cookieStore.set does not add / to path if it does not end with /');
|
||||||
|
|
||||||
|
['strict', 'lax', 'none'].forEach(sameSiteValue => {
|
||||||
|
promise_test(async testCase => {
|
||||||
|
await cookieStore.delete('cookie-name');
|
||||||
|
|
||||||
|
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');
|
||||||
|
assert_cookie_keys(cookie);
|
||||||
|
|
||||||
|
const internalCookie = await test_driver.get_named_cookie('cookie-name');
|
||||||
|
assert_equals(internalCookie.sameSite, sameSiteValue.charAt(0).toUpperCase() + sameSiteValue.slice(1));
|
||||||
|
}, `CookieListItem - cookieStore.set with sameSite set to ${sameSiteValue}`);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
promise_test(async testCase => {
|
||||||
|
await cookieStore.delete('cookie-name');
|
||||||
|
testCase.add_cleanup(async () => {
|
||||||
|
await cookieStore.delete('cookie-name');
|
||||||
|
});
|
||||||
|
|
||||||
|
let encodedCookie = encodeURIComponent(JSON.stringify("cookie-name=1; max-age=99999999999999999999999999999; path=/"));
|
||||||
|
await fetch(`/cookies/resources/cookie.py?set=${encodedCookie}`);
|
||||||
|
|
||||||
|
assert_equals(document.cookie, "cookie-name=1", 'The cookie was set as expected.');
|
||||||
|
|
||||||
|
const cookie = await cookieStore.get('cookie-name');
|
||||||
|
assert_equals(cookie.name, 'cookie-name');
|
||||||
|
assert_equals(cookie.value, '1');
|
||||||
|
assert_cookie_keys(cookie);
|
||||||
|
|
||||||
|
const internalCookie = await test_driver.get_named_cookie('cookie-name');
|
||||||
|
assert_approx_equals(internalCookie.expiry, fourHundredDaysFromNowInSeconds, oneDayInSeconds);
|
||||||
|
}, "Test max-age attribute over the 400 days");
|
|
@ -220,3 +220,12 @@ promise_test(async testCase => {
|
||||||
const cookie = await cookieStore.get('cookie-name');
|
const cookie = await cookieStore.get('cookie-name');
|
||||||
assert_equals(cookie, null);
|
assert_equals(cookie, null);
|
||||||
}, 'cookieStore.delete with a __Host- prefix should not have a domain');
|
}, 'cookieStore.delete with a __Host- prefix should not have a domain');
|
||||||
|
|
||||||
|
promise_test(async testCase => {
|
||||||
|
await cookieStore.set('cookie-name', 'cookie-value');
|
||||||
|
testCase.add_cleanup(async () => {
|
||||||
|
await cookieStore.delete('cookie-name');
|
||||||
|
});
|
||||||
|
const cookie = await cookieStore.delete(' cookie-name \t');
|
||||||
|
assert_equals(cookie, undefined);
|
||||||
|
}, 'cookieStore.delete with whitespace');
|
||||||
|
|
|
@ -194,3 +194,14 @@ promise_test(async testCase => {
|
||||||
assert_equals(cookies[0].value, 'cookie-value');
|
assert_equals(cookies[0].value, 'cookie-value');
|
||||||
}
|
}
|
||||||
}, 'cookieStore.getAll with absolute different url in options');
|
}, 'cookieStore.getAll with absolute different url in 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(' cookie-name \t');
|
||||||
|
assert_equals(cookies.length, 1);
|
||||||
|
assert_equals(cookies[0].name, 'cookie-name');
|
||||||
|
assert_equals(cookies[0].value, 'cookie-value');
|
||||||
|
}, 'cookieStore.getAll with whitespace');
|
||||||
|
|
|
@ -142,3 +142,13 @@ promise_test(async testCase => {
|
||||||
assert_equals(cookie.value, 'cookie-value');
|
assert_equals(cookie.value, 'cookie-value');
|
||||||
}
|
}
|
||||||
}, 'cookieStore.get with absolute different url in options');
|
}, 'cookieStore.get with absolute different url 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 \t');
|
||||||
|
assert_equals(cookie.name, 'cookie-name');
|
||||||
|
assert_equals(cookie.value, 'cookie-value');
|
||||||
|
}, 'cookieStore.get with whitespace');
|
||||||
|
|
|
@ -390,26 +390,29 @@ promise_test(async testCase => {
|
||||||
}, 'cookieStore.set with whitespace only name and value');
|
}, 'cookieStore.set with whitespace only name and value');
|
||||||
|
|
||||||
promise_test(async testCase => {
|
promise_test(async testCase => {
|
||||||
testCase.add_cleanup(async () => {
|
const tests = [
|
||||||
await cookieStore.delete('a b');
|
{ set: ['a b', 'x y'], get: ['a b', 'x y'] },
|
||||||
});
|
{ set: ['a ', 'x'], get: ['a', 'x'] },
|
||||||
await cookieStore.set('a b', 'x y');
|
{ set: ['a\t', 'x'], get: ['a', 'x'] },
|
||||||
const cookie = await cookieStore.get('a b');
|
{ set: [' a', 'x'], get: ['a', 'x'] },
|
||||||
assert_equals(cookie.value, "x y");
|
{ set: [' \t a', 'x'], get: ['a', 'x'] },
|
||||||
|
{ set: [' \t a \t\t', 'x'], get: ['a', 'x'] },
|
||||||
|
{ set: ['a', 'x '], get: ['a', 'x'] },
|
||||||
|
{ set: ['a', 'x\t'], get: ['a', 'x'] },
|
||||||
|
{ set: ['a', ' x'], get: ['a', 'x'] },
|
||||||
|
{ set: ['a', ' \t x'], get: ['a', 'x'] },
|
||||||
|
{ set: ['a', ' \t x \t\t'], get: ['a', 'x'] },
|
||||||
|
];
|
||||||
|
|
||||||
await promise_rejects_js(testCase, TypeError, cookieStore.set(
|
for (const t of tests) {
|
||||||
{ name: 'a ',
|
await cookieStore.set(t.set[0], t.set[1]);
|
||||||
value: 'x' }));
|
let cookie = await cookieStore.get(t.get[0]);
|
||||||
|
assert_equals(cookie.value, t.get[1]);
|
||||||
|
|
||||||
await promise_rejects_js(testCase, TypeError, cookieStore.set(
|
await cookieStore.delete(t.get[0]);
|
||||||
{ name: ' a',
|
|
||||||
value: 'x' }));
|
|
||||||
|
|
||||||
await promise_rejects_js(testCase, TypeError, cookieStore.set(
|
cookie = await cookieStore.get(t.get[0]);
|
||||||
{ name: 'a',
|
assert_equals(cookie, null);
|
||||||
value: 'x ' }));
|
}
|
||||||
|
|
||||||
await promise_rejects_js(testCase, TypeError, cookieStore.set(
|
|
||||||
{ name: 'a',
|
|
||||||
value: 'x ' }));
|
|
||||||
}, 'cookieStore.set with whitespace at begining or end');
|
}, 'cookieStore.set with whitespace at begining or end');
|
||||||
|
|
|
@ -3,8 +3,6 @@
|
||||||
<head>
|
<head>
|
||||||
<script src="/resources/testharness.js"></script>
|
<script src="/resources/testharness.js"></script>
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
<script src="/resources/testdriver.js"></script>
|
|
||||||
<script src="/resources/testdriver-vendor.js"></script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script>
|
<script>
|
||||||
|
|
|
@ -3,8 +3,6 @@
|
||||||
<head>
|
<head>
|
||||||
<script src="/resources/testharness.js"></script>
|
<script src="/resources/testharness.js"></script>
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
<script src="/resources/testdriver.js"></script>
|
|
||||||
<script src="/resources/testdriver-vendor.js"></script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script>
|
<script>
|
||||||
|
|
|
@ -2,8 +2,6 @@
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<script src="/resources/testharness.js"></script>
|
<script src="/resources/testharness.js"></script>
|
||||||
<script src="/resources/testdriver.js"></script>
|
|
||||||
<script src="/resources/testdriver-vendor.js"></script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script>
|
<script>
|
||||||
|
|
2
tests/wpt/tests/css/CSS2/i18n/META.yml
vendored
2
tests/wpt/tests/css/CSS2/i18n/META.yml
vendored
|
@ -1,2 +1,2 @@
|
||||||
suggested_reviewers:
|
suggested_reviewers:
|
||||||
- r12a
|
- xfq
|
||||||
|
|
|
@ -6,10 +6,17 @@
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
<style>
|
<style>
|
||||||
body { margin: 0; }
|
body { margin: 0; }
|
||||||
|
#cb {
|
||||||
|
position: relative;
|
||||||
|
width: 400px;
|
||||||
|
height: 100px;
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
#a1 {
|
#a1 {
|
||||||
anchor-name: --a1;
|
anchor-name: --a1;
|
||||||
width: 100px;
|
width: 100px;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
|
background: green;
|
||||||
}
|
}
|
||||||
#t1 {
|
#t1 {
|
||||||
position-anchor: --a1;
|
position-anchor: --a1;
|
||||||
|
@ -20,13 +27,16 @@
|
||||||
position-try-fallbacks: --right;
|
position-try-fallbacks: --right;
|
||||||
width: 200px;
|
width: 200px;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
|
background: cyan;
|
||||||
}
|
}
|
||||||
@position-try --right {
|
@position-try --right {
|
||||||
position-area: right;
|
position-area: right;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<div id="a1"></div>
|
<div id="cb">
|
||||||
<div id="t1"></div>
|
<div id="a1"></div>
|
||||||
|
<div id="t1"></div>
|
||||||
|
</div>
|
||||||
<script>
|
<script>
|
||||||
test(() => {
|
test(() => {
|
||||||
assert_equals(t1.offsetLeft, 100, "Positioned using --right fallback");
|
assert_equals(t1.offsetLeft, 100, "Positioned using --right fallback");
|
||||||
|
|
54
tests/wpt/tests/css/css-anchor-position/anchor-getComputedStyle-004.html
vendored
Normal file
54
tests/wpt/tests/css/css-anchor-position/anchor-getComputedStyle-004.html
vendored
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Tests getComputedStyle() for inset properties using position-area</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/cssom/#resolved-value">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<style>
|
||||||
|
#container {
|
||||||
|
position: relative;
|
||||||
|
width: 300px;
|
||||||
|
height: 300px;
|
||||||
|
}
|
||||||
|
#anchor {
|
||||||
|
anchor-name: --a;
|
||||||
|
margin-left: 80px;
|
||||||
|
margin-top: 130px;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
.anchored {
|
||||||
|
position: absolute;
|
||||||
|
position-anchor: --a;
|
||||||
|
position-area: center center;
|
||||||
|
}
|
||||||
|
#t1 {
|
||||||
|
inset: 10px;
|
||||||
|
}
|
||||||
|
#t2 {
|
||||||
|
inset: auto;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id="container">
|
||||||
|
<div id="anchor"></div>
|
||||||
|
<div id="t1" class="anchored"></div>
|
||||||
|
<div id="t2" class="anchored"></div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
const style = getComputedStyle(t1);
|
||||||
|
assert_equals(style.top, "10px");
|
||||||
|
assert_equals(style.left, "10px");
|
||||||
|
assert_equals(style.bottom, "10px");
|
||||||
|
assert_equals(style.right, "10px");
|
||||||
|
}, "position-area does not affect resolved inset properties");
|
||||||
|
|
||||||
|
test(() => {
|
||||||
|
const style = getComputedStyle(t2);
|
||||||
|
assert_equals(style.top, "0px");
|
||||||
|
assert_equals(style.left, "0px");
|
||||||
|
assert_equals(style.bottom, "0px");
|
||||||
|
assert_equals(style.right, "0px");
|
||||||
|
}, "'auto' inset properties resolve to 0px when position-area is non-initial");
|
||||||
|
</script>
|
|
@ -0,0 +1,38 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Implicit anchor element for pseudo-elements using anchor functions - dynamic change</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#implicit">
|
||||||
|
<link rel="match" href="position-area-pseudo-element-implicit-anchor-ref.html">
|
||||||
|
<style>
|
||||||
|
body { margin: 0 }
|
||||||
|
#target {
|
||||||
|
margin-top: 200px;
|
||||||
|
margin-left: 200px;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background: blue;
|
||||||
|
}
|
||||||
|
#target::before, #target::after {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
#target.moved {
|
||||||
|
margin-top: 100px;
|
||||||
|
margin-left: 50px;
|
||||||
|
}
|
||||||
|
#target::before {
|
||||||
|
position-area: center right;
|
||||||
|
background: green;
|
||||||
|
content:'';
|
||||||
|
}
|
||||||
|
#target::after {
|
||||||
|
position-area: bottom center;
|
||||||
|
background: green;
|
||||||
|
content:'';
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id=target></div>
|
||||||
|
<script>
|
||||||
|
target.offsetTop;
|
||||||
|
target.classList.add("moved");
|
||||||
|
</script>
|
31
tests/wpt/tests/css/css-anchor-position/position-area-pseudo-element-implicit-anchor-ref.html
vendored
Normal file
31
tests/wpt/tests/css/css-anchor-position/position-area-pseudo-element-implicit-anchor-ref.html
vendored
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>CSS Test Reference</title>
|
||||||
|
<style>
|
||||||
|
body { margin: 0 }
|
||||||
|
#target {
|
||||||
|
margin-top: 100px;
|
||||||
|
margin-left: 50px;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background: blue;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
#target > div {
|
||||||
|
position: absolute;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background: green;
|
||||||
|
}
|
||||||
|
#bottom {
|
||||||
|
top: 100px;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
#right {
|
||||||
|
top: 0px;
|
||||||
|
left: 100px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id=target>
|
||||||
|
<div id=bottom></div>
|
||||||
|
<div id=right></div>
|
||||||
|
</div>
|
|
@ -1,8 +1,7 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<title>Implicit anchor element for pseudo-elements using anchor functions</title>
|
<title>Implicit anchor element for pseudo-elements using anchor functions</title>
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#implicit">
|
<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#implicit">
|
||||||
<script src="/resources/testharness.js"></script>
|
<link rel="match" href="position-area-pseudo-element-implicit-anchor-ref.html">
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
|
||||||
<style>
|
<style>
|
||||||
body { margin: 0 }
|
body { margin: 0 }
|
||||||
#target {
|
#target {
|
||||||
|
@ -17,10 +16,6 @@ body { margin: 0 }
|
||||||
height: 100px;
|
height: 100px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
}
|
}
|
||||||
#target.moved {
|
|
||||||
margin-top: 200px;
|
|
||||||
margin-left: 200px;
|
|
||||||
}
|
|
||||||
#target::before {
|
#target::before {
|
||||||
position-area: center right;
|
position-area: center right;
|
||||||
background: green;
|
background: green;
|
||||||
|
@ -33,19 +28,3 @@ body { margin: 0 }
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<div id=target></div>
|
<div id=target></div>
|
||||||
<script>
|
|
||||||
test(() => {
|
|
||||||
assert_equals(getComputedStyle(target, '::before').top, '100px');
|
|
||||||
assert_equals(getComputedStyle(target, '::before').left, '150px');
|
|
||||||
assert_equals(getComputedStyle(target, '::after').top, '200px');
|
|
||||||
assert_equals(getComputedStyle(target, '::after').left, '50px');
|
|
||||||
}, "The implicit anchor element of a pseudo-element is its originating element");
|
|
||||||
|
|
||||||
test(() => {
|
|
||||||
target.classList.add("moved");
|
|
||||||
assert_equals(getComputedStyle(target, '::before').top, '200px');
|
|
||||||
assert_equals(getComputedStyle(target, '::before').left, '300px');
|
|
||||||
assert_equals(getComputedStyle(target, '::after').top, '300px');
|
|
||||||
assert_equals(getComputedStyle(target, '::after').left, '200px');
|
|
||||||
}, "Anchored position after moving");
|
|
||||||
</script>
|
|
||||||
|
|
|
@ -97,7 +97,6 @@ const properties = [
|
||||||
"-moz-transition-property",
|
"-moz-transition-property",
|
||||||
"-moz-transition-timing-function",
|
"-moz-transition-timing-function",
|
||||||
"-moz-user-focus",
|
"-moz-user-focus",
|
||||||
"-moz-user-input",
|
|
||||||
"-moz-user-modify",
|
"-moz-user-modify",
|
||||||
"-moz-user-select",
|
"-moz-user-select",
|
||||||
"-moz-window-dragging",
|
"-moz-window-dragging",
|
||||||
|
|
32
tests/wpt/tests/css/css-contain/contain-size-014.html
vendored
Normal file
32
tests/wpt/tests/css/css-contain/contain-size-014.html
vendored
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>size-contained elements should still ignore children, even with an aspect-ratio</title>
|
||||||
|
<link rel="author" title="Psychpsyo" href="psychpsyo@gmail.com">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-size">
|
||||||
|
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
|
||||||
|
<style>
|
||||||
|
#outer {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
#bottom {
|
||||||
|
container-type: size;
|
||||||
|
aspect-ratio: 1;
|
||||||
|
background-color: red;
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
#top {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
background-color: green;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||||
|
<div id="outer">
|
||||||
|
<div id="bottom">
|
||||||
|
<img height="200">
|
||||||
|
</div>
|
||||||
|
<div id="top"></div>
|
||||||
|
</div>
|
|
@ -1,5 +1,5 @@
|
||||||
spec: https://drafts.csswg.org/css-counter-styles/
|
spec: https://drafts.csswg.org/css-counter-styles/
|
||||||
suggested_reviewers:
|
suggested_reviewers:
|
||||||
- r12a
|
- xfq
|
||||||
- svgeesus
|
- svgeesus
|
||||||
- tabatkins
|
- tabatkins
|
||||||
|
|
25
tests/wpt/tests/css/css-gaps/animation/gap-decorations-color-neutral-keyframe-004.html
vendored
Normal file
25
tests/wpt/tests/css/css-gaps/animation/gap-decorations-color-neutral-keyframe-004.html
vendored
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>gap decorations column-rule-color neutral keyframe</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-color">
|
||||||
|
<meta name="assert" content="gap decorations column-rule-color value list supports neutral keyframe.">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/interpolation-testcommon.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="target"></div>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
target.style.rowRuleStyle = 'solid';
|
||||||
|
target.style.rowRuleColor = 'repeat(3, black black) repeat(1, red)';
|
||||||
|
var animation = target.animate([{}, {rowRuleColor: 'repeat(3, red red) repeat(1, black)'}], 1000);
|
||||||
|
animation.pause();
|
||||||
|
animation.currentTime = 500;
|
||||||
|
assert_equals(getComputedStyle(target).rowRuleColor, 'repeat(3, rgb(128, 0, 0) rgb(128, 0, 0)) repeat(1, rgb(128, 0, 0))');
|
||||||
|
}, 'gap decorations row-rule-color value list supports neutral keyframe.');
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
25
tests/wpt/tests/css/css-gaps/animation/gap-decorations-color-neutral-keyframe-005.html
vendored
Normal file
25
tests/wpt/tests/css/css-gaps/animation/gap-decorations-color-neutral-keyframe-005.html
vendored
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>gap decorations column-rule-color neutral keyframe</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-color">
|
||||||
|
<meta name="assert" content="gap decorations column-rule-color value list supports neutral keyframe.">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/interpolation-testcommon.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="target"></div>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
target.style.rowRuleStyle = 'solid';
|
||||||
|
target.style.rowRuleColor = 'repeat(3, black black) red red';
|
||||||
|
var animation = target.animate([{}, {rowRuleColor: 'repeat(3, red red) black black'}], 1000);
|
||||||
|
animation.pause();
|
||||||
|
animation.currentTime = 500;
|
||||||
|
assert_equals(getComputedStyle(target).rowRuleColor, 'repeat(3, rgb(128, 0, 0) rgb(128, 0, 0)) rgb(128, 0, 0) rgb(128, 0, 0)');
|
||||||
|
}, 'gap decorations row-rule-color value list supports neutral keyframe.');
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
49
tests/wpt/tests/css/css-gaps/animation/rule-color-interpolation-conversion-001.html
vendored
Normal file
49
tests/wpt/tests/css/css-gaps/animation/rule-color-interpolation-conversion-001.html
vendored
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS gap color change computed value to non compatible value mid-animation</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-color">
|
||||||
|
<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/web-animations/testcommon.js"></script>
|
||||||
|
<style>
|
||||||
|
#target {
|
||||||
|
column-rule-color: blue;
|
||||||
|
animation: color-anim 2s linear paused;
|
||||||
|
}
|
||||||
|
@keyframes color-anim {
|
||||||
|
from { column-rule-color: red; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="target">Dynamic Gap-Color Test</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
promise_test(async () => {
|
||||||
|
const el = document.getElementById('target');
|
||||||
|
const anim = el.getAnimations()[0];
|
||||||
|
|
||||||
|
assert_equals(getComputedStyle(el).columnRuleColor, 'rgb(255, 0, 0)');
|
||||||
|
|
||||||
|
// Jump to 50% of the animation.
|
||||||
|
anim.currentTime = anim.effect.getComputedTiming().duration / 2;
|
||||||
|
|
||||||
|
const intermediate = getComputedStyle(el).columnRuleColor;
|
||||||
|
assert_equals(
|
||||||
|
intermediate,
|
||||||
|
'rgb(128, 0, 128)' // The color at 50% of the animation.
|
||||||
|
);
|
||||||
|
|
||||||
|
el.style.columnRuleColor = 'repeat(2, red)';
|
||||||
|
|
||||||
|
const snapped = getComputedStyle(el).columnRuleColor;
|
||||||
|
assert_equals(
|
||||||
|
snapped,
|
||||||
|
'repeat(2, rgb(255, 0, 0))'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
49
tests/wpt/tests/css/css-gaps/animation/rule-color-interpolation-conversion-002.html
vendored
Normal file
49
tests/wpt/tests/css/css-gaps/animation/rule-color-interpolation-conversion-002.html
vendored
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS gap color change computed value to compatible value mid-animation</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-color">
|
||||||
|
<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/web-animations/testcommon.js"></script>
|
||||||
|
<style>
|
||||||
|
#target {
|
||||||
|
column-rule-color: blue blue;
|
||||||
|
animation: color-anim 2s linear paused;
|
||||||
|
}
|
||||||
|
@keyframes color-anim {
|
||||||
|
from { column-rule-color: red; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="target">Dynamic Gap-Color Test</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
promise_test(async () => {
|
||||||
|
const el = document.getElementById('target');
|
||||||
|
const anim = el.getAnimations()[0];
|
||||||
|
|
||||||
|
assert_equals(getComputedStyle(el).columnRuleColor, 'rgb(255, 0, 0)');
|
||||||
|
|
||||||
|
// Jump to 50% of the animation.
|
||||||
|
anim.currentTime = anim.effect.getComputedTiming().duration / 2;
|
||||||
|
|
||||||
|
const snapped = getComputedStyle(el).columnRuleColor;
|
||||||
|
assert_equals(
|
||||||
|
snapped,
|
||||||
|
'rgb(0, 0, 255) rgb(0, 0, 255)'
|
||||||
|
);
|
||||||
|
|
||||||
|
el.style.columnRuleColor = 'blue';
|
||||||
|
|
||||||
|
const intermediate = getComputedStyle(el).columnRuleColor;
|
||||||
|
assert_equals(
|
||||||
|
intermediate,
|
||||||
|
'rgb(128, 0, 128)' // The color at 50% of the animation.
|
||||||
|
);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
34
tests/wpt/tests/css/css-gaps/animation/rule-color-interpolation-conversion-crash.html
vendored
Normal file
34
tests/wpt/tests/css/css-gaps/animation/rule-color-interpolation-conversion-crash.html
vendored
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="test-wait">
|
||||||
|
<title>rule-color interpolation</title>
|
||||||
|
<link rel="author" title="Kevin Ellis" href="mailto:kevers@chromium.org">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-color">
|
||||||
|
<style>
|
||||||
|
#target {
|
||||||
|
animation: anim 1s paused;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes anim {
|
||||||
|
from {
|
||||||
|
column-rule-color: green;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
async function runTest() {
|
||||||
|
requestAnimationFrame(async () => {
|
||||||
|
const anim = document.getAnimations()[0];
|
||||||
|
await anim.ready;
|
||||||
|
document.body.style.zoom = 2;
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
document.documentElement.classList.remove('test-wait');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
window.onload = runTest();
|
||||||
|
</script>
|
||||||
|
<body>
|
||||||
|
<div id="target">Hello world</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
59
tests/wpt/tests/css/css-gaps/animation/rule-color-interpolation-multiple-values-001.html
vendored
Normal file
59
tests/wpt/tests/css/css-gaps/animation/rule-color-interpolation-multiple-values-001.html
vendored
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>rule-color interpolation</title>
|
||||||
|
<link rel="author" title="Javier Contreras" href="mailto:javiercon@chromium.org">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-color">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/interpolation-testcommon.js"></script>
|
||||||
|
<style>
|
||||||
|
.parent {
|
||||||
|
row-rule-style: solid;
|
||||||
|
row-rule-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.target {
|
||||||
|
display: flex;
|
||||||
|
row-gap: 10px;
|
||||||
|
row-rule-width: 10px;
|
||||||
|
row-rule-style: solid;
|
||||||
|
row-rule-color: black black black;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
column-rule-color: 10px;
|
||||||
|
column-rule-style: solid;
|
||||||
|
column-rule-color: black red blue;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
test_interpolation({
|
||||||
|
property: 'row-rule-color',
|
||||||
|
from: neutralKeyframe,
|
||||||
|
to: 'red red red',
|
||||||
|
}, [
|
||||||
|
{ at: -0.3, expect: 'black black black' },
|
||||||
|
{ at: 0, expect: 'black black black' },
|
||||||
|
{ at: 0.3, expect: 'rgb(77, 0, 0) rgb(77, 0, 0) rgb(77, 0, 0)' },
|
||||||
|
{ at: 0.6, expect: 'rgb(153, 0, 0) rgb(153, 0, 0) rgb(153, 0, 0)' },
|
||||||
|
{ at: 1, expect: 'red red red' },
|
||||||
|
{ at: 1.5, expect: 'red red red' },
|
||||||
|
]);
|
||||||
|
|
||||||
|
test_interpolation({
|
||||||
|
property: 'column-rule-color',
|
||||||
|
from: neutralKeyframe,
|
||||||
|
to: 'red blue red',
|
||||||
|
}, [
|
||||||
|
{ at: -0.3, expect: 'black red blue' },
|
||||||
|
{ at: 0, expect: 'black red blue' },
|
||||||
|
{ at: 0.3, expect: 'rgb(77, 0, 0) rgb(179, 0, 77) rgb(77, 0, 179)' },
|
||||||
|
{ at: 0.6, expect: 'rgb(153, 0, 0) rgb(102, 0, 153) rgb(153, 0, 102)' },
|
||||||
|
{ at: 1, expect: 'red blue red' },
|
||||||
|
{ at: 1.5, expect: 'red blue red' },
|
||||||
|
]);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
121
tests/wpt/tests/css/css-gaps/animation/rule-color-interpolation-repeaters-001.html
vendored
Normal file
121
tests/wpt/tests/css/css-gaps/animation/rule-color-interpolation-repeaters-001.html
vendored
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>rule-color interpolation with repeaters</title>
|
||||||
|
<link rel="author" title="Javier Contreras" href="mailto:javiercon@chromium.org">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-color">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/interpolation-testcommon.js"></script>
|
||||||
|
<style>
|
||||||
|
.parent {
|
||||||
|
row-rule-style: solid;
|
||||||
|
row-rule-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.target {
|
||||||
|
row-gap: 40px;
|
||||||
|
column-gap: 40px;
|
||||||
|
row-rule-width: 10px;
|
||||||
|
row-rule-style: solid;
|
||||||
|
row-rule-color: black repeat(2, red blue) black;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
column-rule-width: 10px;
|
||||||
|
column-rule-style: solid;
|
||||||
|
column-rule-color: repeat(2, black red);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
// Valid Interpolations:
|
||||||
|
test_interpolation({
|
||||||
|
property: 'row-rule-color',
|
||||||
|
from: neutralKeyframe,
|
||||||
|
to: 'red repeat(2, black black) blue',
|
||||||
|
}, [
|
||||||
|
{ at: -0.3, expect: 'black repeat(2, red blue) black' },
|
||||||
|
{ at: 0, expect: 'black repeat(2, red blue) black' },
|
||||||
|
{ at: 0.3, expect: 'rgb(77, 0, 0) repeat(2, rgb(179, 0, 0) rgb(0, 0, 179)) rgb(0, 0, 77)' },
|
||||||
|
{ at: 0.6, expect: 'rgb(153, 0, 0) repeat(2, rgb(102, 0, 0) rgb(0, 0, 102)) rgb(0, 0, 153)' },
|
||||||
|
{ at: 1, expect: 'rgb(255, 0, 0) repeat(2, rgb(0, 0, 0) rgb(0, 0, 0)) rgb(0, 0, 255)' },
|
||||||
|
{ at: 1.5, expect: 'rgb(255, 0, 0) repeat(2, rgb(0, 0, 0) rgb(0, 0, 0)) rgb(0, 0, 255)' },
|
||||||
|
]);
|
||||||
|
test_interpolation({
|
||||||
|
property: 'column-rule-color',
|
||||||
|
from: neutralKeyframe,
|
||||||
|
to: 'repeat(2, red black)',
|
||||||
|
}, [
|
||||||
|
{ at: -0.3, expect: 'repeat(2, black red)' },
|
||||||
|
{ at: 0, expect: 'repeat(2, black red)' },
|
||||||
|
{ at: 0.3, expect: 'repeat(2, rgb(77, 0, 0) rgb(179, 0, 0))' },
|
||||||
|
{ at: 0.6, expect: 'repeat(2, rgb(153, 0, 0) rgb(102, 0, 0))' },
|
||||||
|
{ at: 1, expect: 'repeat(2, red black)' },
|
||||||
|
{ at: 1.5, expect: 'repeat(2, red black)' },
|
||||||
|
]);
|
||||||
|
test_interpolation({
|
||||||
|
property: 'column-rule-color',
|
||||||
|
from: 'repeat(auto, black black)',
|
||||||
|
to: 'repeat(auto, blue red)',
|
||||||
|
}, [
|
||||||
|
{ at: -0.3, expect: 'repeat(auto, black black)' },
|
||||||
|
{ at: 0, expect: 'repeat(auto, black black)' },
|
||||||
|
{ at: 0.3, expect: 'repeat(auto, rgb(0, 0, 77) rgb(77, 0, 0))' },
|
||||||
|
{ at: 0.6, expect: 'repeat(auto, rgb(0, 0, 153) rgb(153, 0, 0))' },
|
||||||
|
{ at: 1, expect: 'repeat(auto, rgb(0, 0, 255) rgb(255, 0, 0))' },
|
||||||
|
{ at: 1.5, expect: 'repeat(auto, rgb(0, 0, 255) rgb(255, 0, 0)' },
|
||||||
|
]);
|
||||||
|
|
||||||
|
// // Shouldn't interpolate, length of the list is different:
|
||||||
|
test_no_interpolation({
|
||||||
|
property: 'row-rule-color',
|
||||||
|
from: neutralKeyframe,
|
||||||
|
to: 'repeat(2, blue blue) white',
|
||||||
|
});
|
||||||
|
test_no_interpolation({
|
||||||
|
property: 'row-rule-color',
|
||||||
|
from: neutralKeyframe,
|
||||||
|
to: 'repeat(2, red red) repeat(2, blue blue)',
|
||||||
|
});
|
||||||
|
|
||||||
|
// // Shouldn't interpolate, repeaters are not compatible:
|
||||||
|
test_no_interpolation({
|
||||||
|
property: 'column-rule-color',
|
||||||
|
from: neutralKeyframe,
|
||||||
|
to: 'repeat(3, white white)',
|
||||||
|
});
|
||||||
|
test_no_interpolation({
|
||||||
|
property: 'column-rule-color',
|
||||||
|
from: neutralKeyframe,
|
||||||
|
to: 'repeat(2, yellow orange green)',
|
||||||
|
});
|
||||||
|
test_no_interpolation({
|
||||||
|
property: 'row-rule-color',
|
||||||
|
from: neutralKeyframe,
|
||||||
|
to: 'black repeat(3, red white) blue',
|
||||||
|
});
|
||||||
|
test_no_interpolation({
|
||||||
|
property: 'row-rule-color',
|
||||||
|
from: neutralKeyframe,
|
||||||
|
to: 'white repeat(2, blue blue blue) yellow',
|
||||||
|
});
|
||||||
|
test_no_interpolation({
|
||||||
|
property: 'column-rule-color',
|
||||||
|
from: 'repeat(auto, red black)',
|
||||||
|
to: 'repeat(3, black red)',
|
||||||
|
});
|
||||||
|
test_no_interpolation({
|
||||||
|
property: 'column-rule-color',
|
||||||
|
from: 'repeat(auto, black black)',
|
||||||
|
to: 'repeat(auto, red white yellow)',
|
||||||
|
});
|
||||||
|
|
||||||
|
// // Shouldn't interpolate, repeater and a color are not compatible:
|
||||||
|
test_no_interpolation({
|
||||||
|
property: 'column-rule-color',
|
||||||
|
from: neutralKeyframe,
|
||||||
|
to: 'white',
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
50
tests/wpt/tests/css/css-gaps/animation/rule-width-interpolation-conversion-001.html
vendored
Normal file
50
tests/wpt/tests/css/css-gaps/animation/rule-width-interpolation-conversion-001.html
vendored
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS gap width change computed value to non compatible value mid-animation</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-width">
|
||||||
|
<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/web-animations/testcommon.js"></script>
|
||||||
|
<style>
|
||||||
|
#target {
|
||||||
|
column-rule-width: 10px;
|
||||||
|
column-rule-style: solid;
|
||||||
|
animation: color-anim 2s linear paused;
|
||||||
|
}
|
||||||
|
@keyframes color-anim {
|
||||||
|
from { column-rule-width: 0px; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="target">Dynamic Gap-Width Test</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
promise_test(async () => {
|
||||||
|
const el = document.getElementById('target');
|
||||||
|
const anim = el.getAnimations()[0];
|
||||||
|
|
||||||
|
assert_equals(getComputedStyle(el).columnRuleWidth, '0px');
|
||||||
|
|
||||||
|
// Jump to 50% of the animation.
|
||||||
|
anim.currentTime = anim.effect.getComputedTiming().duration / 2;
|
||||||
|
|
||||||
|
const intermediate = getComputedStyle(el).columnRuleWidth;
|
||||||
|
assert_equals(
|
||||||
|
intermediate,
|
||||||
|
'5px' // The width at 50% of the animation.
|
||||||
|
);
|
||||||
|
|
||||||
|
el.style.columnRuleWidth = 'repeat(2, 10px)';
|
||||||
|
|
||||||
|
const snapped = getComputedStyle(el).columnRuleWidth;
|
||||||
|
assert_equals(
|
||||||
|
snapped,
|
||||||
|
'repeat(2, 10px)'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
50
tests/wpt/tests/css/css-gaps/animation/rule-width-interpolation-conversion-002.html
vendored
Normal file
50
tests/wpt/tests/css/css-gaps/animation/rule-width-interpolation-conversion-002.html
vendored
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS gap width change computed value to non compatible value mid-animation</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#column-row-rule-width">
|
||||||
|
<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/web-animations/testcommon.js"></script>
|
||||||
|
<style>
|
||||||
|
#target {
|
||||||
|
column-rule-width: 10px 10px;
|
||||||
|
column-rule-style: solid;
|
||||||
|
animation: color-anim 2s linear paused;
|
||||||
|
}
|
||||||
|
@keyframes color-anim {
|
||||||
|
from { column-rule-width: 0px; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="target">Dynamic Gap-Width Test</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
promise_test(async () => {
|
||||||
|
const el = document.getElementById('target');
|
||||||
|
const anim = el.getAnimations()[0];
|
||||||
|
|
||||||
|
assert_equals(getComputedStyle(el).columnRuleWidth, '0px');
|
||||||
|
|
||||||
|
// Jump to 50% of the animation.
|
||||||
|
anim.currentTime = anim.effect.getComputedTiming().duration / 2;
|
||||||
|
|
||||||
|
const snapped = getComputedStyle(el).columnRuleWidth;
|
||||||
|
assert_equals(
|
||||||
|
snapped,
|
||||||
|
'10px 10px'
|
||||||
|
);
|
||||||
|
|
||||||
|
el.style.columnRuleWidth = '10px';
|
||||||
|
const intermediate = getComputedStyle(el).columnRuleWidth;
|
||||||
|
assert_equals(
|
||||||
|
intermediate,
|
||||||
|
'5px'
|
||||||
|
);
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -21,7 +21,7 @@
|
||||||
column-rule-style: solid;
|
column-rule-style: solid;
|
||||||
column-rule-color: red;
|
column-rule-color: red;
|
||||||
column-rule-width: 2px;
|
column-rule-width: 2px;
|
||||||
gap-rule-paint-order: column-over-row;
|
gap-rule-overlap: column-over-row;
|
||||||
width: 170px;
|
width: 170px;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
row-rule-style: solid;
|
row-rule-style: solid;
|
||||||
row-rule-color: blue;
|
row-rule-color: blue;
|
||||||
row-rule-width: 10px;
|
row-rule-width: 10px;
|
||||||
gap-rule-paint-order: column-over-row;
|
gap-rule-overlap: column-over-row;
|
||||||
}
|
}
|
||||||
|
|
||||||
.items {
|
.items {
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
row-rule-style: solid;
|
row-rule-style: solid;
|
||||||
row-rule-color: blue;
|
row-rule-color: blue;
|
||||||
row-rule-width: 10px;
|
row-rule-width: 10px;
|
||||||
gap-rule-paint-order: column-over-row;
|
gap-rule-overlap: column-over-row;
|
||||||
}
|
}
|
||||||
|
|
||||||
.items {
|
.items {
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
row-rule-width: 5px;
|
row-rule-width: 5px;
|
||||||
column-rule-break: none;
|
column-rule-break: none;
|
||||||
row-rule-break: none;
|
row-rule-break: none;
|
||||||
gap-rule-paint-order: column-over-row;
|
gap-rule-overlap: column-over-row;
|
||||||
}
|
}
|
||||||
.grid-item {
|
.grid-item {
|
||||||
background-color: gray;
|
background-color: gray;
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
column-rule: skyblue solid 10px;
|
column-rule: skyblue solid 10px;
|
||||||
row-rule: cornflowerblue solid 10px;
|
row-rule: cornflowerblue solid 10px;
|
||||||
gap-rule-paint-order: row-over-column;
|
gap-rule-overlap: row-over-column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.subgrid {
|
.subgrid {
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
column-rule: green solid 10px;
|
column-rule: green solid 10px;
|
||||||
row-rule: blue solid 10px;
|
row-rule: blue solid 10px;
|
||||||
|
|
||||||
gap-rule-paint-order: column-over-row;
|
gap-rule-overlap: column-over-row;
|
||||||
}
|
}
|
||||||
|
|
||||||
.item {
|
.item {
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>CSS Gaps: gap-rule-paint-order getComputedStyle()</title>
|
<title>CSS Gaps: gap-rule-overlap getComputedStyle()</title>
|
||||||
<link rel="author" title="Javier Contreras Tenorio" href="mailto:javiercon@microsoft.com">
|
<link rel="author" title="Javier Contreras Tenorio" href="mailto:javiercon@microsoft.com">
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#paint-order">
|
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#paint-order">
|
||||||
<script src="/resources/testharness.js"></script>
|
<script src="/resources/testharness.js"></script>
|
||||||
|
@ -13,8 +13,8 @@
|
||||||
<body>
|
<body>
|
||||||
<div id="target"></div>
|
<div id="target"></div>
|
||||||
<script>
|
<script>
|
||||||
test_computed_value("gap-rule-paint-order", "row-over-column");
|
test_computed_value("gap-rule-overlap", "row-over-column");
|
||||||
test_computed_value("gap-rule-paint-order", "column-over-row");
|
test_computed_value("gap-rule-overlap", "column-over-row");
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -2,7 +2,7 @@
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>CSS Gaps: parsing gap-rule-paint-order with invalid values</title>
|
<title>CSS Gaps: parsing gap-rule-overlap with invalid values</title>
|
||||||
<link rel="author" title="Javier Contreras Tenorio" href="mailto:javiercon@microsoft.com">
|
<link rel="author" title="Javier Contreras Tenorio" href="mailto:javiercon@microsoft.com">
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#paint-order">
|
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#paint-order">
|
||||||
<script src="/resources/testharness.js"></script>
|
<script src="/resources/testharness.js"></script>
|
||||||
|
@ -12,11 +12,11 @@
|
||||||
<body>
|
<body>
|
||||||
<div id="target"></div>
|
<div id="target"></div>
|
||||||
<script>
|
<script>
|
||||||
test_invalid_value('gap-rule-paint-order', 'auto');
|
test_invalid_value('gap-rule-overlap', 'auto');
|
||||||
test_invalid_value('gap-rule-paint-order', 'true');
|
test_invalid_value('gap-rule-overlap', 'true');
|
||||||
test_invalid_value('gap-rule-paint-order', 'none');
|
test_invalid_value('gap-rule-overlap', 'none');
|
||||||
test_invalid_value('gap-rule-paint-order', '10px');
|
test_invalid_value('gap-rule-overlap', '10px');
|
||||||
test_invalid_value('gap-rule-paint-order', '10%');
|
test_invalid_value('gap-rule-overlap', '10%');
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -2,7 +2,7 @@
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>CSS Gaps: parsing gap-rule-paint-order valid values</title>
|
<title>CSS Gaps: parsing gap-rule-overlap valid values</title>
|
||||||
<link rel="author" title="Javier Contreras Tenorio" href="mailto:javiercon@microsoft.com">
|
<link rel="author" title="Javier Contreras Tenorio" href="mailto:javiercon@microsoft.com">
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#paint-order">
|
<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#paint-order">
|
||||||
<script src="/resources/testharness.js"></script>
|
<script src="/resources/testharness.js"></script>
|
||||||
|
@ -12,8 +12,8 @@
|
||||||
<body>
|
<body>
|
||||||
<div id="target"></div>
|
<div id="target"></div>
|
||||||
<script>
|
<script>
|
||||||
test_valid_value('gap-rule-paint-order', 'row-over-column');
|
test_valid_value('gap-rule-overlap', 'row-over-column');
|
||||||
test_valid_value('gap-rule-paint-order', 'column-over-row');
|
test_valid_value('gap-rule-overlap', 'column-over-row');
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -7,6 +7,7 @@
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>Reference: Masonry layout with `align-content` in masonry axis</title>
|
<title>Reference: Masonry layout with `align-content` in masonry axis</title>
|
||||||
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
|
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
|
||||||
|
<link rel="author" title="Kurt Catti-Schmidt" href="mailto:kschmi@microsoft.com">
|
||||||
<style>
|
<style>
|
||||||
html,body {
|
html,body {
|
||||||
color:black; background-color:white; font:15px/1 monospace; padding:0; margin:0;
|
color:black; background-color:white; font:15px/1 monospace; padding:0; margin:0;
|
||||||
|
@ -30,6 +31,11 @@ item {
|
||||||
}
|
}
|
||||||
|
|
||||||
.tall { padding-top:30px; grid-row:span 2; }
|
.tall { padding-top:30px; grid-row:span 2; }
|
||||||
|
|
||||||
|
.safe {
|
||||||
|
height: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -52,6 +58,15 @@ item {
|
||||||
<item style="grid-column:3/4">6</item>
|
<item style="grid-column:3/4">6</item>
|
||||||
</grid>
|
</grid>
|
||||||
|
|
||||||
|
<grid style="align-content:safe start" class="safe">
|
||||||
|
<item style="grid-column:1/2" class="tall">1</item>
|
||||||
|
<item style="grid-column:2/3">2</item>
|
||||||
|
<item style="grid-column:3/4">3</item>
|
||||||
|
<item style="grid-column:4/5">4</item>
|
||||||
|
<item style="grid-column:2/3">5</item>
|
||||||
|
<item style="grid-column:3/4">6</item>
|
||||||
|
</grid>
|
||||||
|
|
||||||
<grid style="align-content:end">
|
<grid style="align-content:end">
|
||||||
<item style="grid-column:1/2" class="tall">1</item>
|
<item style="grid-column:1/2" class="tall">1</item>
|
||||||
<item style="grid-column:2/3">2</item>
|
<item style="grid-column:2/3">2</item>
|
||||||
|
@ -70,6 +85,15 @@ item {
|
||||||
<item style="grid-column:3/4">6</item>
|
<item style="grid-column:3/4">6</item>
|
||||||
</grid>
|
</grid>
|
||||||
|
|
||||||
|
<grid style="align-content:safe end" class="safe">
|
||||||
|
<item style="grid-column:1/2" class="tall">1</item>
|
||||||
|
<item style="grid-column:2/3">2</item>
|
||||||
|
<item style="grid-column:3/4">3</item>
|
||||||
|
<item style="grid-column:4/5">4</item>
|
||||||
|
<item style="grid-column:2/3">5</item>
|
||||||
|
<item style="grid-column:3/4">6</item>
|
||||||
|
</grid>
|
||||||
|
|
||||||
<grid style="align-content:center">
|
<grid style="align-content:center">
|
||||||
<item style="grid-column:1/2" class="tall">1</item>
|
<item style="grid-column:1/2" class="tall">1</item>
|
||||||
<item style="grid-column:2/3">2</item>
|
<item style="grid-column:2/3">2</item>
|
||||||
|
@ -88,6 +112,15 @@ item {
|
||||||
<item style="grid-column:3/4">6</item>
|
<item style="grid-column:3/4">6</item>
|
||||||
</grid>
|
</grid>
|
||||||
|
|
||||||
|
<grid style="align-content:safe center" class="safe">
|
||||||
|
<item style="grid-column:1/2" class="tall">1</item>
|
||||||
|
<item style="grid-column:2/3">2</item>
|
||||||
|
<item style="grid-column:3/4">3</item>
|
||||||
|
<item style="grid-column:4/5">4</item>
|
||||||
|
<item style="grid-column:2/3">5</item>
|
||||||
|
<item style="grid-column:3/4">6</item>
|
||||||
|
</grid>
|
||||||
|
|
||||||
<grid style="align-content:stretch">
|
<grid style="align-content:stretch">
|
||||||
<item style="grid-column:1/2" class="tall">1</item>
|
<item style="grid-column:1/2" class="tall">1</item>
|
||||||
<item style="grid-column:2/3">2</item>
|
<item style="grid-column:2/3">2</item>
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
in the masonry axis of a masonry grid container
|
in the masonry axis of a masonry grid container
|
||||||
and the grid container's baseline is also shifted accordingly.">
|
and the grid container's baseline is also shifted accordingly.">
|
||||||
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
|
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
|
||||||
|
<link rel="author" title="Kurt Catti-Schmidt" href="mailto:kschmi@microsoft.com">
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-grid-3/#alignment">
|
<link rel="help" href="https://drafts.csswg.org/css-grid-3/#alignment">
|
||||||
<link rel="match" href="masonry-align-content-001-ref.html">
|
<link rel="match" href="masonry-align-content-001-ref.html">
|
||||||
<style>
|
<style>
|
||||||
|
@ -35,6 +36,9 @@ item {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.safe {
|
||||||
|
height: 10px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -57,6 +61,15 @@ item {
|
||||||
<item>6</item>
|
<item>6</item>
|
||||||
</grid>
|
</grid>
|
||||||
|
|
||||||
|
<grid style="align-content:safe start" class="safe">
|
||||||
|
<item style="padding-top:30px">1</item>
|
||||||
|
<item>2</item>
|
||||||
|
<item>3</item>
|
||||||
|
<item>4</item>
|
||||||
|
<item>5</item>
|
||||||
|
<item>6</item>
|
||||||
|
</grid>
|
||||||
|
|
||||||
<grid style="align-content:end">
|
<grid style="align-content:end">
|
||||||
<item style="padding-top:30px">1</item>
|
<item style="padding-top:30px">1</item>
|
||||||
<item>2</item>
|
<item>2</item>
|
||||||
|
@ -75,6 +88,15 @@ item {
|
||||||
<item>6</item>
|
<item>6</item>
|
||||||
</grid>
|
</grid>
|
||||||
|
|
||||||
|
<grid style="align-content:safe end" class="safe">
|
||||||
|
<item style="padding-top:30px">1</item>
|
||||||
|
<item>2</item>
|
||||||
|
<item>3</item>
|
||||||
|
<item>4</item>
|
||||||
|
<item>5</item>
|
||||||
|
<item>6</item>
|
||||||
|
</grid>
|
||||||
|
|
||||||
<grid style="align-content:center">
|
<grid style="align-content:center">
|
||||||
<item style="padding-top:30px">1</item>
|
<item style="padding-top:30px">1</item>
|
||||||
<item>2</item>
|
<item>2</item>
|
||||||
|
@ -93,6 +115,15 @@ item {
|
||||||
<item>6</item>
|
<item>6</item>
|
||||||
</grid>
|
</grid>
|
||||||
|
|
||||||
|
<grid style="align-content:safe center" class="safe">
|
||||||
|
<item style="padding-top:30px">1</item>
|
||||||
|
<item>2</item>
|
||||||
|
<item>3</item>
|
||||||
|
<item>4</item>
|
||||||
|
<item>5</item>
|
||||||
|
<item>6</item>
|
||||||
|
</grid>
|
||||||
|
|
||||||
<grid style="align-content:stretch">
|
<grid style="align-content:stretch">
|
||||||
<item style="padding-top:30px">1</item>
|
<item style="padding-top:30px">1</item>
|
||||||
<item>2</item>
|
<item>2</item>
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>Reference: Masonry layout with `align-content` in masonry axis</title>
|
<title>Reference: Masonry layout with `align-content` in masonry axis</title>
|
||||||
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
|
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
|
||||||
|
<link rel="author" title="Kurt Catti-Schmidt" href="mailto:kschmi@microsoft.com">
|
||||||
<style>
|
<style>
|
||||||
html,body {
|
html,body {
|
||||||
color:black; background-color:white; font:15px/1 monospace; padding:0; margin:0;
|
color:black; background-color:white; font:15px/1 monospace; padding:0; margin:0;
|
||||||
|
@ -31,6 +32,11 @@ item {
|
||||||
}
|
}
|
||||||
|
|
||||||
.tall { padding-right:30px; grid-row:span 2; }
|
.tall { padding-right:30px; grid-row:span 2; }
|
||||||
|
|
||||||
|
.safe {
|
||||||
|
width: 10px;
|
||||||
|
margin-right: 50px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -53,6 +59,15 @@ item {
|
||||||
<item style="grid-column:3/4">6</item>
|
<item style="grid-column:3/4">6</item>
|
||||||
</grid>
|
</grid>
|
||||||
|
|
||||||
|
<grid style="align-content:safe start" class="safe">
|
||||||
|
<item style="grid-column:1/2" class="tall">1</item>
|
||||||
|
<item style="grid-column:2/3">2</item>
|
||||||
|
<item style="grid-column:3/4">3</item>
|
||||||
|
<item style="grid-column:4/5">4</item>
|
||||||
|
<item style="grid-column:2/3">5</item>
|
||||||
|
<item style="grid-column:3/4">6</item>
|
||||||
|
</grid>
|
||||||
|
|
||||||
<grid style="align-content:end">
|
<grid style="align-content:end">
|
||||||
<item style="grid-column:1/2" class="tall">1</item>
|
<item style="grid-column:1/2" class="tall">1</item>
|
||||||
<item style="grid-column:2/3">2</item>
|
<item style="grid-column:2/3">2</item>
|
||||||
|
@ -71,6 +86,15 @@ item {
|
||||||
<item style="grid-column:3/4">6</item>
|
<item style="grid-column:3/4">6</item>
|
||||||
</grid>
|
</grid>
|
||||||
|
|
||||||
|
<grid style="align-content:safe end" class="safe">
|
||||||
|
<item style="grid-column:1/2" class="tall">1</item>
|
||||||
|
<item style="grid-column:2/3">2</item>
|
||||||
|
<item style="grid-column:3/4">3</item>
|
||||||
|
<item style="grid-column:4/5">4</item>
|
||||||
|
<item style="grid-column:2/3">5</item>
|
||||||
|
<item style="grid-column:3/4">6</item>
|
||||||
|
</grid>
|
||||||
|
|
||||||
<grid style="align-content:center">
|
<grid style="align-content:center">
|
||||||
<item style="grid-column:1/2" class="tall">1</item>
|
<item style="grid-column:1/2" class="tall">1</item>
|
||||||
<item style="grid-column:2/3">2</item>
|
<item style="grid-column:2/3">2</item>
|
||||||
|
@ -89,6 +113,15 @@ item {
|
||||||
<item style="grid-column:3/4">6</item>
|
<item style="grid-column:3/4">6</item>
|
||||||
</grid>
|
</grid>
|
||||||
|
|
||||||
|
<grid style="align-content:safe center" class="safe">
|
||||||
|
<item style="grid-column:1/2" class="tall">1</item>
|
||||||
|
<item style="grid-column:2/3">2</item>
|
||||||
|
<item style="grid-column:3/4">3</item>
|
||||||
|
<item style="grid-column:4/5">4</item>
|
||||||
|
<item style="grid-column:2/3">5</item>
|
||||||
|
<item style="grid-column:3/4">6</item>
|
||||||
|
</grid>
|
||||||
|
|
||||||
<grid style="align-content:stretch">
|
<grid style="align-content:stretch">
|
||||||
<item style="grid-column:1/2" class="tall">1</item>
|
<item style="grid-column:1/2" class="tall">1</item>
|
||||||
<item style="grid-column:2/3">2</item>
|
<item style="grid-column:2/3">2</item>
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
content="Test passes if align-content shifts content
|
content="Test passes if align-content shifts content
|
||||||
in the masonry axis of a vertical writing-mode masonry grid container.">
|
in the masonry axis of a vertical writing-mode masonry grid container.">
|
||||||
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
|
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
|
||||||
|
<link rel="author" title="Kurt Catti-Schmidt" href="mailto:kschmi@microsoft.com">
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-grid-3/#alignment">
|
<link rel="help" href="https://drafts.csswg.org/css-grid-3/#alignment">
|
||||||
<link rel="match" href="masonry-align-content-002-ref.html">
|
<link rel="match" href="masonry-align-content-002-ref.html">
|
||||||
<style>
|
<style>
|
||||||
|
@ -35,6 +36,11 @@ item {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.safe {
|
||||||
|
width: 10px;
|
||||||
|
margin-right: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -57,6 +63,15 @@ item {
|
||||||
<item>6</item>
|
<item>6</item>
|
||||||
</grid>
|
</grid>
|
||||||
|
|
||||||
|
<grid style="align-content:safe start" class="safe">
|
||||||
|
<item style="padding-right:30px">1</item>
|
||||||
|
<item>2</item>
|
||||||
|
<item>3</item>
|
||||||
|
<item>4</item>
|
||||||
|
<item>5</item>
|
||||||
|
<item>6</item>
|
||||||
|
</grid>
|
||||||
|
|
||||||
<grid style="align-content:end">
|
<grid style="align-content:end">
|
||||||
<item style="padding-right:30px">1</item>
|
<item style="padding-right:30px">1</item>
|
||||||
<item>2</item>
|
<item>2</item>
|
||||||
|
@ -75,6 +90,15 @@ item {
|
||||||
<item>6</item>
|
<item>6</item>
|
||||||
</grid>
|
</grid>
|
||||||
|
|
||||||
|
<grid style="align-content:safe end" class="safe">
|
||||||
|
<item style="padding-right:30px">1</item>
|
||||||
|
<item>2</item>
|
||||||
|
<item>3</item>
|
||||||
|
<item>4</item>
|
||||||
|
<item>5</item>
|
||||||
|
<item>6</item>
|
||||||
|
</grid>
|
||||||
|
|
||||||
<grid style="align-content:center">
|
<grid style="align-content:center">
|
||||||
<item style="padding-right:30px">1</item>
|
<item style="padding-right:30px">1</item>
|
||||||
<item>2</item>
|
<item>2</item>
|
||||||
|
@ -93,6 +117,15 @@ item {
|
||||||
<item>6</item>
|
<item>6</item>
|
||||||
</grid>
|
</grid>
|
||||||
|
|
||||||
|
<grid style="align-content:safe center" class="safe">
|
||||||
|
<item style="padding-right:30px">1</item>
|
||||||
|
<item>2</item>
|
||||||
|
<item>3</item>
|
||||||
|
<item>4</item>
|
||||||
|
<item>5</item>
|
||||||
|
<item>6</item>
|
||||||
|
</grid>
|
||||||
|
|
||||||
<grid style="align-content:stretch">
|
<grid style="align-content:stretch">
|
||||||
<item style="padding-right:30px">1</item>
|
<item style="padding-right:30px">1</item>
|
||||||
<item>2</item>
|
<item>2</item>
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue