diff options
Diffstat (limited to '')
-rw-r--r-- | editor/libeditor/tests/test_password_input_with_unmasked_range.html | 417 |
1 files changed, 417 insertions, 0 deletions
diff --git a/editor/libeditor/tests/test_password_input_with_unmasked_range.html b/editor/libeditor/tests/test_password_input_with_unmasked_range.html new file mode 100644 index 0000000000..205884219b --- /dev/null +++ b/editor/libeditor/tests/test_password_input_with_unmasked_range.html @@ -0,0 +1,417 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for inputting new text while there is unmasked range</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"/> +</head> +<body> +<input type="password" value="012345"> + +<script> +SimpleTest.waitForExplicitFinish(); +SimpleTest.waitForFocus(async () => { + let input = document.getElementsByTagName("input")[0]; + let editor = SpecialPowers.wrap(input).editor; + + async function doTest(aDelay) { + await SpecialPowers.pushPrefEnv({ + set: [["editor.password.mask_delay", aDelay]], + }); + input.focus(); + input.value = "012345"; + + // Setting value + editor.unmask(3, 4); + input.value = "abcdef"; + is(editor.unmaskedStart, 0, + "delay=" + aDelay + ": Setting value should mask all characters (start)"); + is(editor.unmaskedEnd, 6, + "delay=" + aDelay + ": Setting value should mask all characters (end)"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after setting value"); + editor.unmask(3, 4); + input.value = "abcdef"; + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Setting same value shouldn't change unmasked range (start)"); + is(editor.unmaskedEnd, 4, + "delay=" + aDelay + ": Setting same value shouldn't change unmasked range (end)"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after setting same value"); + input.value = ""; + is(editor.unmaskedStart, 0, + "delay=" + aDelay + ": Setting empty value should collapse unmasked range (start)"); + is(editor.unmaskedEnd, 0, + "delay=" + aDelay + ": Setting empty value should collapse unmasked range (end)"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after setting empty value"); + input.value = "abcdef"; + is(editor.unmaskedStart, 0, + "delay=" + aDelay + ": Setting empty field to new value should unmask all (start)"); + is(editor.unmaskedEnd, 6, + "delay=" + aDelay + ": Setting empty field to new value should unmask all (end)"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after setting empty field to new value"); + + // Simply typing a character + editor.unmask(3, 4); + input.setSelectionRange(3, 3); + synthesizeKey("1"); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Inserting character at start of unmasked range should expand the range (start)"); + is(editor.unmaskedEnd, 5, + "delay=" + aDelay + ": Inserting character at start of unmasked range should expand the range (end)"); + is(input.value, "abc1def", + "delay=" + aDelay + ": Inserting character at start of unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after inserting character at start of unmasked range"); + + editor.unmask(3, 5); + synthesizeKey("2"); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Inserting character in the unmasked range should expand the range (start)"); + is(editor.unmaskedEnd, 6, + "delay=" + aDelay + ": Inserting character in the unmasked range should expand the range (end)"); + is(input.value, "abc12def", + "delay=" + aDelay + ": Inserting character in the unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after inserting character in the unmasked range"); + + editor.unmask(3, 6); + input.setSelectionRange(6, 6); + synthesizeKey("3"); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Inserting character at end of unmasked range should expand the range (start)"); + is(editor.unmaskedEnd, 7, + "delay=" + aDelay + ": Inserting character at end of unmasked range should expand the range (end)"); + is(input.value, "abc12d3ef", + "delay=" + aDelay + ": Inserting character at end of unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after inserting character at end of unmasked range"); + + editor.unmask(3, 4); + input.setSelectionRange(2, 2); + synthesizeKey("4"); + is(editor.unmaskedStart, 2, + "delay=" + aDelay + ": Inserting character before the unmasked range should expand the range (start)"); + is(editor.unmaskedEnd, 5, + "delay=" + aDelay + ": Inserting character before the unmasked range should expand the range (end)"); + is(input.value, "ab4c12d3ef", + "delay=" + aDelay + ": Inserting character before the unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after inserting character before the unmasked range"); + + editor.unmask(2, 5); + input.setSelectionRange(6, 6); + synthesizeKey("5"); + is(editor.unmaskedStart, 2, + "delay=" + aDelay + ": Inserting character after the unmasked range should expand the range (start)"); + is(editor.unmaskedEnd, 7, + "delay=" + aDelay + ": Inserting character after the unmasked range should expand the range (end)"); + is(input.value, "ab4c125d3ef", + "delay=" + aDelay + ": Inserting character after the unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after inserting character after the unmasked range"); + + // Simply removing characters + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(3, 3); + editor.deleteSelection(editor.eNext, editor.eStrip); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Removing first character of unmasked range should shrink the range (start)"); + is(editor.unmaskedEnd, 5, + "delay=" + aDelay + ": Removing first character of unmasked range should shrink the range (end)"); + is(input.value, "abcefgh", + "delay=" + aDelay + ": Removing first character of unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after removing first character of unmasked range"); + + editor.unmask(3, 5); + editor.deleteSelection(editor.ePrevious, editor.eStrip); + is(editor.unmaskedStart, 2, + "delay=" + aDelay + ": Removing previous character of unmasked range should move the range (start)"); + is(editor.unmaskedEnd, 4, + "delay=" + aDelay + ": Removing previous character of unmasked range should move the range (end)"); + is(input.value, "abefgh", + "delay=" + aDelay + ": Removing previous character of unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after removing previous character of unmasked range"); + + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(6, 6); + editor.deleteSelection(editor.ePrevious, editor.eStrip); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Removing last character of unmasked range should shrink the range (start)"); + is(editor.unmaskedEnd, 5, + "delay=" + aDelay + ": Removing last character of unmasked range should shrink the range (end)"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after removing last character of unmasked range should shrink the range"); + + editor.unmask(3, 5); + editor.deleteSelection(editor.eNext, editor.eStrip); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Removing next character of unmasked range shouldn't change the range (start)"); + is(editor.unmaskedEnd, 5, + "delay=" + aDelay + ": Removing next character of unmasked range shouldn't change the range (end)"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after removing next character of unmasked range shouldn't change the range"); + + input.value = "abcdef"; + editor.unmask(3, 6); + input.setSelectionRange(4, 4); + editor.deleteSelection(editor.eNext, editor.eStrip); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Removing middle character of unmasked range should shrink the range (start)"); + is(editor.unmaskedEnd, 5, + "delay=" + aDelay + ": Removing middle character of unmasked range should shrink the range (end)"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after removing middle character of unmasked range should shrink the range"); + + // Removing selection + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(3, 4); + editor.deleteSelection(editor.eNone, editor.eStrip); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Removing selected first character of unmasked range should shrink the range (start)"); + is(editor.unmaskedEnd, 5, + "delay=" + aDelay + ": Removing selected first character of unmasked range should shrink the range (end)"); + is(input.value, "abcefgh", + "delay=" + aDelay + ": Removing selected first character of unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after removing selected first character of unmasked range"); + + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(2, 3); + editor.deleteSelection(editor.eNone, editor.eStrip); + is(editor.unmaskedStart, 2, + "delay=" + aDelay + ": Removing selected previous character of unmasked range should move the range (start)"); + is(editor.unmaskedEnd, 5, + "delay=" + aDelay + ": Removing selected previous character of unmasked range should move the range (end)"); + is(input.value, "abdefgh", + "delay=" + aDelay + ": Removing selected previous character of unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after removing selected previous character of unmasked range"); + + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(5, 6); + editor.deleteSelection(editor.eNone, editor.eStrip); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Removing selected last character of unmasked range should shrink the range (start)"); + is(editor.unmaskedEnd, 5, + "delay=" + aDelay + ": Removing selected last character of unmasked range should shrink the range (end)"); + is(input.value, "abcdegh", + "delay=" + aDelay + ": Removing selected last character of unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after removing selected last character of unmasked range"); + + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(6, 7); + editor.deleteSelection(editor.eNone, editor.eStrip); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Removing selected next character of unmasked range should keep the range (start)"); + is(editor.unmaskedEnd, 6, + "delay=" + aDelay + ": Removing selected next character of unmasked range should keep the range (end)"); + is(input.value, "abcdefh", + "delay=" + aDelay + ": Removing selected next character of unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after removing selected next character of unmasked range"); + + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(4, 5); + editor.deleteSelection(editor.eNone, editor.eStrip); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Removing selected middle character of unmasked range should shrink the range (start)"); + is(editor.unmaskedEnd, 5, + "delay=" + aDelay + ": Removing selected middle character of unmasked range should shrink the range (end)"); + is(input.value, "abcdfgh", + "delay=" + aDelay + ": Removing selected middle character of unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after removing selected middle character of unmasked range"); + + // Replacing a character + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(3, 4); + synthesizeKey("0"); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Replacing first character of unmasked range should keep the range (start)"); + is(editor.unmaskedEnd, 6, + "delay=" + aDelay + ": Replacing first character of unmasked range should keep the range (end)"); + is(input.value, "abc0efgh", + "delay=" + aDelay + ": Replacing first character of unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after replacing first character of unmasked range"); + + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(2, 3); + synthesizeKey("0"); + is(editor.unmaskedStart, 2, + "delay=" + aDelay + ": Replacing previous character of unmasked range should expand the range (start)"); + is(editor.unmaskedEnd, 6, + "delay=" + aDelay + ": Replacing previous character of unmasked range should expand the range (end)"); + is(input.value, "ab0defgh", + "delay=" + aDelay + ": Replacing previous character of unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after replacing previous character of unmasked range"); + + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(5, 6); + synthesizeKey("0"); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Replacing last character of unmasked range should keep the range (start)"); + is(editor.unmaskedEnd, 6, + "delay=" + aDelay + ": Replacing last character of unmasked range should keep the range (end)"); + is(input.value, "abcde0gh", + "delay=" + aDelay + ": Replacing last character of unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after replacing last character of unmasked range"); + + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(6, 7); + synthesizeKey("0"); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Replacing next character of unmasked range should expand the range (start)"); + is(editor.unmaskedEnd, 7, + "delay=" + aDelay + ": Replacing next character of unmasked range should expand the range (end)"); + is(input.value, "abcdef0h", + "delay=" + aDelay + ": Replacing next character of unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after replacing next character of unmasked range"); + + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(4, 5); + synthesizeKey("0"); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Replacing middle character of unmasked range should keep the range (start)"); + is(editor.unmaskedEnd, 6, + "delay=" + aDelay + ": Replacing middle character of unmasked range should keep the range (end)"); + is(input.value, "abcd0fgh", + "delay=" + aDelay + ": Replacing middle character of unmasked range"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after replacing middle character of unmasked range"); + + // Replace part of the range + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(1, 4); + synthesizeKey("0"); + is(editor.unmaskedStart, 1, + "delay=" + aDelay + ": Replacing start edge of unmasked range should move and shrink the range (start) #1"); + is(editor.unmaskedEnd, 4, + "delay=" + aDelay + ": Replacing start edge of unmasked range should move and shrink the range (end) #1"); + is(input.value, "a0efgh", + "delay=" + aDelay + ": Replacing start edge of unmasked range #1"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after replacing start edge of unmasked range #1"); + + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(2, 5); + synthesizeKey("0"); + is(editor.unmaskedStart, 2, + "delay=" + aDelay + ": Replacing start edge of unmasked range should move and shrink the range (start) #2"); + is(editor.unmaskedEnd, 4, + "delay=" + aDelay + ": Replacing start edge of unmasked range should move and shrink the range (end) #2"); + is(input.value, "ab0fgh", + "delay=" + aDelay + ": Replacing start edge of unmasked range #2"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after replacing start edge of unmasked range #2"); + + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(4, 7); + synthesizeKey("0"); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Replacing end edge of unmasked range should shrink the range (start) #1"); + is(editor.unmaskedEnd, 5, + "delay=" + aDelay + ": Replacing end edge of unmasked range should shrink the range (end) #1"); + is(input.value, "abcd0h", + "delay=" + aDelay + ": Replacing end edge of unmasked range #1"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after replacing end edge of unmasked range #1"); + + input.value = "abcdefghi"; + editor.unmask(3, 6); + input.setSelectionRange(5, 8); + synthesizeKey("0"); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Replacing end edge of unmasked range should shrink the range (start) #2"); + is(editor.unmaskedEnd, 6, + "delay=" + aDelay + ": Replacing end edge of unmasked range should shrink the range (end) #2"); + is(input.value, "abcde0i", + "delay=" + aDelay + ": Replacing end edge of unmasked range #2"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after replacing end edge of unmasked range #2"); + + // Replaceing all of the range + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(3, 6); + synthesizeKey("0"); + is(editor.unmaskedStart, 3, + "delay=" + aDelay + ": Replacing all of unmasked range should shrink the range (start) #1"); + is(editor.unmaskedEnd, 4, + "delay=" + aDelay + ": Replacing all of unmasked range should shrink the range (end) #1"); + is(input.value, "abc0gh", + "delay=" + aDelay + ": Replacing all of unmasked range #1"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after replacing all of unmasked range #1"); + + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(2, 7); + synthesizeKey("0"); + is(editor.unmaskedStart, 2, + "delay=" + aDelay + ": Replacing all of unmasked range should shrink the range (start) #2"); + is(editor.unmaskedEnd, 3, + "delay=" + aDelay + ": Replacing all of unmasked range should shrink the range (end) #2"); + is(input.value, "ab0h", + "delay=" + aDelay + ": Replacing all of unmasked range #2"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after replacing all of unmasked range #2"); + + // Removing all characters and type new character + input.value = "abcdefgh"; + editor.unmask(3, 6); + input.setSelectionRange(0, 8); + editor.deleteSelection(editor.eNone, editor.eStrip); + is(editor.unmaskedStart, 0, + "delay=" + aDelay + ": Removing all characters should shrink the range (start)"); + is(editor.unmaskedEnd, 0, + "delay=" + aDelay + ": Removing all characters should shrink the range (end)"); + is(input.value, "", + "delay=" + aDelay + ": Removing all characters"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after removing all characters"); + synthesizeKey("0"); + is(editor.unmaskedStart, 0, + "delay=" + aDelay + ": Typing first character should expand unmasked range (start)"); + is(editor.unmaskedEnd, 1, + "delay=" + aDelay + ": Typing first character should expand unmasked range (end)"); + is(input.value, "0", + "delay=" + aDelay + ": Typing first character"); + ok(!editor.autoMaskingEnabled, + "delay=" + aDelay + ": auto masking shouldn't be enabled after typing first character"); + } + + await doTest(0); + await doTest(600); + + SimpleTest.finish(); +}); +</script> +</pre> +</body> +</html> |