summaryrefslogtreecommitdiffstats
path: root/editor/libeditor/tests/test_cut_copy_delete_command_enabled.html
diff options
context:
space:
mode:
Diffstat (limited to 'editor/libeditor/tests/test_cut_copy_delete_command_enabled.html')
-rw-r--r--editor/libeditor/tests/test_cut_copy_delete_command_enabled.html227
1 files changed, 227 insertions, 0 deletions
diff --git a/editor/libeditor/tests/test_cut_copy_delete_command_enabled.html b/editor/libeditor/tests/test_cut_copy_delete_command_enabled.html
new file mode 100644
index 0000000000..9e70178b11
--- /dev/null
+++ b/editor/libeditor/tests/test_cut_copy_delete_command_enabled.html
@@ -0,0 +1,227 @@
+<!DOCTYPE HTML>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1067255
+-->
+
+<head>
+ <title>Test for enabled state of cut/copy/delete commands</title>
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+ <script src="/tests/SimpleTest/EventUtils.js"></script>
+</head>
+
+<body onload="doTest();">
+ <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1067255">Mozilla Bug 1067255</a>
+
+ <pre id="test">
+ <script type="application/javascript">
+ /** Test for Bug 1067255 **/
+ SimpleTest.waitForExplicitFinish();
+
+ function doTest() {
+ var text = $("text-field");
+ var textWithHandlers = $("text-field-2");
+ var password = $("password-field");
+ var passwordWithHandlers = $("password-field-2");
+ var textWithParentHandlers = $("text-field-3");
+ var passwordWithParentHandlers = $("password-field-3");
+ var textarea1 = $("text-area-1");
+ var textarea2 = $("text-area-2");
+ var textarea3 = $("text-area-3");
+
+ var editor1 = SpecialPowers.wrap(text).editor;
+ var editor2 = SpecialPowers.wrap(password).editor;
+ var editor3 = SpecialPowers.wrap(textWithHandlers).editor;
+ var editor4 = SpecialPowers.wrap(passwordWithHandlers).editor;
+ var editor5 = SpecialPowers.wrap(textWithParentHandlers).editor;
+ var editor6 = SpecialPowers.wrap(passwordWithParentHandlers).editor;
+ var editor7 = SpecialPowers.wrap(textarea1).editor;
+ var editor8 = SpecialPowers.wrap(textarea2).editor;
+ var editor9 = SpecialPowers.wrap(textarea3).editor;
+
+ text.focus();
+
+ ok(!editor1.canCopy(),
+ "nsIEditor.canCopy() should return false in <input type=text> with no selection");
+ ok(!editor1.canCut(),
+ "nsIEditor.canCut() should return false in <input type=text> with no selection");
+ ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
+ "cmd_copy command should be disabled in <input type=text> with no selection");
+ ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
+ "cmd_cut command should be disabled in <input type=text> with no selection");
+ ok(!SpecialPowers.isCommandEnabled(window, "cmd_delete"),
+ "cmd_delete command should be disabled in <input type=text> with no selection");
+
+ text.select();
+
+ ok(editor1.canCopy(),
+ "nsIEditor.canCopy() should return true in <input type=text> with selection");
+ ok(editor1.canCut(),
+ "nsIEditor.canCut() should return true in <input type=text> with selection");
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
+ "cmd_copy command should be enabled in <input type=text> with selection");
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
+ "cmd_cut command should be enabled in <input type=text> with selection");
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
+ "cmd_delete command should be enabled in <input type=text> with selection");
+
+ password.focus();
+
+ ok(!editor2.canCopy(),
+ "nsIEditor.canCopy() should return false in <input type=password> with no selection");
+ ok(!editor2.canCut(),
+ "nsIEditor.canCut() should return false in <input type=password> with no selection");
+ ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
+ "cmd_copy command should be disabled in <input type=password> with no selection");
+ ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
+ "cmd_cut command should be disabled in <input type=password> with no selection");
+ ok(!SpecialPowers.isCommandEnabled(window, "cmd_delete"),
+ "cmd_delete command should be disabled in <input type=password> with no selection");
+
+ // Copy and cut commands don't do anything on password fields by default,
+ // so they remain disabled even when there is a selection...
+ password.select();
+
+ ok(!editor2.canCopy(),
+ "nsIEditor.canCopy() should return false in <input type=password> with selection");
+ ok(!editor2.canCut(),
+ "nsIEditor.canCut() should return false in <input type=password> with selection");
+ ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
+ "cmd_copy command should be disabled in <input type=password> with selection");
+ ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
+ "cmd_cut command should be disabled in <input type=password> with selection");
+ // Delete, on the other hand, does apply to password fields.
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
+ "cmd_delete command should be enabled in <input type=password with selection>");
+
+ // ...but webpages can hook up event handlers to cut/copy events, so we have to
+ // keep the cut and copy commands enabled if event handlers are attached,
+ // for both regular edit fields and password fields (even when there's no
+ // selection, as we don't know what the handler might want to do).
+ textWithHandlers.focus();
+
+ ok(editor3.canCopy(),
+ "nsIEditor.canCopy() should return true in <input type=text> with event handler");
+ ok(editor3.canCut(),
+ "nsIEditor.canCut() should return true in <input type=text> with event handler");
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
+ "cmd_copy command should be enabled in <input type=text> with event handler");
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
+ "cmd_cut command should be enabled in <input type=text> with event handler");
+
+ passwordWithHandlers.focus();
+
+ ok(editor4.canCopy(),
+ "nsIEditor.canCopy() should return true in <input type=password> with event handler");
+ ok(editor4.canCut(),
+ "nsIEditor.canCut() should return true in <input type=password> with event handler");
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
+ "cmd_copy command should be enabled in <input type=password> with event handler");
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
+ "cmd_cut command should be enabled in <input type=password> with event handler");
+
+ // Also check that the commands are enabled if there's a handler on a parent element.
+ textWithParentHandlers.focus();
+
+ ok(editor5.canCopy(),
+ "nsIEditor.canCopy() should return true in <input type=text> with event handler on an ancestor");
+ ok(editor5.canCut(),
+ "nsIEditor.canCut() should return true in <input type=text> with event handler on an ancestor");
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
+ "cmd_copy command should be enabled in <input type=text> with event handler on an ancestor");
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
+ "cmd_cut command should be enabled in <input type=text> with event handler on an ancestor");
+
+ passwordWithParentHandlers.focus();
+
+ ok(editor6.canCopy(),
+ "nsIEditor.canCopy() should return true in <input type=password> with event handler on an ancestor");
+ ok(editor6.canCut(),
+ "nsIEditor.canCut() should return true in <input type=password> with event handler on an ancestor");
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
+ "cmd_copy command should be enabled in <input type=password> with event handler on an ancestor");
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
+ "cmd_cut command should be enabled in <input type=password> with event handler on an ancestor");
+
+ // TEXTAREA tests
+
+ textarea1.focus();
+
+ ok(!editor7.canCopy(),
+ "nsIEditor.canCopy() should return false in <textarea> with no selection");
+ ok(!editor7.canCut(),
+ "nsIEditor.canCut() should return false in <textarea> with no selection");
+ ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
+ "cmd_copy command should be disabled in <textarea> with no selection");
+ ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
+ "cmd_cut command should be disabled in <textarea> with no selection");
+ ok(!SpecialPowers.isCommandEnabled(window, "cmd_delete"),
+ "cmd_delete command should be disabled in <textarea> with no selection");
+
+ textarea1.select();
+
+ ok(editor7.canCopy(),
+ "nsIEditor.canCopy() should return true in <textarea> with selection");
+ ok(editor7.canCut(),
+ "nsIEditor.canCut() should return true in <textarea> with selection");
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
+ "cmd_copy command should be enabled in <textarea> with selection");
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
+ "cmd_cut command should be enabled in <textarea> with selection");
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_delete"),
+ "cmd_delete command should be enabled in <textarea> with selection");
+
+ textarea2.focus();
+
+ ok(!editor8.canCopy(),
+ "nsIEditor.canCopy() should return false in <textarea> with only a 'cut' handler");
+ ok(editor8.canCut(),
+ "nsIEditor.canCut() should return true in <textarea> with only a 'cut' handler");
+ ok(!SpecialPowers.isCommandEnabled(window, "cmd_copy"),
+ "cmd_copy command should be disabled in <textarea> with only a 'cut' handler");
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_cut"),
+ "cmd_cut command should be enabled in <textarea> with only a 'cut' handler");
+ ok(!SpecialPowers.isCommandEnabled(window, "cmd_delete"),
+ "cmd_delete command should be disabled in <textarea> with only a 'cut' handler");
+
+ textarea3.focus();
+
+ ok(editor9.canCopy(),
+ "nsIEditor.canCopy() should return true in <textarea> with only a 'copy' handler on ancestor");
+ ok(!editor9.canCut(),
+ "nsIEditor.canCut() should return false in <textarea> with only a 'copy' handler on ancestor");
+ ok(SpecialPowers.isCommandEnabled(window, "cmd_copy"),
+ "cmd_copy command should be enabled in <textarea> with only a 'copy' handler on ancestor");
+ ok(!SpecialPowers.isCommandEnabled(window, "cmd_cut"),
+ "cmd_cut command should be disabled in <textarea> with only a 'copy' handler on ancestor");
+ ok(!SpecialPowers.isCommandEnabled(window, "cmd_delete"),
+ "cmd_delete command should be disabled in <textarea> with only a 'copy' handler on ancestor");
+
+ SimpleTest.finish();
+ }
+ </script>
+ </pre>
+
+ <input type="text" value="Gonzo says hi" id="text-field" />
+ <input type="password" value="Jan also" id="password-field" />
+ <input type="text" value="Hi says Gonzo" id="text-field-2" oncut="cut()" oncopy="copy()" ondelete="delete()"/>
+ <input type="password" value="Also Jan" id="password-field-2" oncut="cut()" oncopy="copy()" ondelete="delete()"/>
+ <div oncut="cut()">
+ <ul oncopy="copy()">
+ <li><input type="text" value="Hi again" id="text-field-3"/></li>
+ <li><input type="password" value="And again, hi" id="password-field-3"/></li>
+ </ul>
+ </div>
+ <textarea id="text-area-1">textarea</textarea>
+ <textarea oncut="cut()" id="text-area-2">textarea with cut handler</textarea>
+ <div oncopy="copy()">
+ <blockquote>
+ <p><textarea id="text-area-3">textarea with copy handler on parent</textarea></p>
+ </blockquote>
+ </div>
+</body>
+</html>