summaryrefslogtreecommitdiffstats
path: root/layout/generic/test/test_selection_preventDefault.html
diff options
context:
space:
mode:
Diffstat (limited to 'layout/generic/test/test_selection_preventDefault.html')
-rw-r--r--layout/generic/test/test_selection_preventDefault.html173
1 files changed, 173 insertions, 0 deletions
diff --git a/layout/generic/test/test_selection_preventDefault.html b/layout/generic/test/test_selection_preventDefault.html
new file mode 100644
index 0000000000..66a33896fa
--- /dev/null
+++ b/layout/generic/test/test_selection_preventDefault.html
@@ -0,0 +1,173 @@
+<!DOCTYPE>
+<html>
+<head>
+<title>selection preventDefault test</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<script src="/tests/SimpleTest/EventUtils.js"></script>
+<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+
+<style type="text/css">
+ #fixedDiv1 {
+ position: fixed;
+ right: 0;
+ overflow: scroll;
+ width: 200px;
+ top: 0;
+ }
+ input {
+ font-size: 16px;
+ height: 16px;
+ width: 80px;
+ margin: 0;
+ padding: 0;
+ -moz-appearance: none;
+ }
+</style>
+
+</head>
+<body>
+<input id="input" type="text" value="iiiiiiiii iiiiiiiii iiiiiiiii">
+<div id="fixedDiv1" class="testingDiv">
+dddddd dddddd dddddd
+</div>
+<pre id="test">
+<script class="testbody" type="text/javascript">
+
+var fixedDiv1 = document.getElementById("fixedDiv1");
+var input = document.getElementById("input");
+
+function test()
+{
+ function getSelectionForEditor(aEditorElement)
+ {
+ return SpecialPowers.wrap(aEditorElement).editor.selection;
+ }
+
+ function clear()
+ {
+ var sel = window.getSelection();
+ if (sel.rangeCount > 0)
+ sel.collapseToEnd();
+ sel = getSelectionForEditor(input);
+ if (sel.rangeCount > 0)
+ sel.collapseToEnd();
+ }
+
+ const kFalse = 0;
+ const kTrue = 1;
+ const kToDo = 2;
+
+ function check(aFixedDiv1ShouldBeSelected,
+ aInputShouldBeSelected,
+ aTestingDescription)
+ {
+ function checkCharacter(aSelectedText,
+ aShouldBeIncludedCharacter,
+ aSouldBeSelected,
+ aElementName)
+ {
+ var boolvalue = aSouldBeSelected & kTrue;
+ var f = aSouldBeSelected & kToDo ? todo : ok;
+ var str = aSelectedText.replace('\n', '\\n');
+ if (boolvalue) {
+ f(aSelectedText.includes(aShouldBeIncludedCharacter),
+ "The contents of " + aElementName +
+ " aren't selected (" + aTestingDescription +
+ "): Selected String: \"" + str + "\"");
+ } else {
+ f(!aSelectedText.includes(aShouldBeIncludedCharacter),
+ "The contents of " + aElementName +
+ " are selected (" + aTestingDescription +
+ "): Selected String: \"" + str + "\"");
+ }
+ }
+
+ var sel = window.getSelection().toString();
+ checkCharacter(sel, "d", aFixedDiv1ShouldBeSelected, "fixedDiv1");
+
+ // input contents must not be included on the parent
+ // selection.
+ checkCharacter(sel, "i", false, "input (checking on parent)");
+
+ var selInput = getSelectionForEditor(input).toString();
+ checkCharacter(selInput, "i", aInputShouldBeSelected, "input");
+ }
+
+ function eventHandler(evt) {
+ evt.preventDefault();
+ }
+
+ // prevent default action on mousedown should prevent selection
+ fixedDiv1.addEventListener("mousedown", eventHandler);
+ synthesizeMouse(fixedDiv1, 30, 5, { type: "mousedown" });
+ synthesizeMouse(fixedDiv1, 40, 5, { type: "mousemove" });
+ synthesizeMouse(fixedDiv1, 40, 5, { type: "mouseup" });
+ check(kFalse, kFalse, "fixedDiv1-fixedDiv1-mousedown");
+ clear();
+
+ input.addEventListener("mousedown", eventHandler);
+ synthesizeMouse(input, 20, 5, { type: "mousedown" });
+ synthesizeMouse(input, 40, 5, { type: "mousemove" });
+ synthesizeMouse(input, 40, 5, { type: "mouseup" });
+ check(kFalse, kFalse, "input-input-mousedown");
+ clear();
+
+ // clean up mousedown listener
+ [fixedDiv1, input].forEach(function(element) {
+ element.removeEventListener("mousedown", eventHandler);
+ });
+
+ // prevent default action on mouseup should not affect the selection state
+ fixedDiv1.addEventListener("mouseup", eventHandler);
+ synthesizeMouse(fixedDiv1, 30, 5, { type: "mousedown" });
+ synthesizeMouse(fixedDiv1, 40, 5, { type: "mousemove" });
+ synthesizeMouse(fixedDiv1, 40, 5, { type: "mouseup" });
+ check(kTrue, kFalse, "fixedDiv1-fixedDiv1-mouseup");
+ clear();
+
+ input.addEventListener("mouseup", eventHandler);
+ synthesizeMouse(input, 20, 5, { type: "mousedown" });
+ synthesizeMouse(input, 40, 5, { type: "mousemove" });
+ synthesizeMouse(input, 40, 5, { type: "mouseup" });
+ check(kFalse, kTrue, "input-input-mouseup");
+ clear();
+
+ [fixedDiv1, input].forEach(function(element) {
+ element.removeEventListener("mouseup", eventHandler);
+ });
+
+ // touchmove event should not affect the selection state
+ synthesizeTouch(fixedDiv1, 30, 5, { type: "touchstart" });
+ synthesizeTouch(fixedDiv1, 40, 5, { type: "touchmove" });
+ check(kFalse, kFalse, "fixedDiv1-fixedDiv1-touchmove");
+ synthesizeTouch(fixedDiv1, 40, 5, { type: "touchend" });
+ clear();
+
+ synthesizeTouch(input, 20, 5, { type: "touchstart" });
+ synthesizeTouch(input, 40, 5, { type: "touchmove" });
+ check(kFalse, kFalse, "input-input-touchmove");
+ synthesizeTouch(input, 40, 5, { type: "touchend" });
+ clear();
+
+ fixedDiv1.addEventListener("touchmove", eventHandler);
+ synthesizeTouch(fixedDiv1, 30, 5, { type: "touchstart" });
+ synthesizeTouch(fixedDiv1, 40, 5, { type: "touchmove" });
+ check(kFalse, kFalse, "fixedDiv1-fixedDiv1-touchmove-preventDefault");
+ synthesizeTouch(fixedDiv1, 40, 5, { type: "touchend" });
+ clear();
+
+ input.addEventListener("touchmove", eventHandler);
+ synthesizeTouch(input, 20, 5, { type: "touchstart" });
+ synthesizeTouch(input, 40, 5, { type: "touchmove" });
+ check(kFalse, kFalse, "input-input-touchmove-preventDefault");
+ synthesizeTouch(input, 40, 5, { type: "touchend" });
+ clear();
+
+ SimpleTest.finish();
+}
+window.onload = function() { setTimeout(test, 0); };
+SimpleTest.waitForExplicitFinish();
+</script>
+</pre>
+</body>
+</html>