Auto merge of #29321 - servo:wpt_update_02-02-2023, r=servo-wpt-sync

Sync WPT with upstream (02-02-2023)

Automated downstream sync of changes from upstream as of 02-02-2023
[no-wpt-sync]
r? @servo-wpt-sync
This commit is contained in:
bors-servo 2023-02-02 02:55:54 +01:00 committed by GitHub
commit eb5c79243f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
233 changed files with 5065 additions and 1252 deletions

File diff suppressed because it is too large Load diff

View file

@ -1,3 +0,0 @@
[hit-test-floats-003.html]
[Miss float below something else]
expected: FAIL

View file

@ -0,0 +1,3 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -8,5 +8,8 @@
[[data-expected-height\] 3]
expected: FAIL
[[data-expected-height\] 4]
[[data-expected-height\] 1]
expected: FAIL
[[data-expected-height\] 2]
expected: FAIL

View file

@ -1,3 +1,6 @@
[block-in-inline-hittest-002.html]
[elementsFromPoint]
expected: FAIL
[elementFromPoint]
expected: FAIL

View file

@ -1,6 +1,3 @@
[block-in-inline-hittest-relpos-zindex.html]
[position: relative; z-index: -1;]
expected: FAIL
[block-in-inline-hittest-relpos-zindex]
expected: FAIL

View file

@ -0,0 +1,3 @@
[line-height.html]
[line-height responds to inherited changes]
expected: FAIL

View file

@ -1,2 +0,0 @@
[opacity-animation-ending-correctly-001.html]
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[color-invalid-color-function.html]
expected: ERROR

View file

@ -155,9 +155,6 @@
[Matching font-weight: '400' should prefer '400' over '450 460']
expected: FAIL
[Matching font-style: 'italic' should prefer 'normal' over 'oblique 0deg']
expected: FAIL
[Matching font-style: 'oblique -20deg' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg']
expected: FAIL
@ -319,3 +316,18 @@
[Matching font-style: 'oblique -20deg' should prefer 'oblique 0deg' over 'oblique 30deg 60deg']
expected: FAIL
[Matching font-style: 'oblique 20deg' should prefer 'oblique 0deg' over 'oblique -50deg -20deg']
expected: FAIL
[Matching font-style: 'oblique 10deg' should prefer 'oblique 15deg 20deg' over 'oblique 30deg 60deg']
expected: FAIL
[Matching font-style: 'oblique 10deg' should prefer 'oblique 40deg 50deg' over 'italic']
expected: FAIL
[Matching font-style: 'oblique -21deg' should prefer 'oblique -60deg -40deg' over 'oblique -10deg']
expected: FAIL
[Matching font-style: 'oblique -21deg' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg']
expected: FAIL

View file

@ -0,0 +1,2 @@
[trailing-other-space-separators-break-spaces-005.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[trailing-other-space-separators-break-spaces-007.html]
expected: FAIL

View file

@ -1,3 +1,6 @@
[transform-scale-hittest.html]
[Hit test intersecting scaled box]
expected: FAIL
[Hit test within unscaled box]
expected: FAIL

View file

@ -53,152 +53,152 @@
[background-position length(px) / events]
expected: FAIL
[color color(rgba) / values]
[padding-bottom length(ex) / values]
expected: FAIL
[text-shadow shadow(shadow) / values]
[padding-bottom length(mm) / values]
expected: FAIL
[font-size length(pt) / values]
[padding-bottom length(cm) / values]
expected: FAIL
[font-size length(pc) / values]
[padding-bottom length(in) / values]
expected: FAIL
[font-size length(px) / values]
[padding-left length(pt) / values]
expected: FAIL
[font-size length(em) / values]
[padding-left length(pc) / values]
expected: FAIL
[font-size length(ex) / values]
[padding-left length(px) / values]
expected: FAIL
[font-size length(mm) / values]
[padding-left length(em) / values]
expected: FAIL
[font-size length(cm) / values]
[padding-left length(ex) / values]
expected: FAIL
[font-size length(in) / values]
[padding-left length(mm) / values]
expected: FAIL
[font-size percentage(%) / values]
[padding-left length(cm) / values]
expected: FAIL
[font-weight font-weight(keyword) / values]
[padding-left length(in) / values]
expected: FAIL
[font-weight font-weight(numeric) / values]
[padding-right length(pt) / values]
expected: FAIL
[line-height number(integer) / values]
[padding-right length(pc) / values]
expected: FAIL
[line-height number(decimal) / values]
[padding-right length(px) / values]
expected: FAIL
[line-height length(pt) / values]
[padding-right length(em) / values]
expected: FAIL
[line-height length(pc) / values]
[padding-right length(ex) / values]
expected: FAIL
[line-height length(px) / values]
[padding-right length(mm) / values]
expected: FAIL
[line-height length(em) / values]
[padding-right length(cm) / values]
expected: FAIL
[line-height length(ex) / values]
[padding-right length(in) / values]
expected: FAIL
[line-height length(mm) / values]
[padding-top length(pt) / values]
expected: FAIL
[line-height length(cm) / values]
[padding-top length(pc) / values]
expected: FAIL
[line-height length(in) / values]
[padding-top length(px) / values]
expected: FAIL
[line-height percentage(%) / values]
[padding-top length(em) / values]
expected: FAIL
[letter-spacing length(pt) / values]
[padding-top length(ex) / values]
expected: FAIL
[letter-spacing length(pc) / values]
[padding-top length(mm) / values]
expected: FAIL
[letter-spacing length(px) / values]
[padding-top length(cm) / values]
expected: FAIL
[letter-spacing length(em) / values]
[padding-top length(in) / values]
expected: FAIL
[letter-spacing length(ex) / values]
[margin-bottom length(pt) / values]
expected: FAIL
[letter-spacing length(mm) / values]
[margin-bottom length(pc) / values]
expected: FAIL
[letter-spacing length(cm) / values]
[margin-bottom length(px) / values]
expected: FAIL
[letter-spacing length(in) / values]
[margin-bottom length(em) / values]
expected: FAIL
[word-spacing length(pt) / values]
[margin-bottom length(ex) / values]
expected: FAIL
[word-spacing length(pc) / values]
[margin-bottom length(mm) / values]
expected: FAIL
[word-spacing length(px) / values]
[margin-bottom length(cm) / values]
expected: FAIL
[word-spacing length(em) / values]
[margin-bottom length(in) / values]
expected: FAIL
[word-spacing length(ex) / values]
[margin-left length(pt) / values]
expected: FAIL
[word-spacing length(mm) / values]
[margin-left length(pc) / values]
expected: FAIL
[word-spacing length(cm) / values]
[margin-left length(px) / values]
expected: FAIL
[word-spacing length(in) / values]
[margin-left length(em) / values]
expected: FAIL
[word-spacing percentage(%) / values]
[margin-left length(ex) / values]
expected: FAIL
[text-indent length(pt) / values]
[margin-left length(mm) / values]
expected: FAIL
[text-indent length(pc) / values]
[margin-left length(cm) / values]
expected: FAIL
[text-indent length(px) / values]
[margin-left length(in) / values]
expected: FAIL
[text-indent length(em) / values]
[margin-right length(pt) / values]
expected: FAIL
[text-indent length(ex) / values]
[margin-right length(pc) / values]
expected: FAIL
[text-indent length(mm) / values]
[margin-right length(px) / values]
expected: FAIL
[text-indent length(cm) / values]
[margin-right length(em) / values]
expected: FAIL
[text-indent length(in) / values]
[margin-right length(ex) / values]
expected: FAIL
[text-indent percentage(%) / values]
[margin-right length(mm) / values]
expected: FAIL

View file

@ -490,3 +490,33 @@
[object-view-box object-view-box(xywh) / events]
expected: FAIL
[border-top-left-radius border-radius(px) / values]
expected: FAIL
[border-top-left-radius border-radius(px-px) / values]
expected: FAIL
[border-top-right-radius border-radius(px) / values]
expected: FAIL
[border-top-right-radius border-radius(px-px) / values]
expected: FAIL
[border-bottom-left-radius border-radius(px) / values]
expected: FAIL
[border-bottom-left-radius border-radius(px-px) / values]
expected: FAIL
[border-bottom-right-radius border-radius(px) / values]
expected: FAIL
[border-bottom-right-radius border-radius(px-px) / values]
expected: FAIL
[box-shadow box-shadow(shadow) / values]
expected: FAIL
[font-stretch font-stretch(keyword) / values]
expected: FAIL

View file

@ -505,3 +505,153 @@
[text-shadow shadow(shadow) / events]
expected: FAIL
[max-height length(ex) / events]
expected: FAIL
[max-height length(mm) / events]
expected: FAIL
[max-height length(cm) / events]
expected: FAIL
[max-height length(in) / events]
expected: FAIL
[max-height percentage(%) / events]
expected: FAIL
[max-width length(pt) / events]
expected: FAIL
[max-width length(pc) / events]
expected: FAIL
[max-width length(px) / events]
expected: FAIL
[max-width length(em) / events]
expected: FAIL
[max-width length(ex) / events]
expected: FAIL
[max-width length(mm) / events]
expected: FAIL
[max-width length(cm) / events]
expected: FAIL
[max-width length(in) / events]
expected: FAIL
[max-width percentage(%) / events]
expected: FAIL
[top length(pt) / events]
expected: FAIL
[top length(pc) / events]
expected: FAIL
[top length(px) / events]
expected: FAIL
[top length(em) / events]
expected: FAIL
[top length(ex) / events]
expected: FAIL
[top length(mm) / events]
expected: FAIL
[top length(cm) / events]
expected: FAIL
[top length(in) / events]
expected: FAIL
[top percentage(%) / events]
expected: FAIL
[right length(pt) / events]
expected: FAIL
[right length(pc) / events]
expected: FAIL
[right length(px) / events]
expected: FAIL
[right length(em) / events]
expected: FAIL
[right length(ex) / events]
expected: FAIL
[right length(mm) / events]
expected: FAIL
[right length(cm) / events]
expected: FAIL
[right length(in) / events]
expected: FAIL
[right percentage(%) / events]
expected: FAIL
[bottom length(pt) / events]
expected: FAIL
[bottom length(pc) / events]
expected: FAIL
[bottom length(px) / events]
expected: FAIL
[bottom length(em) / events]
expected: FAIL
[bottom length(ex) / events]
expected: FAIL
[bottom length(mm) / events]
expected: FAIL
[bottom length(cm) / events]
expected: FAIL
[bottom length(in) / events]
expected: FAIL
[bottom percentage(%) / events]
expected: FAIL
[left length(pt) / events]
expected: FAIL
[left length(pc) / events]
expected: FAIL
[left length(px) / events]
expected: FAIL
[left length(em) / events]
expected: FAIL
[left length(ex) / events]
expected: FAIL
[left length(mm) / events]
expected: FAIL
[left length(cm) / events]
expected: FAIL
[left length(in) / events]
expected: FAIL
[left percentage(%) / events]
expected: FAIL

View file

@ -52,3 +52,162 @@
[background-position length(px) / events]
expected: FAIL
[background-color color(rgba) / values]
expected: FAIL
[border-top-width length(pt) / values]
expected: FAIL
[border-top-width length(pc) / values]
expected: FAIL
[border-top-width length(px) / values]
expected: FAIL
[border-top-width length(em) / values]
expected: FAIL
[border-top-width length(ex) / values]
expected: FAIL
[border-top-width length(mm) / values]
expected: FAIL
[border-top-width length(cm) / values]
expected: FAIL
[border-top-width length(in) / values]
expected: FAIL
[border-right-width length(pt) / values]
expected: FAIL
[border-right-width length(pc) / values]
expected: FAIL
[border-right-width length(px) / values]
expected: FAIL
[border-right-width length(em) / values]
expected: FAIL
[border-right-width length(ex) / values]
expected: FAIL
[border-right-width length(mm) / values]
expected: FAIL
[border-right-width length(cm) / values]
expected: FAIL
[border-right-width length(in) / values]
expected: FAIL
[border-bottom-width length(pt) / values]
expected: FAIL
[border-bottom-width length(pc) / values]
expected: FAIL
[border-bottom-width length(px) / values]
expected: FAIL
[border-bottom-width length(em) / values]
expected: FAIL
[border-bottom-width length(ex) / values]
expected: FAIL
[border-bottom-width length(mm) / values]
expected: FAIL
[border-bottom-width length(cm) / values]
expected: FAIL
[border-bottom-width length(in) / values]
expected: FAIL
[border-left-width length(pt) / values]
expected: FAIL
[border-left-width length(pc) / values]
expected: FAIL
[border-left-width length(px) / values]
expected: FAIL
[border-left-width length(em) / values]
expected: FAIL
[border-left-width length(ex) / values]
expected: FAIL
[border-left-width length(mm) / values]
expected: FAIL
[border-left-width length(cm) / values]
expected: FAIL
[border-left-width length(in) / values]
expected: FAIL
[border-top-color color(rgba) / values]
expected: FAIL
[border-right-color color(rgba) / values]
expected: FAIL
[border-bottom-color color(rgba) / values]
expected: FAIL
[border-left-color color(rgba) / values]
expected: FAIL
[padding-bottom length(pt) / values]
expected: FAIL
[padding-bottom length(pc) / values]
expected: FAIL
[padding-bottom length(px) / values]
expected: FAIL
[padding-bottom length(em) / values]
expected: FAIL
[padding-left length(pt) / values]
expected: FAIL
[padding-left length(px) / values]
expected: FAIL
[padding-right length(pt) / values]
expected: FAIL
[padding-right length(px) / values]
expected: FAIL
[padding-top length(pt) / values]
expected: FAIL
[padding-top length(px) / values]
expected: FAIL
[margin-bottom length(pt) / values]
expected: FAIL
[margin-bottom length(px) / values]
expected: FAIL
[margin-left length(pt) / values]
expected: FAIL
[margin-left length(px) / values]
expected: FAIL
[margin-right length(pt) / values]
expected: FAIL
[margin-right length(px) / values]
expected: FAIL

View file

@ -4,3 +4,90 @@
[background-position length-em(em) / values]
expected: FAIL
[border-top-width length-em(em) / events]
expected: FAIL
[border-right-width length-em(em) / events]
expected: FAIL
[border-bottom-width length-em(em) / events]
expected: FAIL
[border-left-width length-em(em) / events]
expected: FAIL
[padding-bottom length-em(em) / events]
expected: FAIL
[padding-left length-em(em) / events]
expected: FAIL
[padding-right length-em(em) / events]
expected: FAIL
[padding-top length-em(em) / events]
expected: FAIL
[margin-bottom length-em(em) / events]
expected: FAIL
[margin-left length-em(em) / events]
expected: FAIL
[margin-right length-em(em) / events]
expected: FAIL
[margin-top length-em(em) / events]
expected: FAIL
[height length-em(em) / events]
expected: FAIL
[width length-em(em) / events]
expected: FAIL
[min-height length-em(em) / events]
expected: FAIL
[min-width length-em(em) / events]
expected: FAIL
[max-height length-em(em) / events]
expected: FAIL
[max-width length-em(em) / events]
expected: FAIL
[top length-em(em) / events]
expected: FAIL
[right length-em(em) / events]
expected: FAIL
[bottom length-em(em) / events]
expected: FAIL
[left length-em(em) / events]
expected: FAIL
[line-height length-em(em) / events]
expected: FAIL
[letter-spacing length-em(em) / events]
expected: FAIL
[word-spacing length-em(em) / events]
expected: FAIL
[text-indent length-em(em) / events]
expected: FAIL
[outline-offset length-em(em) / events]
expected: FAIL
[outline-width length-em(em) / events]
expected: FAIL
[vertical-align length-em(em) / events]
expected: FAIL

View file

@ -1,3 +0,0 @@
[MediaQueryListEvent.html]
[argument of onchange]
expected: FAIL

View file

@ -1,3 +0,0 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -1,3 +0,0 @@
[elementFromPoint-dynamic-anon-box.html]
[Link should be clickable after hiding a scrollbox with an anonymous table inside]
expected: FAIL

View file

@ -1,3 +0,0 @@
[elementFromPoint-ellipsis-in-inline-box.html]
[elementFromPoint-ellipsis-in-inline-box]
expected: FAIL

View file

@ -1,3 +0,0 @@
[elementFromPoint-float-in-table.html]
[float-in-div]
expected: FAIL

View file

@ -13,9 +13,3 @@
[<li>Outside 3</li>]
expected: FAIL
[<li>Image Inside 2</li>]
expected: FAIL
[<li>Image Inside 1</li>]
expected: FAIL

View file

@ -17,3 +17,6 @@
[test some point of the element: bottom right corner]
expected: FAIL
[test the top of layer]
expected: FAIL

View file

@ -1,3 +0,0 @@
[elementsFromPoint-invalid-cases.html]
[The root element is the last element returned for otherwise empty queries within the viewport]
expected: FAIL

View file

@ -77,5 +77,5 @@
[Input: "Content-Length: ". Expected: 42.]
expected: FAIL
[Input: "Content-Length: 42,42". Expected: 42.]
[Input: "Content-Length: 30". Expected: 30.]
expected: FAIL

View file

@ -52,6 +52,3 @@
[combined text/javascript ]
expected: FAIL
[separate text/javascript x/x]
expected: FAIL

View file

@ -146,3 +146,6 @@
[list-style-image sec-fetch-site - HTTPS downgrade-upgrade]
expected: FAIL
[border-image sec-fetch-site - HTTPS downgrade (header not sent)]
expected: FAIL

View file

@ -7,6 +7,3 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
[X-Content-Type-Options%3A%20%2Cnosniff]
expected: FAIL

View file

@ -10,6 +10,3 @@
[load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank']
expected: FAIL
[load & pageshow events do not fire on contentWindow of <iframe> element created with src='']
expected: FAIL

View file

@ -10,6 +10,3 @@
[load event does not fire on window.open('about:blank?foo')]
expected: FAIL
[load event does not fire on window.open('about:blank')]
expected: FAIL

View file

@ -0,0 +1,4 @@
[javascript-url-load-as-html.xhtml]
expected: TIMEOUT
[javascript: URL navigation to a string must create a HTML document using the correct properties]
expected: TIMEOUT

View file

@ -13,3 +13,6 @@
[0080 00FF 0100 set in href="" targeting a frame and clicked]
expected: FAIL
[D83D DE0D set in href="" targeting a frame and clicked]
expected: FAIL

View file

@ -1,3 +1,6 @@
[navigate-to-unparseable-url.html]
[location.href setter throws a SyntaxError DOMException for unparseable URLs]
expected: FAIL
[<a> tag navigate fails for unparseable URLs]
expected: FAIL

View file

@ -0,0 +1,3 @@
[navigation-unload-cross-origin.sub.window.html]
[Cross-origin navigation started from unload handler must be ignored]
expected: FAIL

View file

@ -1,3 +0,0 @@
[navigation-unload-same-origin.window.html]
[Same-origin navigation started from unload handler must be ignored]
expected: FAIL

View file

@ -0,0 +1,4 @@
[pageload-image-in-popup.html]
expected: TIMEOUT
[The document for a standalone media file should have one child in the body.]
expected: NOTRUN

View file

@ -0,0 +1,3 @@
[traverse_the_history_1.html]
[Multiple history traversals from the same task]
expected: FAIL

View file

@ -0,0 +1,3 @@
[creating_browsing_context_test_01.html]
[first argument: absolute url]
expected: FAIL

View file

@ -1,2 +1,2 @@
[canvas.2d.disconnected.html]
expected: TIMEOUT
expected: FAIL

View file

@ -1,3 +1,4 @@
[iframe_sandbox_popups_escaping-2.html]
expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: FAIL
expected: TIMEOUT

View file

@ -1,4 +1,5 @@
[iframe_sandbox_popups_nonescaping-1.html]
type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: FAIL
expected: NOTRUN

View file

@ -1,5 +1,4 @@
[iframe_sandbox_popups_nonescaping-2.html]
type: testharness
expected: CRASH
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: FAIL

View file

@ -1,4 +1,3 @@
[iframe_sandbox_popups_nonescaping-3.html]
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN
expected: FAIL

View file

@ -122,9 +122,6 @@
[multipart/form-data: single quote in value (normal form)]
expected: FAIL
[multipart/form-data: single quote in value (formdata event)]
expected: FAIL
[multipart/form-data: single quote in filename (normal form)]
expected: FAIL

View file

@ -175,3 +175,6 @@
[text/plain: 0x00 in name (formdata event)]
expected: FAIL
[text/plain: Basic File test (formdata event)]
expected: FAIL

View file

@ -0,0 +1,3 @@
[pattern_attribute.html]
[pattern attribute support on input element]
expected: FAIL

View file

@ -0,0 +1,2 @@
[selectmenu-marker-part.tentative.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[selectmenu-marker-slot.tentative.html]
expected: FAIL

View file

@ -0,0 +1,15 @@
[child-sequential-focus.html]
[dialog element with autofocus should get initial focus.]
expected: FAIL
[Only keyboard-focusable elements should get dialog initial focus.]
expected: FAIL
[Autofocus takes precedence over keyboard-focusable requirement.]
expected: FAIL
[Only keyboard-focusable elements should get dialog initial focus including in subtrees.]
expected: FAIL
[Only keyboard-focusable elements should get dialog initial focus including in nested buttons.]
expected: FAIL

View file

@ -1,5 +1,6 @@
[htmlanchorelement_noopener.html]
type: testharness
expected: TIMEOUT
[Check that targeting of rel=noopener with a given name ignores an existing window with that name]
expected: NOTRUN
@ -13,4 +14,4 @@
expected: FAIL
[Check that rel=noopener with target=_self does a normal load]
expected: FAIL
expected: NOTRUN

View file

@ -301,3 +301,27 @@
[PopoverToggleEvent interface: attribute newState]
expected: FAIL
[ToggleEvent interface: existence and properties of interface object]
expected: FAIL
[ToggleEvent interface object length]
expected: FAIL
[ToggleEvent interface object name]
expected: FAIL
[ToggleEvent interface: existence and properties of interface prototype object]
expected: FAIL
[ToggleEvent interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[ToggleEvent interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[ToggleEvent interface: attribute oldState]
expected: FAIL
[ToggleEvent interface: attribute newState]
expected: FAIL

View file

@ -40,3 +40,6 @@
[The "beforetoggle" event is not fired for element removal]
expected: FAIL
[The "toggle" event is coalesced]
expected: FAIL

View file

@ -133,3 +133,63 @@
[PopoverToggleEventInit properties set value 4]
expected: FAIL
[the event is an instance of ToggleEvent]
expected: FAIL
[oldState has default value of empty string]
expected: FAIL
[oldState is readonly]
expected: FAIL
[ToggleEventInit argument is null]
expected: FAIL
[ToggleEventInit argument is undefined]
expected: FAIL
[ToggleEventInit argument is empty dictionary]
expected: FAIL
[oldState set to 'sample']
expected: FAIL
[oldState set to undefined]
expected: FAIL
[oldState set to null]
expected: FAIL
[oldState set to false]
expected: FAIL
[oldState set to true]
expected: FAIL
[oldState set to a number]
expected: FAIL
[oldState set to [\]]
expected: FAIL
[oldState set to [1, 2, 3\]]
expected: FAIL
[oldState set to an object]
expected: FAIL
[oldState set to an object with a valueOf function]
expected: FAIL
[ToggleEventInit properties set value]
expected: FAIL
[ToggleEventInit properties set value 2]
expected: FAIL
[ToggleEventInit properties set value 3]
expected: FAIL
[ToggleEventInit properties set value 4]
expected: FAIL

View file

@ -0,0 +1,3 @@
[module-delayed.html]
[async document.write in a module]
expected: FAIL

View file

@ -0,0 +1,3 @@
[module-tla-delayed.html]
[document.write in an imported module]
expected: FAIL

View file

@ -5,4 +5,4 @@
expected: TIMEOUT
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: FAIL
expected: TIMEOUT

View file

@ -1,10 +1,9 @@
[promise-job-entry.html]
expected: TIMEOUT
[Fulfillment handler on fulfilled promise]
expected: FAIL
[Rejection handler on pending-then-rejected promise]
expected: TIMEOUT
expected: FAIL
[Sanity check: this all works as expected with no promises involved]
expected: FAIL
@ -16,4 +15,4 @@
expected: FAIL
[Fulfillment handler on pending-then-fulfilled promise]
expected: TIMEOUT
expected: FAIL

View file

@ -0,0 +1,3 @@
[include-frames-originA-B.html]
[GetEntries of a parent Frame of origin A and its child frame of origin B]
expected: FAIL

View file

@ -19,28 +19,28 @@
expected: FAIL
[content-type 6 : text/plain;charset=gbk,text/plain;charset=windows-1252]
expected: FAIL
expected: TIMEOUT
[content-type 7 : text/html;charset=gbk,text/html;x=",text/plain]
expected: FAIL
expected: NOTRUN
[content-type 8 : text/plain;charset=gbk;x=foo,text/plain]
expected: FAIL
expected: NOTRUN
[content-type 9 : text/html;charset=gbk,text/plain,text/html]
expected: FAIL
expected: NOTRUN
[content-type 10 : text/plain,*/*]
expected: FAIL
expected: NOTRUN
[content-type 11 : text/html,*/*]
expected: FAIL
expected: NOTRUN
[content-type 12 : */*,text/html]
expected: FAIL
expected: NOTRUN
[content-type 13 : text/plain,*/*;charset=gbk]
expected: TIMEOUT
expected: NOTRUN
[content-type 14 : text/html,*/*;charset=gbk]
expected: NOTRUN

View file

@ -265,10 +265,10 @@
expected: FAIL
[This test validates the response status of resources. 88]
expected: FAIL
expected: TIMEOUT
[This test validates the response status of resources. 89]
expected: TIMEOUT
expected: NOTRUN
[This test validates the response status of resources. 90]
expected: NOTRUN

View file

@ -1,4 +1,5 @@
[audiocontext-not-fully-active.html]
expected: TIMEOUT
[frame in navigated remote-site frame]
expected: FAIL

View file

@ -1,5 +1,5 @@
[audiocontextoptions.html]
expected: TIMEOUT
expected: CRASH
[X context = new AudioContext({sampleRate: 1}) did not throw an exception.]
expected: FAIL

View file

@ -1,5 +1,5 @@
[cross-partition.https.tentative.html]
expected: TIMEOUT
expected: CRASH
[BroadcastChannel messages aren't received from a cross-partition iframe]
expected: FAIL

View file

@ -1,4 +0,0 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -1,3 +0,0 @@
[scrollBy.html]
[Ensure that the window.scrollBy function affects scroll position as expected]
expected: FAIL

View file

@ -15,7 +15,7 @@ promise_test(async t => {
/*config=*/ null, /*options=*/ {features: 'noopener'});
await createIndexedDBForTesting(rc1, 'test_idb', 1);
await assertBFCache(rc1, /*shouldRestoreFromBFCache=*/ true);
await assertBFCacheEligibility(rc1, /*shouldRestoreFromBFCache=*/ true);
// The page is ensured to be eligible for BFCache even with open connection,
// otherwise the previous assertion will fail with PRECONDITION_FAILED.
@ -26,6 +26,9 @@ promise_test(async t => {
// Create an IndexedDB database with higher version.
await createIndexedDBForTesting(rc2, 'test_idb_2', 2);
await rc2.historyBack();
// The previous page receiving versionchange event should be evicted.
await assert_not_bfcached(rc1);
// The previous page receiving versionchange event should be evicted with the
// correct reason.
// `kIgnoreEventAndEvict` will be reported as "Internal error".
// See `NotRestoredReasonToReportString()`.
await assertNotRestoredFromBFCache(rc1, ['Internal error']);
});

View file

@ -37,5 +37,5 @@ promise_test(async t => {
});
});
await assertBFCache(rc1, /*shouldRestoreFromBFCache=*/ true);
await assertBFCacheEligibility(rc1, /*shouldRestoreFromBFCache=*/ true);
});

View file

@ -22,6 +22,7 @@
height: 100px;
background: lime;
anchor-scroll: --a;
outline: none;
}
body {

View file

@ -22,6 +22,7 @@
height: 100px;
background: lime;
anchor-scroll: --a;
outline: none;
}
body {

View file

@ -22,6 +22,7 @@
height: 100px;
background: lime;
anchor-scroll: --a;
outline: none;
}
body {

View file

@ -22,6 +22,7 @@
height: 100px;
background: lime;
anchor-scroll: --a;
outline: none;
}
body {

View file

@ -35,6 +35,7 @@ dialog {
border: 0;
padding: 0;
inset: auto;
outline: none;
}
dialog::backdrop {

View file

@ -34,6 +34,7 @@ dialog {
margin: 0;
border: 0;
padding: 0;
outline: none;
}
dialog::backdrop {

View file

@ -0,0 +1,45 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Animations: line-height animations respond to style changes</title>
<link rel="help" href="https://drafts.csswg.org/css-inline/#line-height-property">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
#target {
animation-name: line-height-animation;
animation-duration: 4s;
animation-timing-function: linear;
animation-delay: -2s;
animation-play-state: paused;
}
@keyframes line-height-animation {
from { line-height: inherit; }
to { line-height: 20px; }
}
</style>
</head>
<body>
<div id="container">
<div id="target"></div>
</div>
<script>
'use strict';
const container = document.getElementById('container');
const target = document.getElementById('target');
test(() => {
container.style.lineHeight = '100px';
assert_equals(getComputedStyle(target).lineHeight, '60px');
container.style.lineHeight = '50px';
assert_equals(getComputedStyle(target).lineHeight, '35px');
container.style.lineHeight = '100px';
assert_equals(getComputedStyle(target).lineHeight, '60px');
}, 'line-height responds to inherited changes');
</script>
</body>
</html>

View file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1410896">
<link rel="match" href="../../../reference/ref-filled-green-100px-square.xht">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div style="columns:4; gap:0; column-fill:auto; width:100px; height:100px; background:red;">
<div style="height:400px; overflow:clip;">
<div style="display:table; width:100%;">
<div style="display:table-header-group; break-inside:avoid;">
<div style="height:25px; background:green;"></div>
</div>
<div style="height:500px; background:green;"></div>
</div>
</div>
</div>

View file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1410896">
<link rel="match" href="../../../reference/ref-filled-green-100px-square.xht">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div style="columns:4; gap:0; column-fill:auto; width:100px; height:100px; background:red;">
<div style="height:400px; overflow:clip;">
<div style="display:table; width:100%;">
<div style="height:500px; background:green;"></div>
<div style="display:table-footer-group; break-inside:avoid;">
<div style="height:25px; background:green;"></div>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1410896">
<link rel="match" href="../../../reference/ref-filled-green-100px-square.xht">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div style="columns:4; gap:0; column-fill:auto; width:100px; height:100px; background:red;">
<div style="height:400px; overflow:clip;">
<div style="display:table; width:100%;">
<div style="display:table-header-group; break-inside:avoid;">
<div style="height:25px; background:green;"></div>
</div>
<div style="height:500px; background:green;"></div>
<div style="display:table-footer-group; break-inside:avoid;">
<div style="height:25px; background:green;"></div>
</div>
</div>
</div>
</div>

View file

@ -50,6 +50,10 @@ test_invalid_value("color", "color()"); // Empty
test_invalid_value("color", "color(banana 1 1 1)"); // Bad color space
test_invalid_value("color", "color(displayp3 1 1 1)"); // Bad Display P3 color space
test_invalid_value("color", "color(1 1 1)"); // No color space
test_invalid_value("color", "color(srgb 1 1)", "color(srgb 1 1 0)"); // One missing component
test_invalid_value("color", "color(srgb 1)", "color(srgb 1 0 0)"); // Two missing components
test_invalid_value("color", "color(srgb)", "color(srgb 0 0 0)"); // All components missing
test_invalid_value("color", "color(srgb 1 1 1 1)"); // Too many parameters
test_invalid_value("color", "color(srgb 1 1 1 1 1)"); // Way too many parameters
test_invalid_value("color", "color(srgb 1 eggs 1)"); // Bad parameters

View file

@ -281,6 +281,9 @@
@container style(--reg-length: 10px) {
#reg-px { color: green; }
}
@container style(--reg-length: initial) {
#reg-px-initial { color: green; }
}
#reg-container-font-relative {
--reg-length: 10px;
@ -303,10 +306,21 @@
@container style(--reg-length: 50cqi) {
#reg-container-relative { color: green; }
}
#reg-container-initial {
--reg-length: 10px;
}
@container style(--reg-length: 10px) {
#reg-initial-value { color: green; }
}
@container style(--reg-length: initial) {
#reg-initial-keyword { color: green; }
}
</style>
<div id="registered">
<div id="reg-container-px">
<div id="reg-px"></div>
<div id="reg-px-initial"></div>
</div>
<div id="reg-container-font-relative">
<div id="reg-font-relative"></div>
@ -317,12 +331,20 @@
<div id="reg-container-container-relative">
<div id="reg-container-relative"></div>
</div>
<div id="reg-container-initial">
<div id="reg-initial-value"></div>
<div id="reg-initial-keyword"></div>
</div>
</div>
<script>
test(() => {
assert_equals(getComputedStyle(document.querySelector("#reg-px")).color, green);
}, "Match registered <length> custom property with px.");
test(() => {
assert_equals(getComputedStyle(document.querySelector("#reg-px-initial")).color, green);
}, "Match registered <length> custom property with px via initial keyword.");
test(() => {
assert_equals(getComputedStyle(document.querySelector("#reg-font-relative")).color, green);
}, "Match registered <length> custom property with em in query.");
@ -334,4 +356,12 @@
test(() => {
assert_equals(getComputedStyle(document.querySelector("#reg-container-relative")).color, green);
}, "Match registered <length> custom property with cqi unit.");
test(() => {
assert_equals(getComputedStyle(document.querySelector("#reg-initial-value")).color, green);
}, "Match registered <length> custom property with initial value.");
test(() => {
assert_equals(getComputedStyle(document.querySelector("#reg-initial-keyword")).color, green);
}, "Match registered <length> custom property with initial value via initial keyword.");
</script>

View file

@ -12,6 +12,7 @@
<style>
.box { width: 100px; height: 100px; border: 1px solid black; }
.hidden { content-visibility: hidden }
#dialog { outline: none; }
</style>
<div id=container class=box>

View file

@ -4,6 +4,7 @@
<style>
.box { width: 100px; height: 100px; border: 1px solid black; }
dialog { outline: none; }
</style>
<div id=container class=box>

View file

@ -142,4 +142,16 @@
.c div.b &, div & { color: blue; }
}`, 'one rule is kept unchanged, the other is changed');
});
// Rules that are dropped in forgiving parsing but that contain &,
// must still be serialized out as they were.
test(() => {
const text = '.a { :is(!& .foo, .b) { color: green; } }';
document.getElementById('ss').innerHTML = text;
let [ss] = document.styleSheets;
assert_equals(ss.cssRules[0].cssText,
`.a {
:is(!& .foo, .b) { color: green; }
}`, 'invalid rule containing ampersand is kept in serialization');
});
</script>

View file

@ -0,0 +1,21 @@
<!DOCTYPE HTML>
<html class=test-wait>
<style type="text/css">
</style>
<div id="container">
<div id="div" style="transform:translateX(100px);"></div>
</div>
<script>
function runTest() {
document.getElementById('div').style = 'transform:translateX(200px)';
var forceLayout = document.body.offsetWidth;
document.getElementById('container').style = 'content-visibility: hidden;';
requestAnimationFrame(function() {
requestAnimationFrame(function() {
document.documentElement.classList.remove('test-wait');
});
});
}
onload = runTest;
</script>
</html>

View file

@ -66,4 +66,9 @@ test(t => {
assert_throws_js(TypeError, () => styleMap.append('transition-duration', CSS.s(1)));
}, 'Appending to a list containing a variable reference should throw');
test(t => {
let styleMap = createDeclaredStyleMap(t, 'transition: var(--a)');
assert_throws_js(TypeError, () => styleMap.append('transition-duration', CSS.s(1)));
}, 'Appending to a longhand list containing a variable reference should throw');
</script>

View file

@ -18,6 +18,8 @@
view-transition-name: dialog;
contain: layout;
outline: none;
}
#target::backdrop {

View file

@ -18,6 +18,8 @@
view-transition-name: dialog;
contain: layout;
outline: none;
}
#target::backdrop {

View file

@ -44,7 +44,7 @@ div:nth-of-type(2) {
width: 5ch;
}
div:nth-of-type(1) {
background: orange;
background: blue;
height: 5ch;
display: inline-block; /* shrinkwrap */
}

View file

@ -1,15 +1,41 @@
async function waitForScrollendEvent(test, target, timeoutMs = 500) {
async function waitForEvent(eventName, test, target, timeoutMs = 500) {
return new Promise((resolve, reject) => {
const timeoutCallback = test.step_timeout(() => {
reject(`No Scrollend event received for target ${target}`);
reject(`No ${eventName} event received for target ${target}`);
}, timeoutMs);
target.addEventListener('scrollend', (evt) => {
target.addEventListener(eventName, (evt) => {
clearTimeout(timeoutCallback);
resolve(evt);
}, { once: true });
});
}
async function waitForScrollendEvent(test, target, timeoutMs = 500) {
return waitForEvent("scrollend", test, target, timeoutMs);
}
async function waitForPointercancelEvent(test, target, timeoutMs = 500) {
return waitForEvent("pointercancel", test, target, timeoutMs);
}
async function createScrollendPromiseForTarget(test,
target_div,
timeoutMs = 500) {
return waitForScrollendEvent(test, target_div, timeoutMs).then(evt => {
assert_false(evt.cancelable, 'Event is not cancelable');
assert_false(evt.bubbles, 'Event targeting element does not bubble');
});
}
function verifyNoScrollendOnDocument(test) {
const callback =
test.unreached_func("window got unexpected scrollend event.");
window.addEventListener('scrollend', callback);
test.add_cleanup(() => {
window.removeEventListener('scrollend', callback);
});
}
async function verifyScrollStopped(test, target_div) {
const unscaled_pause_time_in_ms = 100;
const x = target_div.scrollLeft;
@ -107,6 +133,10 @@ function waitForAnimationEnd(getValue) {
}
// Scrolls in target according to move_path with pauses in between
// The move_path should contains coordinates that are within target boundaries.
// Keep in mind that 0,0 is the center of the target element and is also
// the pointerDown position.
// pointerUp() is fired after sequence of moves.
function touchScrollInTargetSequentiallyWithPause(target, move_path, pause_time_in_ms = 100) {
const test_driver_actions = new test_driver.Actions()
.addPointer("pointer1", "touch")
@ -125,7 +155,7 @@ function touchScrollInTargetSequentiallyWithPause(target, move_path, pause_time_
y += step_y;
test_driver_actions.pointerMove(x, y, {origin: target});
}
test_driver_actions.pause(pause_time_in_ms);
test_driver_actions.pause(pause_time_in_ms); // To prevent inertial scroll
}
return test_driver_actions.pointerUp().send();

View file

@ -28,36 +28,47 @@
<script>
const target_div = document.getElementById('targetDiv');
let scrollend_arrived = false;
let scrollend_event_count = 0;
function onScrollEnd(event) {
assert_false(event.cancelable);
assert_false(event.bubbles);
scrollend_arrived = true;
scrollend_event_count += 1;
}
function runTest() {
promise_test (async (t) => {
// Make sure that no scrollend event is sent to document.
document.addEventListener("scrollend",
t.unreached_func("document got unexpected scrollend event."));
await waitForCompositorCommit();
// Skip the test on a Mac as they do not support touch screens.
const isMac = navigator.platform.toUpperCase().indexOf('MAC')>=0;
if (isMac)
return;
verifyNoScrollendOnDocument(t);
await waitForCompositorReady();
let scrollend_count = 0;
const scrollend_listener = () => { scrollend_count += 1; };
target_div.addEventListener("scrollend", scrollend_listener);
t.add_cleanup(() => { target_div.removeEventListener('scrollend', scrollend_listener); });
const pointercancel_listener = () => {
assert_equals(scrollend_count, 0, 'scrollend should happen after pointercancel.');
};
target_div.addEventListener("pointercancel", pointercancel_listener);
t.add_cleanup(() => { target_div.removeEventListener('pointercancel', pointercancel_listener); });
// Because we have several pointer moves, we choose bigger timeout.
const timeoutMs = 1000;
const targetPointercancelPromise = waitForPointercancelEvent(t, target_div, timeoutMs);
const targetScrollendPromise = createScrollendPromiseForTarget(t, target_div, timeoutMs);
// Scroll down & up & down on target div and wait for the target_div to get scrollend event.
target_div.addEventListener("scrollend", onScrollEnd);
const move_path = [
{ x: 0, y: -300}, // down
{ x: 0, y: -100}, // up
{ x: 0, y: -400}, // down
{ x: 0, y: -200}, // up
{ x: 0, y: -80 }, // Scroll down
{ x: 0, y: -40 }, // Scroll up
{ x: 0, y: -80 }, // Scroll down
];
await touchScrollInTargetSequentiallyWithPause(target_div, move_path, 150);
await touchScrollInTargetSequentiallyWithPause(target_div, move_path);
await waitFor(() => {return scrollend_arrived;},
'target_div did not receive scrollend event after sequence of scrolls on target.');
assert_equals(scrollend_event_count, 1);
// Because we start scrolling after pointerdown, there is no pointerup, instead the target
// will receive a pointercancel, so we wait for pointercancel, and then continue.
await targetPointercancelPromise;
await targetScrollendPromise;
await verifyScrollStopped(t, target_div);
assert_equals(scrollend_count, 1, 'Only one scrollend event should be fired');
}, "Move down, up and down again, receive scrollend event only once");
}
</script>

View file

@ -70,15 +70,8 @@
function runTests() {
const root_div = document.getElementById("root");
async function createScrollendPromise(test) {
return waitForScrollendEvent(test, root_div).then(evt => {
assert_false(evt.cancelable, 'Event is not cancelable');
assert_false(evt.bubbles, 'Event targeting element does not bubble');
});
}
promise_test(async (t) => {
const targetScrollendPromise = createScrollendPromise(t);
const targetScrollendPromise = createScrollendPromiseForTarget(t, root_div);
await waitForNextFrame();
root_div.classList.remove("hidden");

View file

@ -39,19 +39,6 @@ async function resetTargetScrollState(test) {
}
}
async function verifyNoScrollendOnDocument(test) {
const callback =
test.unreached_func("window got unexpected scrollend event.");
window.addEventListener('scrollend', callback);
}
async function createScrollendPromise(test, timeoutMs = 500) {
return waitForScrollendEvent(test, target_div, timeoutMs).then(evt => {
assert_false(evt.cancelable, 'Event is not cancelable');
assert_false(evt.bubbles, 'Event targeting element does not bubble');
});
}
function runTest() {
promise_test(async (t) => {
// Skip the test on a Mac as they do not support touch screens.
@ -63,7 +50,7 @@ function runTest() {
await waitForCompositorReady();
const timeout = 1000; // Because we have two pauses we need longer timeout
const targetScrollendPromise = createScrollendPromise(t, timeout);
const targetScrollendPromise = createScrollendPromiseForTarget(t, target_div, timeout);
verifyNoScrollendOnDocument(t);
let scrollend_count = 0;
@ -108,7 +95,7 @@ function runTest() {
await resetTargetScrollState(t);
await waitForCompositorReady();
const targetScrollendPromise = createScrollendPromise(t);
const targetScrollendPromise = createScrollendPromiseForTarget(t, target_div);
verifyNoScrollendOnDocument(t);
const bounds = target_div.getBoundingClientRect();
@ -139,7 +126,7 @@ function runTest() {
await resetTargetScrollState(t);
await waitForCompositorReady();
const targetScrollendPromise = createScrollendPromise(t);
const targetScrollendPromise = createScrollendPromiseForTarget(t, target_div);
verifyNoScrollendOnDocument(t);
const bounds = target_div.getBoundingClientRect();
@ -165,7 +152,7 @@ function runTest() {
await resetTargetScrollState(t);
await waitForCompositorReady();
const targetScrollendPromise = createScrollendPromise(t);
const targetScrollendPromise = createScrollendPromiseForTarget(t, target_div);
verifyNoScrollendOnDocument(t);
const x = 0;
@ -188,7 +175,7 @@ function runTest() {
await waitForCompositorReady();
verifyNoScrollendOnDocument(t);
const targetScrollendPromise = createScrollendPromise(t);
const targetScrollendPromise = createScrollendPromiseForTarget(t, target_div);
target_div.focus();
window.test_driver.send_keys(target_div, '\ue015');

View file

@ -0,0 +1,88 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="timeout" content="long">
<meta name="variant" content="?action=Backspace">
<meta name="variant" content="?action=Delete">
<title>Delete in last list item should not delete parent list if it's editing host</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="../include/editor-test-utils.js"></script>
<script>
"use strict";
const params = new URLSearchParams(location.search.substring(1));
const backspace = params.get("action") == "Backspace";
addEventListener("load", () => {
document.body.innerHTML ="<dl contenteditable></dl>";
const editingHost = document.querySelector("dl[contenteditable]");
const utils = new EditorTestUtils(editingHost);
function addPromiseTest(aTest) {
promise_test(async () => {
editingHost.focus();
utils.setupEditingHost(aTest.innerHTML);
await (backspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
utils.normalizeStyleAttributeValues();
if (Array.isArray(aTest.expectedResult)) {
assert_in_array(editingHost.innerHTML, aTest.expectedResult);
} else {
assert_equals(editingHost.innerHTML, aTest.expectedResult);
}
assert_equals(
document.body.childNodes.length,
1,
`The editing host should be the only child of <body> (got: "${document.body.innerHTML}")`
);
assert_equals(
document.body.firstChild,
editingHost,
`The editing host should be the only child of <body> (got: "${document.body.innerHTML}")`
);
}, `${backspace ? "Backspace" : "Delete"} in "<dl contenteditable>${aTest.innerHTML}</dl>"`);
}
addPromiseTest({
innerHTML: "<dt>{}</dt>",
expectedResult: ["<dt></dt>", "<dt><br></dt>"],
});
addPromiseTest({
innerHTML: "<dd>{}</dd>",
expectedResult: ["<dd></dd>", "<dd><br></dd>"],
});
addPromiseTest({
innerHTML: "<dd><ul><li>{}</li></ul></dd>",
expectedResult: ["<dd></dd>", "<dd><br></dd>"],
});
addPromiseTest({
innerHTML: "<dd><ol><li>{}</li></ol></dd>",
expectedResult: ["<dd></dd>", "<dd><br></dd>"],
});
// If only sub-list in the editing host list element, the sub-list should be
// replaced with a list item.
addPromiseTest({
innerHTML: "<ul><li>{}</li></ul>",
expectedResult: ["<dd></dd>", "<dd><br></dd>"],
});
addPromiseTest({
innerHTML: "<ol><li>{}</li></ol>",
expectedResult: ["<dd></dd>", "<dd><br></dd>"],
});
addPromiseTest({
innerHTML: "<dl><dt>{}</dt></dl>",
expectedResult: ["<dd></dd>", "<dd><br></dd>"],
});
addPromiseTest({
innerHTML: "<dl><dd>{}</dd></dl>",
expectedResult: ["<dd></dd>", "<dd><br></dd>"],
});
}, {once:true});
</script>
</head>
<body></body>
</html>

View file

@ -0,0 +1,87 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="timeout" content="long">
<meta name="variant" content="?list=ul&action=Backspace">
<meta name="variant" content="?list=ul&action=Delete">
<meta name="variant" content="?list=ol&action=Backspace">
<meta name="variant" content="?list=ol&action=Delete">
<title>Delete in last list item should not delete parent list if it's editing host</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="../include/editor-test-utils.js"></script>
<script>
"use strict";
const params = new URLSearchParams(location.search.substring(1));
const backspace = params.get("action") == "Backspace";
const list = params.get("list");
addEventListener("load", () => {
document.body.innerHTML =`<${list} contenteditable></${list}>`;
const editingHost = document.querySelector("[contenteditable]");
const utils = new EditorTestUtils(editingHost);
function addPromiseTest(aTest) {
promise_test(async () => {
editingHost.focus();
utils.setupEditingHost(aTest.innerHTML);
await (backspace ? utils.sendBackspaceKey() : utils.sendDeleteKey());
utils.normalizeStyleAttributeValues();
if (Array.isArray(aTest.expectedResult)) {
assert_in_array(editingHost.innerHTML, aTest.expectedResult);
} else {
assert_equals(editingHost.innerHTML, aTest.expectedResult);
}
assert_equals(
document.body.childNodes.length,
1,
`The editing host should be the only child of <body> (got: "${document.body.innerHTML}")`
);
assert_equals(
document.body.firstChild,
editingHost,
`The editing host should be the only child of <body> (got: "${document.body.innerHTML}")`
);
}, `${backspace ? "Backspace" : "Delete"} in "<${list} contenteditable>${aTest.innerHTML}</${list}>"`);
}
addPromiseTest({
innerHTML: "<li>{}</li>",
expectedResult: ["<li></li>", "<li><br></li>"],
});
addPromiseTest({
innerHTML: "<li><ul><li>{}</li></ul></li>",
expectedResult: ["<li></li>", "<li><br></li>"],
});
addPromiseTest({
innerHTML: "<li><ol><li>{}</li></ol></li>",
expectedResult: ["<li></li>", "<li><br></li>"],
});
// If only sub-list in the editing host list element, the sub-list should be
// replaced with a list item.
addPromiseTest({
innerHTML: "<ul><li>{}</li></ul>",
expectedResult: ["<li></li>", "<li><br></li>"],
});
addPromiseTest({
innerHTML: "<ol><li>{}</li></ol>",
expectedResult: ["<li></li>", "<li><br></li>"],
});
addPromiseTest({
innerHTML: "<dl><dt>{}</dt></dl>",
expectedResult: ["<li></li>", "<li><br></li>"],
});
addPromiseTest({
innerHTML: "<dl><dd>{}</dd></dl>",
expectedResult: ["<li></li>", "<li><br></li>"],
});
}, {once:true});
</script>
</head>
<body></body>
</html>

View file

@ -4,8 +4,6 @@
<link rel=stylesheet href=../include/reset.css>
<title>backcolor - HTML editing conformance tests</title>
<p id=timing></p>
<div id=log></div>
<div id=test-container></div>
@ -21,8 +19,6 @@
"use strict";
(function() {
var startTime = Date.now();
// Make document.body.innerHTML more tidy by removing unnecessary things.
[].forEach.call(document.querySelectorAll("script"), function(node) {
node.parentNode.removeChild(node);
@ -43,11 +39,5 @@
document.getElementById("test-container").parentNode
.removeChild(document.getElementById("test-container"));
var elapsed = Math.round(Date.now() - startTime)/1000;
document.getElementById("timing").textContent =
"Time elapsed: " + Math.floor(elapsed/60) + ":"
+ ((elapsed % 60) < 10 ? "0" : "")
+ (elapsed % 60).toFixed(3) + " min.";
})();
</script>

View file

@ -8,8 +8,6 @@
<link rel=stylesheet href=../include/reset.css>
<title>bold - HTML editing conformance tests</title>
<p id=timing></p>
<div id=log></div>
<div id=test-container></div>
@ -25,8 +23,6 @@
"use strict";
(function() {
var startTime = Date.now();
// Make document.body.innerHTML more tidy by removing unnecessary things.
[].forEach.call(document.querySelectorAll("script"), function(node) {
node.parentNode.removeChild(node);
@ -48,10 +44,5 @@
document.getElementById("test-container").parentNode
.removeChild(document.getElementById("test-container"));
var elapsed = Math.round(Date.now() - startTime)/1000;
document.getElementById("timing").textContent =
"Time elapsed: " + Math.floor(elapsed/60) + ":"
+ ((elapsed % 60) < 10 ? "0" : "")
+ (elapsed % 60).toFixed(3) + " min.";
})();
</script>

View file

@ -4,8 +4,6 @@
<link rel=stylesheet href=../include/reset.css>
<title>createlink - HTML editing conformance tests</title>
<p id=timing></p>
<div id=log></div>
<div id=test-container></div>
@ -21,8 +19,6 @@
"use strict";
(function() {
var startTime = Date.now();
// Make document.body.innerHTML more tidy by removing unnecessary things.
[].forEach.call(document.querySelectorAll("script"), function(node) {
node.parentNode.removeChild(node);
@ -44,10 +40,5 @@
document.getElementById("test-container").parentNode
.removeChild(document.getElementById("test-container"));
var elapsed = Math.round(Date.now() - startTime)/1000;
document.getElementById("timing").textContent =
"Time elapsed: " + Math.floor(elapsed/60) + ":"
+ ((elapsed % 60) < 10 ? "0" : "")
+ (elapsed % 60).toFixed(3) + " min.";
})();
</script>

View file

@ -4,8 +4,6 @@
<link rel=stylesheet href=../include/reset.css>
<title>delete list items in table cells - HTML editing conformance tests</title>
<p id=timing></p>
<div id=log></div>
<div id=test-container></div>
@ -21,8 +19,6 @@
"use strict";
(function() {
var startTime = Date.now();
// Make document.body.innerHTML more tidy by removing unnecessary things.
[].forEach.call(document.querySelectorAll("script"), function(node) {
node.parentNode.removeChild(node);
@ -44,10 +40,5 @@
document.getElementById("test-container").parentNode
.removeChild(document.getElementById("test-container"));
var elapsed = Math.round(Date.now() - startTime)/1000;
document.getElementById("timing").textContent =
"Time elapsed: " + Math.floor(elapsed/60) + ":"
+ ((elapsed % 60) < 10 ? "0" : "")
+ (elapsed % 60).toFixed(3) + " min.";
})();
</script>

View file

@ -12,8 +12,6 @@
<link rel=stylesheet href=../include/reset.css>
<title>delete - HTML editing conformance tests</title>
<p id=timing></p>
<div id=log></div>
<div id=test-container></div>
@ -29,8 +27,6 @@
"use strict";
(function() {
var startTime = Date.now();
// Make document.body.innerHTML more tidy by removing unnecessary things.
[].forEach.call(document.querySelectorAll("script"), function(node) {
node.parentNode.removeChild(node);
@ -51,11 +47,5 @@
document.getElementById("test-container").parentNode
.removeChild(document.getElementById("test-container"));
var elapsed = Math.round(Date.now() - startTime)/1000;
document.getElementById("timing").textContent =
"Time elapsed: " + Math.floor(elapsed/60) + ":"
+ ((elapsed % 60) < 10 ? "0" : "")
+ (elapsed % 60).toFixed(3) + " min.";
})();
</script>

Some files were not shown because too many files have changed in this diff Show more