summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/selection/bidi/modify.tentative.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/selection/bidi/modify.tentative.html')
-rw-r--r--testing/web-platform/tests/selection/bidi/modify.tentative.html60
1 files changed, 60 insertions, 0 deletions
diff --git a/testing/web-platform/tests/selection/bidi/modify.tentative.html b/testing/web-platform/tests/selection/bidi/modify.tentative.html
new file mode 100644
index 0000000000..6029cf423a
--- /dev/null
+++ b/testing/web-platform/tests/selection/bidi/modify.tentative.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Selection#modify bidi tests</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+
+<div id="container">
+ <div title="LTR text">Hello World</div>
+ <div title="RTL text">مرحبا عالم</div>
+ <div title="RTL+LTR text">مرحبا عالم Hello World</div>
+ <div title="LTR+RTL text">Hello World مرحبا عالم</div>
+ <div title="LTR+RTL+LTR text">Hello World مرحبا عالم Hello World</div>
+ <div title="RTL+LTR+RTL text">مرحبا عالم Hello World مرحبا عالم</div>
+</div>
+
+<script>
+/**
+ * @param {"ltr" | "rtl"} bidi
+ * @param {"left" | "right"} direction
+ * @param {number} length
+ */
+function getExpectedOffset(bidi, direction, length) {
+ const isLtr = bidi === "ltr";
+ const toLeft = direction === "left";
+ return isLtr === toLeft ? 0 : length;
+}
+
+function runTest(div, direction, bidi, postfix = "") {
+ test(() => {
+ div.dir = bidi;
+
+ selection.collapse(div);
+ selection.modify("extend", direction, "lineboundary");
+
+ const offset = getExpectedOffset(
+ bidi, direction,
+ div.childNodes[0].textContent.length
+ );
+
+ assert_equals(selection.focusOffset, offset);
+ }, `${div.title} with ${direction} direction in ${bidi} context${postfix}`);
+}
+
+const selection = getSelection();
+for (const bidi of ["ltr", "rtl"]) {
+ for (const direction of ["left", "right"]) {
+ for (const div of container.children) {
+ runTest(div, direction, bidi)
+ }
+ }
+}
+
+// Gecko treats morphed LTR contexts differently from native LTR context
+// @see https://searchfox.org/mozilla-central/rev/35d927df97900a57ecb562ad13909e392440b0fb/dom/base/Document.h#981-987
+for (const direction of ["left", "right"]) {
+ for (const div of container.children) {
+ runTest(div, direction, "ltr", " (which was previously rtl)")
+ }
+}
+</script>