Index: chrome/browser/resources/chromeos/chromevox/common/editable_text_test.js |
diff --git a/chrome/browser/resources/chromeos/chromevox/common/editable_text_test.js b/chrome/browser/resources/chromeos/chromevox/common/editable_text_test.js |
deleted file mode 100644 |
index 6da825d316376ee216fd494a1e0c42d099a95348..0000000000000000000000000000000000000000 |
--- a/chrome/browser/resources/chromeos/chromevox/common/editable_text_test.js |
+++ /dev/null |
@@ -1,670 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// Include test fixture. |
-GEN_INCLUDE(['../testing/chromevox_unittest_base.js']); |
- |
-/** |
- * A TTS class implementing speak and stop methods intended only for testing. |
- * @constructor |
- * @implements cvox.TtsInterface |
- */ |
-function TestTts() { |
- this.strings = []; |
-} |
- |
-/** |
- * The strings that were spoken since the last call to get(). |
- * @type {Array.<string>} |
- */ |
-TestTts.prototype.strings; |
- |
-/** |
- * Returns the list of strings spoken since the last time this method was |
- * called, and then clears the list. |
- * @return {Array.<string>} The list of strings. |
- */ |
-TestTts.prototype.get = function() { |
- var result = this.strings; |
- this.strings = []; |
- return result; |
-}; |
- |
-/** @override */ |
-TestTts.prototype.speak = function(text, queueMode, properties) { |
- this.strings.push(text); |
-}; |
- |
-/** @override */ |
-TestTts.prototype.isSpeaking = function() { |
- return false; |
-}; |
- |
-/** @override */ |
-TestTts.prototype.stop = function() { |
- // Do nothing. |
-}; |
- |
-/** @override */ |
-TestTts.prototype.increaseOrDecreaseProperty = |
- function(propertyName, increase) { |
- // Do nothing. |
-}; |
- |
-/** |
- * Stores the last braille content. |
- * @constructor |
- * @implements cvox.BrailleInterface |
- */ |
-function TestBraille() { |
- this.content = null; |
-} |
- |
-/** @override */ |
-TestBraille.prototype.write = function(params) { |
- this.content = params; |
-}; |
- |
-/** |
- * Asserts the current braille content. |
- * |
- * @param {string} text Braille text. |
- * @param {number=} opt_start Selection start. |
- * @param {number=} opt_end Selection end. |
- */ |
-TestBraille.assertContent = function(text, opt_start, opt_end) { |
- var c = cvox.ChromeVox.braille.content; |
- assertTrue(c != null); |
- opt_start = opt_start !== undefined ? opt_start : -1; |
- opt_end = opt_end !== undefined ? opt_end : opt_start; |
- assertEquals(text, c.text.toString()); |
- assertEquals(opt_start, c.startIndex); |
- assertEquals(opt_end, c.endIndex); |
-}; |
- |
-/** |
- * Test fixture. |
- * @constructor |
- * @extends {ChromeVoxUnitTestBase} |
- */ |
-function CvoxEditableTextUnitTest() {} |
- |
-CvoxEditableTextUnitTest.prototype = { |
- __proto__: ChromeVoxUnitTestBase.prototype, |
- |
- /** @override */ |
- closureModuleDeps: [ |
- 'cvox.ChromeVoxEditableHTMLInput', |
- 'cvox.ChromeVoxEditableTextBase', |
- 'cvox.ChromeVoxEventWatcher', |
- 'cvox.TextChangeEvent', |
- 'cvox.TtsInterface', |
- 'cvox.TypingEcho', |
- ], |
- |
- /** @override */ |
- setUp: function() { |
- // TODO: These tests are all assuming we used the IBeam cursor. |
- // We need to add coverage for block cursor. |
- cvox.ChromeVoxEditableTextBase.useIBeamCursor = true; |
- cvox.ChromeVox.typingEcho = cvox.TypingEcho.CHARACTER_AND_WORD; |
- cvox.ChromeVoxEditableTextBase.eventTypingEcho = false; |
- cvox.ChromeVox.braille = new TestBraille(); |
- |
- /** Simple mock. */ |
- cvox.ChromeVox.msgs = {}; |
- |
- /** |
- * Simply return the message id. |
- * @param {string} msg Message id. |
- * @return {string} Message id. |
- */ |
- cvox.ChromeVox.msgs.getMsg = function(msg) { |
- return msg; |
- }; |
- }, |
- |
- /** |
- * Sets up for a cursor movement test. |
- * @param {string} tagName Desired tag name, "input" or "textarea". |
- * @return {Object} object containing the editable element, and functions |
- * to prepare, run the test, and tear down. |
- * @private |
- */ |
- setUpForCursorTest_: function(tagName) { |
- var element, editable; |
- switch (tagName) { |
- case 'input': |
- element = document.createElement('input'); |
- editable = new cvox.ChromeVoxEditableHTMLInput(element, new TestTts()); |
- break; |
- case 'textarea': |
- element = document.createElement('textarea'); |
- editable = new cvox.ChromeVoxEditableTextArea(element, new TestTts()); |
- break; |
- default: |
- throw 'invalid tagName in setUpForCursorTest_'; |
- } |
- document.body.appendChild(element); |
- element.focus(); |
- |
- var expect = function(str) { |
- assertEquals(element.selectionStart, element.selectionEnd); |
- assertEquals(str, element.value.substring(0, element.selectionStart) + |
- '|' + element.value.substring(element.selectionEnd)); |
- }; |
- return { |
- editable: editable, |
- expect: expect, |
- prepare: function(str) { |
- var position = str.indexOf('|'); |
- var value = str.substring(0, position) + str.substring(position + 1); |
- element.value = value; |
- element.selectionStart = element.selectionEnd = position; |
- editable.update(true /* triggeredByUser */); |
- expect(str); |
- }, |
- tearDown: function() { |
- document.body.removeChild(element); |
- } |
- }; |
- } |
-}; |
- |
-TEST_F('CvoxEditableTextUnitTest', 'CursorNavigation', function() { |
- var tts = new TestTts(); |
- var obj = new cvox.ChromeVoxEditableTextBase('Hello', 0, 0, false, tts); |
- |
- obj.changed(new cvox.TextChangeEvent('Hello', 1, 1)); |
- obj.changed(new cvox.TextChangeEvent('Hello', 2, 2)); |
- obj.changed(new cvox.TextChangeEvent('Hello', 3, 3)); |
- obj.changed(new cvox.TextChangeEvent('Hello', 4, 4)); |
- obj.changed(new cvox.TextChangeEvent('Hello', 5, 5)); |
- obj.changed(new cvox.TextChangeEvent('Hello', 4, 4)); |
- obj.changed(new cvox.TextChangeEvent('Hello', 3, 3)); |
- assertEqualStringArrays(['H', 'e', 'l', 'l', 'o', |
- 'o', 'l'], tts.get()); |
- obj.changed(new cvox.TextChangeEvent('Hello', 0, 0)); |
- obj.changed(new cvox.TextChangeEvent('Hello', 5, 5)); |
- assertEqualStringArrays(['Hel', 'Hello'], tts.get()); |
-}); |
- |
-/** Test typing words. */ |
-TEST_F('CvoxEditableTextUnitTest', 'TypingWords', function() { |
- var tts = new TestTts(); |
- var obj = new cvox.ChromeVoxEditableTextBase('', 0, 0, false, tts); |
- obj.changed(new cvox.TextChangeEvent('H', 1, 1)); |
- obj.changed(new cvox.TextChangeEvent('He', 2, 2)); |
- obj.changed(new cvox.TextChangeEvent('Hel', 3, 3)); |
- obj.changed(new cvox.TextChangeEvent('Hell', 4, 4)); |
- obj.changed(new cvox.TextChangeEvent('Hello', 5, 5)); |
- obj.changed(new cvox.TextChangeEvent('Hello,', 6, 6)); |
- obj.changed(new cvox.TextChangeEvent('Hello, ', 7, 7)); |
- obj.changed(new cvox.TextChangeEvent('Hello, W', 8, 8)); |
- obj.changed(new cvox.TextChangeEvent('Hello, Wo', 9, 9)); |
- obj.changed(new cvox.TextChangeEvent('Hello, Wor', 10, 10)); |
- obj.changed(new cvox.TextChangeEvent('Hello, Worl', 11, 11)); |
- obj.changed(new cvox.TextChangeEvent('Hello, World', 12, 12)); |
- obj.changed(new cvox.TextChangeEvent('Hello, World.', 13, 13)); |
- assertEqualStringArrays(['H', 'e', 'l', 'l', 'o', 'Hello,', |
- ' ', |
- 'W', 'o', 'r', 'l', 'd', 'World.'], |
- tts.get()); |
- |
- // Backspace |
- obj.changed(new cvox.TextChangeEvent('Hello, World', 12, 12)); |
- obj.changed(new cvox.TextChangeEvent('Hello, Worl', 11, 11)); |
- obj.changed(new cvox.TextChangeEvent('Hello, Wor', 10, 10)); |
- assertEqualStringArrays(['.', 'd', 'l'], tts.get()); |
- |
- // Forward-delete |
- obj.changed(new cvox.TextChangeEvent('Hello, Wor', 9, 9)); |
- obj.changed(new cvox.TextChangeEvent('Hello, Wor', 8, 8)); |
- obj.changed(new cvox.TextChangeEvent('Hello, Wor', 7, 7)); |
- obj.changed(new cvox.TextChangeEvent('Hello, or', 7, 7)); |
- obj.changed(new cvox.TextChangeEvent('Hello, r', 7, 7)); |
- obj.changed(new cvox.TextChangeEvent('Hello, ', 7, 7)); |
- assertEqualStringArrays(['r', 'o', 'W', 'W', 'o', 'r'], tts.get()); |
- |
- // Clear all |
- obj.changed(new cvox.TextChangeEvent('', 0, 0)); |
- assertEqualStringArrays(['Hello, , deleted'], tts.get()); |
- |
- // Paste / insert a whole word |
- obj.changed(new cvox.TextChangeEvent('Hello', 5, 5)); |
- assertEqualStringArrays(['Hello'], tts.get()); |
- obj.changed(new cvox.TextChangeEvent('Hello, World', 12, 12)); |
- assertEqualStringArrays([', World'], tts.get()); |
-}); |
- |
-/** Test selection. */ |
-TEST_F('CvoxEditableTextUnitTest', 'Selection', function() { |
- var tts = new TestTts(); |
- var obj = |
- new cvox.ChromeVoxEditableTextBase('Hello, world.', 0, 0, false, tts); |
- obj.changed(new cvox.TextChangeEvent('Hello, world.', 0, 1)); |
- obj.changed(new cvox.TextChangeEvent('Hello, world.', 0, 2)); |
- obj.changed(new cvox.TextChangeEvent('Hello, world.', 0, 3)); |
- obj.changed(new cvox.TextChangeEvent('Hello, world.', 0, 4)); |
- obj.changed(new cvox.TextChangeEvent('Hello, world.', 0, 5)); |
- obj.changed(new cvox.TextChangeEvent('Hello, world.', 0, 6)); |
- assertEqualStringArrays(['H', 'selected', |
- 'e', 'added_to_selection', |
- 'l', 'added_to_selection', |
- 'l', 'added_to_selection', |
- 'o', 'added_to_selection', |
- ',', 'added_to_selection'], |
- tts.get()); |
- obj.changed(new cvox.TextChangeEvent('Hello, world.', 0, 12)); |
- assertEqualStringArrays([' world', 'added_to_selection'], |
- tts.get()); |
- obj.changed(new cvox.TextChangeEvent('Hello, world.', 1, 12)); |
- assertEqualStringArrays(['H', 'removed_from_selection'], |
- tts.get()); |
- obj.changed(new cvox.TextChangeEvent('Hello, world.', 2, 5)); |
- assertEqualStringArrays(['llo', 'selected'], |
- tts.get()); |
- obj.changed(new cvox.TextChangeEvent('Hello, world.', 2, 2)); |
- assertEqualStringArrays(['Unselected'], |
- tts.get()); |
-}); |
- |
- |
-/** Test multi-line text. */ |
-TEST_F('CvoxEditableTextUnitTest', 'MultiLineText', function() { |
- var str = 'This string\nspans\nfive lines.\n \n'; |
- var tts = new TestTts(); |
- var obj = new cvox.ChromeVoxEditableTextBase(str, 0, 0, false, tts); |
- obj.multiline = true; |
- obj.getLineIndex = function(index) { |
- if (index >= 33) { |
- return 4; |
- } else if (index >= 30) { |
- return 3; |
- } else if (index >= 18) { |
- return 2; |
- } else if (index >= 12) { |
- return 1; |
- } else { |
- return 0; |
- } |
- }; |
- obj.getLineStart = function(index) { |
- return [0, 12, 18, 30, 33][index]; |
- }; |
- obj.getLineEnd = function(index) { |
- return [11, 17, 29, 32, 33][index]; |
- }; |
- assertEquals('This string', obj.getLine(0)); |
- obj.changed(new cvox.TextChangeEvent(str, 12, 12)); |
- assertEqualStringArrays(['spans'], tts.get()); |
- TestBraille.assertContent('spans', 0); |
- obj.changed(new cvox.TextChangeEvent(str, 18, 18)); |
- assertEqualStringArrays(['five lines.'], tts.get()); |
- TestBraille.assertContent('five lines.', 0); |
- obj.changed(new cvox.TextChangeEvent(str, 30, 30)); |
- assertEqualStringArrays(['text_box_whitespace'], tts.get()); |
- TestBraille.assertContent(' ', 0); |
- obj.changed(new cvox.TextChangeEvent(str, 33, 33)); |
- assertEqualStringArrays(['text_box_blank'], tts.get()); |
- TestBraille.assertContent('', 0); |
- obj.changed(new cvox.TextChangeEvent(str, 0, 1)); |
- assertEqualStringArrays(['T', 'selected'], tts.get()); |
- TestBraille.assertContent('This string', 0, 1); |
- obj.changed(new cvox.TextChangeEvent(str, 0, 12)); |
- assertEqualStringArrays(['his string\n', 'added_to_selection'], |
- tts.get()); |
- // Newline stripped, thus 11, not 12. |
- TestBraille.assertContent('This string', 0, 11); |
- obj.changed(new cvox.TextChangeEvent(str, 0, str.length)); |
- assertEqualStringArrays([str.substr(12), 'added_to_selection'], |
- tts.get()); |
- TestBraille.assertContent('This string', 0, 11); |
- obj.changed(new cvox.TextChangeEvent(str, 12, 19)); |
- assertEqualStringArrays(['spans\nf', 'selected'], tts.get()); |
- TestBraille.assertContent('spans', 0, 5); |
-}); |
- |
- |
-/** |
- * Test autocomplete; suppose a user is typing "google.com/firefox" into an |
- * address bar, and it's being autocompleted. Sometimes it's autocompleted |
- * as they type, sometimes there's a short delay. |
- */ |
-TEST_F('CvoxEditableTextUnitTest', 'Autocomplete', function() { |
- var tts = new TestTts(); |
- var obj = new cvox.ChromeVoxEditableTextBase('', 0, 0, false, tts); |
- |
- // User types 'g' |
- obj.changed(new cvox.TextChangeEvent('g', 1, 1)); |
- assertEqualStringArrays(['g'], tts.get()); |
- |
- // The rest of 'google.com' is autocompleted and automatically selected. |
- obj.changed(new cvox.TextChangeEvent('google.com', 1, 10)); |
- assertEqualStringArrays(['oogle.com, oogle.com'], tts.get()); |
- |
- // The user doesn't realize it and types a few more characters of 'google.com' |
- // and this changes the selection (unselecting) as the user types them. |
- obj.changed(new cvox.TextChangeEvent('google.com', 2, 10)); |
- assertEqualStringArrays(['o', 'ogle.com'], tts.get()); |
- obj.changed(new cvox.TextChangeEvent('google.com', 3, 10)); |
- assertEqualStringArrays(['o', 'gle.com'], tts.get()); |
- obj.changed(new cvox.TextChangeEvent('google.com', 4, 10)); |
- assertEqualStringArrays(['g', 'le.com'], tts.get()); |
- |
- // The user presses right-arrow, which fully unselects the remaining text. |
- obj.changed(new cvox.TextChangeEvent('google.com', 10, 10)); |
- assertEqualStringArrays(['Unselected'], tts.get()); |
- |
- // The user types '/' |
- obj.changed(new cvox.TextChangeEvent('google.com/', 11, 11)); |
- assertEqualStringArrays(['com/'], tts.get()); |
- |
- // The user types 'f', and 'finance' is autocompleted |
- obj.changed(new cvox.TextChangeEvent('google.com/finance', 12, 18)); |
- assertEqualStringArrays(['finance, inance'], tts.get()); |
- |
- // The user types 'i' |
- obj.changed(new cvox.TextChangeEvent('google.com/finance', 13, 18)); |
- assertEqualStringArrays(['i', 'nance'], tts.get()); |
- |
- // The user types 'r', now 'firefox' is autocompleted |
- obj.changed(new cvox.TextChangeEvent('google.com/firefox', 14, 18)); |
- assertEqualStringArrays(['refox, efox'], tts.get()); |
- |
- // The user presses right-arrow to accept the completion. |
- obj.changed(new cvox.TextChangeEvent('google.com/firefox', 18, 18)); |
- assertEqualStringArrays(['Unselected'], tts.get()); |
-}); |
- |
- |
-/** |
- * Test a few common scenarios where text is replaced. |
- */ |
-TEST_F('CvoxEditableTextUnitTest', 'ReplacingText', function() { |
- // Initial value is Alabama. |
- var tts = new TestTts(); |
- var obj = new cvox.ChromeVoxEditableTextBase('Alabama', 0, 0, false, tts); |
- |
- // Entire text replaced with Alaska. |
- obj.changed(new cvox.TextChangeEvent('Alaska', 0, 0)); |
- assertEqualStringArrays(['Alaska'], tts.get()); |
- |
- // Entire text selected. |
- obj.changed(new cvox.TextChangeEvent('Alaska', 0, 6)); |
- assertEqualStringArrays(['Alaska', 'selected'], tts.get()); |
- |
- // Entire text replaced with Arizona. |
- obj.changed(new cvox.TextChangeEvent('Arizona', 7, 7)); |
- assertEqualStringArrays(['Arizona'], tts.get()); |
- |
- // Entire text selected. |
- obj.changed(new cvox.TextChangeEvent('Arizona', 0, 7)); |
- assertEqualStringArrays(['Arizona', 'selected'], tts.get()); |
- |
- // Click between 'r' and 'i'. |
- obj.changed(new cvox.TextChangeEvent('Arizona', 2, 2)); |
- assertEqualStringArrays(['Unselected'], tts.get()); |
- |
- // Next character removed from selection. |
- obj.changed(new cvox.TextChangeEvent('Arizona', 2, 7)); |
- assertEqualStringArrays(['izona', 'selected'], tts.get()); |
- |
- // Selection replaced with "kansas" to make Arkansas. This time it |
- // says "kansas" because the deleted text was selected. |
- obj.changed(new cvox.TextChangeEvent('Arkansas', 8, 8)); |
- assertEqualStringArrays(['kansas'], tts.get()); |
-}); |
- |
- |
-/** |
- * Test feedback when text changes in a long sentence. |
- */ |
-TEST_F('CvoxEditableTextUnitTest', 'ReplacingLongText', function() { |
- var tts = new TestTts(); |
- var obj = new cvox.ChromeVoxEditableTextBase( |
- 'I love deadlines. I like the whooshing sound they make as they fly by.', |
- 0, 0, false, tts); |
- |
- // Change the whole sentence without moving the cursor. It should speak |
- // only the part that changed, but it should speak whole words. |
- obj.changed(new cvox.TextChangeEvent( |
- 'I love deadlines. I love the whooshing sounds they make as they fly by.', |
- 0, 0)); |
- assertEqualStringArrays(['love the whooshing sounds'], tts.get()); |
-}); |
- |
-/** Tests character echo. */ |
-TEST_F('CvoxEditableTextUnitTest', 'CharacterEcho', function() { |
- cvox.ChromeVox.typingEcho = cvox.TypingEcho.CHARACTER; |
- var tts = new TestTts(); |
- var obj = new cvox.ChromeVoxEditableTextBase('', 0, 0, false, tts); |
- obj.changed(new cvox.TextChangeEvent('H', 1, 1)); |
- obj.changed(new cvox.TextChangeEvent('He', 2, 2)); |
- obj.changed(new cvox.TextChangeEvent('Hel', 3, 3)); |
- obj.changed(new cvox.TextChangeEvent('Hell', 4, 4)); |
- obj.changed(new cvox.TextChangeEvent('Hello', 5, 5)); |
- obj.changed(new cvox.TextChangeEvent('Hello,', 6, 6)); |
- obj.changed(new cvox.TextChangeEvent('Hello, ', 7, 7)); |
- obj.changed(new cvox.TextChangeEvent('Hello, W', 8, 8)); |
- obj.changed(new cvox.TextChangeEvent('Hello, Wo', 9, 9)); |
- obj.changed(new cvox.TextChangeEvent('Hello, Wor', 10, 10)); |
- obj.changed(new cvox.TextChangeEvent('Hello, Worl', 11, 11)); |
- obj.changed(new cvox.TextChangeEvent('Hello, World', 12, 12)); |
- obj.changed(new cvox.TextChangeEvent('Hello, World.', 13, 13)); |
- assertEqualStringArrays( |
- ['H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '.'], |
- tts.get()); |
-}); |
- |
- |
-/** Tests word echo. */ |
-TEST_F('CvoxEditableTextUnitTest', 'WordEcho', function() { |
- cvox.ChromeVox.typingEcho = cvox.TypingEcho.WORD; |
- var tts = new TestTts(); |
- var obj = new cvox.ChromeVoxEditableTextBase('', 0, 0, false, tts); |
- obj.changed(new cvox.TextChangeEvent('H', 1, 1)); |
- obj.changed(new cvox.TextChangeEvent('He', 2, 2)); |
- obj.changed(new cvox.TextChangeEvent('Hel', 3, 3)); |
- obj.changed(new cvox.TextChangeEvent('Hell', 4, 4)); |
- obj.changed(new cvox.TextChangeEvent('Hello', 5, 5)); |
- obj.changed(new cvox.TextChangeEvent('Hello,', 6, 6)); |
- obj.changed(new cvox.TextChangeEvent('Hello, ', 7, 7)); |
- obj.changed(new cvox.TextChangeEvent('Hello, W', 8, 8)); |
- obj.changed(new cvox.TextChangeEvent('Hello, Wo', 9, 9)); |
- obj.changed(new cvox.TextChangeEvent('Hello, Wor', 10, 10)); |
- obj.changed(new cvox.TextChangeEvent('Hello, Worl', 11, 11)); |
- obj.changed(new cvox.TextChangeEvent('Hello, World', 12, 12)); |
- obj.changed(new cvox.TextChangeEvent('Hello, World.', 13, 13)); |
- assertEqualStringArrays( |
- ['Hello,', 'World.'], |
- tts.get()); |
-}); |
- |
- |
-/** Tests no echo. */ |
-TEST_F('CvoxEditableTextUnitTest', 'NoEcho', function() { |
- cvox.ChromeVox.typingEcho = cvox.TypingEcho.NONE; |
- var tts = new TestTts(); |
- var obj = new cvox.ChromeVoxEditableTextBase('', 0, 0, false, tts); |
- obj.changed(new cvox.TextChangeEvent('H', 1, 1)); |
- obj.changed(new cvox.TextChangeEvent('He', 2, 2)); |
- obj.changed(new cvox.TextChangeEvent('Hel', 3, 3)); |
- obj.changed(new cvox.TextChangeEvent('Hell', 4, 4)); |
- obj.changed(new cvox.TextChangeEvent('Hello', 5, 5)); |
- obj.changed(new cvox.TextChangeEvent('Hello,', 6, 6)); |
- obj.changed(new cvox.TextChangeEvent('Hello, ', 7, 7)); |
- obj.changed(new cvox.TextChangeEvent('Hello, W', 8, 8)); |
- obj.changed(new cvox.TextChangeEvent('Hello, Wo', 9, 9)); |
- obj.changed(new cvox.TextChangeEvent('Hello, Wor', 10, 10)); |
- obj.changed(new cvox.TextChangeEvent('Hello, Worl', 11, 11)); |
- obj.changed(new cvox.TextChangeEvent('Hello, World', 12, 12)); |
- obj.changed(new cvox.TextChangeEvent('Hello, World.', 13, 13)); |
- assertEqualStringArrays( |
- [], |
- tts.get()); |
-}); |
- |
-/** Tests cursor movement in an input field by character. */ |
-TEST_F('CvoxEditableTextUnitTest', 'CursorMovementByCharacter', function() { |
- var test = this.setUpForCursorTest_('input'); |
- var editable = test.editable, prepare = test.prepare, expect = test.expect; |
- try { |
- // Moving near the beginning of the text. |
- prepare('|"Hello," says Sally.'); |
- editable.moveCursorToPreviousCharacter(); |
- expect('|"Hello," says Sally.'); |
- editable.moveCursorToNextCharacter(); |
- expect('"|Hello," says Sally.'); |
- editable.moveCursorToNextCharacter(); |
- expect('"H|ello," says Sally.'); |
- |
- // Moving near the end of the text. |
- prepare('"Hello," says Sally|.'); |
- editable.moveCursorToPreviousCharacter(); |
- expect('"Hello," says Sall|y.'); |
- editable.moveCursorToNextCharacter(); |
- expect('"Hello," says Sally|.'); |
- editable.moveCursorToNextCharacter(); |
- expect('"Hello," says Sally.|'); |
- editable.moveCursorToNextCharacter(); |
- expect('"Hello," says Sally.|'); |
- } finally { |
- test.tearDown(); |
- } |
-}); |
- |
-/** Tests cursor movement in an input field by word. */ |
-TEST_F('CvoxEditableTextUnitTest', 'CursorMovementByWord', function() { |
- var test = this.setUpForCursorTest_('input'); |
- var editable = test.editable, prepare = test.prepare, expect = test.expect; |
- try { |
- // Moving forward. |
- prepare('"He|llo," says Sally.'); |
- editable.moveCursorToNextWord(); |
- expect('"Hello|," says Sally.'); |
- editable.moveCursorToNextWord(); |
- expect('"Hello," says| Sally.'); |
- editable.moveCursorToNextWord(); |
- expect('"Hello," says Sally|.'); |
- editable.moveCursorToNextWord(); |
- expect('"Hello," says Sally.|'); |
- editable.moveCursorToNextWord(); |
- expect('"Hello," says Sally.|'); |
- |
- // Moving backward. |
- prepare('"Hello," says S|ally.'); |
- editable.moveCursorToPreviousWord(); |
- expect('"Hello," says |Sally.'); |
- editable.moveCursorToPreviousWord(); |
- expect('"Hello," |says Sally.'); |
- editable.moveCursorToPreviousWord(); |
- expect('"|Hello," says Sally.'); |
- editable.moveCursorToPreviousWord(); |
- expect('|"Hello," says Sally.'); |
- editable.moveCursorToPreviousWord(); |
- expect('|"Hello," says Sally.'); |
- } finally { |
- test.tearDown(); |
- } |
-}); |
- |
-/** Tests that character and word movement still work in <textarea>. */ |
-TEST_F('CvoxEditableTextUnitTest', 'CursorMovementTextArea', function() { |
- var test = this.setUpForCursorTest_('textarea'); |
- var editable = test.editable, prepare = test.prepare, expect = test.expect; |
- try { |
- prepare('|Hello, Larry.\nHello, Sergey.'); |
- editable.moveCursorToNextCharacter(); |
- expect('H|ello, Larry.\nHello, Sergey.'); |
- editable.moveCursorToNextWord(); |
- expect('Hello|, Larry.\nHello, Sergey.'); |
- editable.moveCursorToNextWord(); |
- expect('Hello, Larry|.\nHello, Sergey.'); |
- editable.moveCursorToNextWord(); |
- expect('Hello, Larry.\nHello|, Sergey.'); |
- editable.moveCursorToNextCharacter(); |
- expect('Hello, Larry.\nHello,| Sergey.'); |
- editable.moveCursorToPreviousWord(); |
- expect('Hello, Larry.\n|Hello, Sergey.'); |
- editable.moveCursorToPreviousCharacter(); |
- expect('Hello, Larry.|\nHello, Sergey.'); |
- } finally { |
- test.tearDown(); |
- } |
-}); |
- |
-/** Tests that line navigation works. */ |
-TEST_F('CvoxEditableTextUnitTest', 'CursorMovementByLine', function() { |
- var test = this.setUpForCursorTest_('textarea'); |
- var editable = test.editable, prepare = test.prepare, expect = test.expect; |
- try { |
- prepare('123\n1234\n1234|5\n\nHi'); |
- editable.moveCursorToPreviousLine(); |
- expect('123\n1234|\n12345\n\nHi'); |
- editable.moveCursorToPreviousLine(); |
- expect('123|\n1234\n12345\n\nHi'); |
- editable.moveCursorToNextLine(); |
- expect('123\n123|4\n12345\n\nHi'); |
- editable.moveCursorToNextLine(); |
- expect('123\n1234\n123|45\n\nHi'); |
- editable.moveCursorToNextLine(); |
- expect('123\n1234\n12345\n|\nHi'); |
- editable.moveCursorToNextLine(); |
- expect('123\n1234\n12345\n\n|Hi'); |
- editable.moveCursorToNextLine(); |
- expect('123\n1234\n12345\n\nHi|'); |
- |
- prepare('foo|bar'); |
- editable.moveCursorToPreviousLine(); |
- expect('|foobar'); |
- editable.moveCursorToPreviousLine(); |
- expect('|foobar'); |
- editable.moveCursorToNextLine(); |
- expect('foobar|'); |
- editable.moveCursorToNextLine(); |
- expect('foobar|'); |
- } finally { |
- test.tearDown(); |
- } |
-}); |
- |
-/** Tests that paragraph navigation works. */ |
-TEST_F('CvoxEditableTextUnitTest', 'CursorMovementByParagraph', function() { |
- var test = this.setUpForCursorTest_('textarea'); |
- var editable = test.editable, prepare = test.prepare, expect = test.expect; |
- try { |
- prepare('Para|graph 1\nParagraph 2\nParagraph 3'); |
- editable.moveCursorToNextParagraph(); |
- expect('Paragraph 1\n|Paragraph 2\nParagraph 3'); |
- editable.moveCursorToNextParagraph(); |
- expect('Paragraph 1\nParagraph 2\n|Paragraph 3'); |
- editable.moveCursorToNextParagraph(); |
- expect('Paragraph 1\nParagraph 2\nParagraph 3|'); |
- editable.moveCursorToPreviousParagraph(); |
- expect('Paragraph 1\nParagraph 2\n|Paragraph 3'); |
- editable.moveCursorToPreviousParagraph(); |
- expect('Paragraph 1\n|Paragraph 2\nParagraph 3'); |
- editable.moveCursorToPreviousParagraph(); |
- expect('|Paragraph 1\nParagraph 2\nParagraph 3'); |
- } finally { |
- test.tearDown(); |
- } |
-}); |
- |
-/** Tests normalization of TextChangeEvent's */ |
-TEST_F('CvoxEditableTextUnitTest', 'TextChangeEvent', function() { |
- var event1 = new cvox.TextChangeEvent('foo', 0, 1, true); |
- var event2 = new cvox.TextChangeEvent('foo', 1, 0, true); |
- var event3 = new cvox.TextChangeEvent('foo', 1, 1, true); |
- |
- assertEquals(0, event1.start); |
- assertEquals(1, event1.end); |
- |
- assertEquals(0, event2.start); |
- assertEquals(1, event2.end); |
- |
- assertEquals(1, event3.start); |
- assertEquals(1, event3.end); |
-}); |