summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/editing/edit-context/edit-context-basics.tentative.html
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /testing/web-platform/tests/editing/edit-context/edit-context-basics.tentative.html
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/editing/edit-context/edit-context-basics.tentative.html')
-rw-r--r--testing/web-platform/tests/editing/edit-context/edit-context-basics.tentative.html196
1 files changed, 196 insertions, 0 deletions
diff --git a/testing/web-platform/tests/editing/edit-context/edit-context-basics.tentative.html b/testing/web-platform/tests/editing/edit-context/edit-context-basics.tentative.html
new file mode 100644
index 0000000000..78b6824921
--- /dev/null
+++ b/testing/web-platform/tests/editing/edit-context/edit-context-basics.tentative.html
@@ -0,0 +1,196 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>EditContext: The HTMLElement.editContext property</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src='../../html/resources/common.js'></script>
+</head>
+<body>
+ <div id="test"></div>
+ <div id="contenteditableDiv" contenteditable></div>
+ <script>
+ test(function() {
+ const editContextDict = {
+ text: "Hello world",
+ selectionStart: 11,
+ selectionEnd: 11
+ };
+ const editContext = new EditContext(editContextDict);
+ assert_not_equals(editContext, null);
+ // Verify all the members of the EditContext
+ assert_equals(editContext.text, "Hello world");
+ assert_equals(editContext.selectionStart, 11);
+ assert_equals(editContext.selectionEnd, 11);
+ }, 'Testing EditContext Dictionary Init');
+
+ test(function() {
+ contenteditableDiv.editContext = new EditContext();
+ contenteditableDiv.editContext = null;
+ contenteditableDiv.focus();
+ assert_equals(document.activeElement, contenteditableDiv);
+ }, 'A contenteditable element should remain editable after attaching and detaching EditContext.');
+
+ test(function() {
+ const editContext = new EditContext();
+ assert_not_equals(editContext, null);
+
+ const disconnected_div = document.createElement("DIV");
+ assert_equals(disconnected_div.editContext, null);
+
+ disconnected_div.editContext = editContext;
+ assert_equals(disconnected_div.editContext, editContext);
+ assert_equals(editContext.attachedElements().length, 1);
+ assert_equals(editContext.attachedElements()[0], disconnected_div);
+ }, 'EditContext can be associated with an element that is not in the tree.');
+
+ test(function() {
+ const editContext = new EditContext();
+ assert_not_equals(editContext, null);
+
+ const div = document.createElement("DIV");
+ assert_equals(div.editContext, null);
+
+ document.body.appendChild(div);
+ div.editContext = editContext;
+ assert_equals(div.editContext, editContext);
+ assert_equals(editContext.attachedElements().length, 1);
+ assert_equals(editContext.attachedElements()[0], div);
+
+ document.body.removeChild(div);
+ assert_equals(div.editContext, editContext);
+ assert_equals(editContext.attachedElements().length, 1);
+ assert_equals(editContext.attachedElements()[0], div);
+ }, 'If an element is removed from the tree, the associated EditContext remains connected to the element.');
+
+ test(function() {
+ const editContext = new EditContext();
+
+ const div_parent = document.createElement("DIV");
+ const div_child = document.createElement("DIV");
+ document.body.appendChild(div_parent);
+ div_parent.appendChild(div_child);
+
+ div_child.editContext = editContext;
+ assert_equals(div_child.editContext, editContext);
+ assert_equals(div_parent.editContext, null);
+ assert_equals(editContext.attachedElements().length, 1);
+ assert_equals(editContext.attachedElements()[0], div_child);
+
+ document.body.removeChild(div_parent);
+ assert_equals(div_child.editContext, editContext);
+ assert_equals(editContext.attachedElements().length, 1);
+ assert_equals(editContext.attachedElements()[0], div_child);
+ }, 'If an element\'s ancestor is removed from tree, the associated EditContext remains connected to the element.');
+
+ test(function() {
+ const editContext = new EditContext();
+ const test = document.getElementById("test");
+
+ test.editContext = editContext;
+
+ assert_equals(test.editContext, editContext);
+ assert_equals(editContext.attachedElements().length, 1);
+ assert_equals(editContext.attachedElements()[0], test);
+
+ test.editContext = null;
+
+ assert_equals(editContext.attachedElements().length, 0);
+ }, '.attachedElements() should return associated element');
+
+ test(function() {
+ const editContext = new EditContext();
+ assert_not_equals(editContext, null);
+ editContext.updateText(0, 3, "foo");
+ assert_equals(editContext.text, "foo");
+ const test = document.getElementById('test');
+ // Update the layout of the |EditContext|
+ var viewRect = test.getBoundingClientRect();
+ viewRect.x = viewRect.left;
+ viewRect.y = viewRect.top;
+ var caretRect = test.getBoundingClientRect();
+ caretRect.x = caretRect.left;
+ caretRect.y = 2.2 * caretRect.top;
+ caretRect.width = 1;
+ editContext.updateSelection(0, 0);
+ assert_equals(editContext.selectionStart, 0);
+ assert_equals(editContext.selectionEnd, 0);
+ editContext.updateSelection(1, 0);
+ assert_equals(editContext.selectionStart, 1);
+ assert_equals(editContext.selectionEnd, 0);
+ editContext.updateSelection(0, 1);
+ assert_equals(editContext.selectionStart, 0);
+ assert_equals(editContext.selectionEnd, 1);
+ editContext.updateSelection(1, 1);
+ assert_equals(editContext.selectionStart, 1);
+ assert_equals(editContext.selectionEnd, 1);
+ editContext.updateControlBounds(viewRect);
+ editContext.updateSelectionBounds(caretRect);
+ editContext.updateCharacterBounds(0, [caretRect]);
+
+ assert_throws_js(TypeError, function() { editContext.updateControlBounds(42); });
+ assert_throws_js(TypeError, function() { editContext.updateSelectionBounds(42); });
+ assert_throws_js(TypeError, function() { editContext.updateControlBounds(undefined); });
+ assert_throws_js(TypeError, function() { editContext.updateSelectionBounds(undefined); });
+ assert_throws_js(TypeError, function() { editContext.updateCharacterBounds(0); });
+ assert_throws_js(TypeError, function() { editContext.updateCharacterBounds([caretRect]); });
+ assert_throws_js(TypeError, function() { editContext.updateCharacterBounds(0, caretRect); });
+ assert_throws_js(TypeError, function() { editContext.updateCharacterBounds(0, 42); });
+ assert_throws_js(TypeError, function() { editContext.updateCharacterBounds(0, undefined); });
+ assert_throws_js(TypeError, function() { editContext.updateCharacterBounds(0, [undefined]); });
+
+ viewRect.x = viewRect.y = viewRect.width = viewRect.height = undefined;
+ editContext.updateControlBounds(viewRect);
+ editContext.updateSelectionBounds(viewRect);
+ editContext.updateCharacterBounds(0, [viewRect]);
+ }, 'Testing EditContext update text, selection and layout');
+
+ test(function() {
+ const editContext = new EditContext();
+ const test = document.getElementById('test');
+ var rect1 = DOMRect.fromRect({x:0, y:1, width:100, height:200});
+ var rect2 = DOMRect.fromRect({x:2, y:3, width:300, height:400});
+ var rectArray = [rect1, rect2];
+ var rangeStart = 2;
+ editContext.updateCharacterBounds(rangeStart, rectArray);
+ assert_equals(editContext.characterBoundsRangeStart, 2);
+
+ var actualRectArray = editContext.characterBounds();
+ assert_equals(actualRectArray.length, 2);
+ assert_equals(actualRectArray[0].x, 0);
+ assert_equals(actualRectArray[0].y, 1);
+ assert_equals(actualRectArray[0].width, 100);
+ assert_equals(actualRectArray[0].height, 200);
+ rect2.x=100;
+ assert_equals(actualRectArray[1].x, 2); // the cached value shouldn't change.
+ assert_equals(actualRectArray[1].y, 3);
+ assert_equals(actualRectArray[1].width, 300);
+ assert_equals(actualRectArray[1].height, 400);
+ }, 'updateCharacterBounds(), characterBounds(), and characterBoundsRangeStart should work properly');
+
+ // The behavior in this test case is not well-defined in the spec.
+ // See https://github.com/w3c/edit-context/issues/88
+ // test(function() {
+ // const editContext = new EditContext();
+ // assert_not_equals(editContext, null);
+ // editContext.updateText(0, 3, "foo");
+ // assert_equals(editContext.text, "foo");
+ // assert_throws_dom("IndexSizeError", function() { editContext.updateSelection(10, 0); });
+ // assert_equals(editContext.selectionStart, 0);
+ // assert_equals(editContext.selectionEnd, 0);
+ // assert_throws_dom("IndexSizeError", function() { editContext.updateText(10, 1, "h"); });
+ // assert_equals(editContext.text, "foo");
+ // }, 'Testing EditContext update text and selection with invalid values');
+
+ test(function() {
+ const editContext = new EditContext();
+ assert_not_equals(editContext, null);
+ editContext.updateText(0, 3, "foo");
+ assert_equals(editContext.text, "foo");
+ editContext.updateSelection(3, 0);
+ assert_equals(editContext.selectionStart, 3);
+ assert_equals(editContext.selectionEnd, 0);
+ }, 'EditContext should allow a backwards selection');
+ </script>
+</body>
+</html>