From f49b5fb28b4fc72f2bc61c17f93926d6a2cf9cbc Mon Sep 17 00:00:00 2001 From: Masayuki Nakano Date: Sat, 11 Sep 2021 07:21:29 +0000 Subject: [PATCH] part 1: Add some edge cases into input-events-get-target-ranges-deleting-in-list-items.tentative.html Some `contenteditable="false"` inclusing cases do not pass on Blink too, though. Differential Revision: https://phabricator.services.mozilla.com/D125028 bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1672900 gecko-commit: e88bc0e4b9d4c2f3fa5df2bb04253183b85ce561 gecko-reviewers: m_kato --- ...nges-deleting-in-list-items.tentative.html | 279 ++++++++++++++++++ 1 file changed, 279 insertions(+) diff --git a/input-events/input-events-get-target-ranges-deleting-in-list-items.tentative.html b/input-events/input-events-get-target-ranges-deleting-in-list-items.tentative.html index 2671fefa7cfc97..7c225cd051d597 100644 --- a/input-events/input-events-get-target-ranges-deleting-in-list-items.tentative.html +++ b/input-events/input-events-get-target-ranges-deleting-in-list-items.tentative.html @@ -457,6 +457,213 @@ } ); +addPromiseTest( + `
{<${list}>

  • }
    `, + { + expectedInnerHTML: ["

    ", "

    "], + expectedTargetRanges: () => { + return [ + { + startContainer: gEditor.querySelector("div"), + startOffset: 0, + endContainer: gEditor.querySelector("div"), + endOffset: 1, + }, + ]; + }, + expectInputEvent: true, + } +); + +// It may be better to ignore the invisible white-space and take same action +// as above, but it requires more expensive check before deleting. So perhaps, +// this behavior is reasonable. +addPromiseTest( + `
    { <${list}>

  • }
    `, + { + expectedInnerHTML: ["

    ", "

    "], + expectedTargetRanges: () => { + return [ + { + startContainer: gEditor.querySelector("div"), + startOffset: 0, + endContainer: gEditor.querySelector("div"), + endOffset: 3, + }, + ]; + }, + expectInputEvent: true, + } +); + +addPromiseTest( + `
    <${list}>
  • {}
  • `, + { + expectedInnerHTML: ["

    ", "

    "], + expectedTargetRanges: () => { + return [ + { + startContainer: gEditor.querySelector("div"), + startOffset: 0, + endContainer: gEditor.querySelector("div"), + endOffset: 1, + }, + ]; + }, + expectInputEvent: true, + } +); + +// XXX Blink does not delete the list element if its first or last
  • element +// is not editable. However, it means that user cannot delete the list +// element, and it's not consistent behavior when only middle list item(s) +// are not editable. Perhaps, once it makes the list element has only +// one empty list item element, then, another deleting operation allows to +// delete the list element. +addPromiseTest( + `
    {<${list}>

  • }`, + { + expectedInnerHTML: `
    <${list}>

  • `, + expectedTargetRanges: () => { + return [ + { + startContainer: gEditor.querySelector(list), + startOffset: 0, + endContainer: gEditor.querySelector(list), + endOffset: 1, + }, + ]; + }, + expectInputEvent: true, + } +); + +addPromiseTest( + `
    {<${list}>
  • list-item1
  • }
    `, + { + expectedInnerHTML: `
    <${list}>

  • `, + expectedTargetRanges: () => { + return [ + { + startContainer: gEditor.querySelector(list), + startOffset: 0, + endContainer: gEditor.querySelector(list), + endOffset: 1, + }, + ]; + }, + expectInputEvent: true, + } +); + +addPromiseTest( + `
    {<${list}>
  • list-item1

  • }
    `, + { + expectedInnerHTML: `
    <${list}>

  • `, + expectedTargetRanges: () => { + return [ + { + startContainer: gEditor.querySelector(list), + startOffset: 0, + endContainer: gEditor.querySelector("li + li"), + endOffset: 1, + }, + ]; + }, + expectInputEvent: true, + } +); + +addPromiseTest( + `
    {<${list}>
  • list-item1
  • list-item2
  • }
    `, + { + expectedInnerHTML: `
    <${list}>

  • `, + expectedTargetRanges: () => { + return [ + { + startContainer: gEditor.querySelector(list), + startOffset: 0, + endContainer: gEditor.querySelector("li + li").firstChild, + endOffset: gEditor.querySelector("li + li").firstChild.length, + }, + ]; + }, + expectInputEvent: true, + } +); + +addPromiseTest( + `
    {<${list}>

  • list-item2
  • }
    `, + { + expectedInnerHTML: `
    <${list}>

  • `, + expectedTargetRanges: () => { + return [ + { + startContainer: gEditor.querySelector("li").firstChild, + startOffset: 0, + endContainer: gEditor.querySelector(list), + endOffset: 2, + }, + ]; + }, + expectInputEvent: true, + } +); + +addPromiseTest( + `
    {<${list}>
  • list-item1
  • list-item2
  • }
    `, + { + expectedInnerHTML: `
    <${list}>

  • `, + expectedTargetRanges: () => { + return [ + { + startContainer: gEditor.querySelector("li").firstChild, + startOffset: 0, + endContainer: gEditor.querySelector(list), + endOffset: 2, + }, + ]; + }, + expectInputEvent: true, + } +); + +addPromiseTest( + `
    {<${list}>

  • list-item2

  • }
    `, + { + expectedInnerHTML: `
    <${list}>

  • `, + expectedTargetRanges: () => { + return [ + { + startContainer: gEditor.querySelector("li").firstChild, + startOffset: 0, + endContainer: gEditor.querySelector("li + li + li"), + endOffset: 1, + }, + ]; + }, + expectInputEvent: true, + } +); + +addPromiseTest( + `
    {<${list}>
  • list-item1
  • list-item2
  • list-item3
  • }
    `, + { + expectedInnerHTML: `
    <${list}>

  • `, + expectedTargetRanges: () => { + return [ + { + startContainer: gEditor.querySelector("li").firstChild, + startOffset: 0, + endContainer: gEditor.querySelector("li + li + li").firstChild, + endOffset: gEditor.querySelector("li + li + li").firstChild.length, + }, + ]; + }, + expectInputEvent: true, + } +); + addPromiseTest( `<${list}>
  • list-item1
  • {
  • list-item2
  • }
  • list-item3
  • `, { @@ -959,6 +1166,42 @@ } ); + addPromiseTest( + `<${list}>
  • <${childList}>
  • [list-item1]
  • `, + { + expectedInnerHTML: `<${list}>
  • <${childList}>

  • `, + expectedTargetRanges: () => { + return [ + { + startContainer: gEditor.querySelector(`li li`).firstChild, + startOffset: 0, + endContainer: gEditor.querySelector(`li li`).firstChild, + endOffset: gEditor.querySelector(`li li`).firstChild.length, + }, + ]; + }, + expectInputEvent: true, + } + ); + + addPromiseTest( + `<${list}>
  • {<${childList}>
  • list-item1
  • }`, + { + expectedInnerHTML: `<${list}>
  • <${childList}>

  • `, + expectedTargetRanges: () => { + return [ + { + startContainer: gEditor.querySelector(`li li`).firstChild, + startOffset: 0, + endContainer: gEditor.querySelector(`li li`).firstChild, + endOffset: gEditor.querySelector(`li li`).firstChild.length, + }, + ]; + }, + expectInputEvent: true, + } + ); + addPromiseTest( `<${list}>
  • <${childList}>
  • {}
  • list-item2
  • `, { @@ -1014,6 +1257,42 @@ } ); + addPromiseTest( + `<${list}><${childList}>
  • [list-item1]
  • `, + { + expectedInnerHTML: `<${list}><${childList}>

  • `, + expectedTargetRanges: () => { + return [ + { + startContainer: gEditor.querySelector(`li`).firstChild, + startOffset: 0, + endContainer: gEditor.querySelector(`li`).firstChild, + endOffset: gEditor.querySelector(`li`).firstChild.length, + }, + ]; + }, + expectInputEvent: true, + } + ); + + addPromiseTest( + `<${list}>{<${childList}>
  • list-item1
  • }`, + { + expectedInnerHTML: `<${list}><${childList}>

  • `, + expectedTargetRanges: () => { + return [ + { + startContainer: gEditor.querySelector(`li`).firstChild, + startOffset: 0, + endContainer: gEditor.querySelector(`li`).firstChild, + endOffset: gEditor.querySelector(`li`).firstChild.length, + }, + ]; + }, + expectInputEvent: true, + } + ); + addPromiseTest( `<${list}><${childList}>
  • {}
  • list-item2
  • `, {