Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1706)

Unified Diff: chrome/browser/resources/chromeos/chromevox/braille/braille_input_handler_test.unitjs

Issue 1039703002: Make contracted braille input work in more contexts. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@docs2
Patch Set: Rebase Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/chromeos/chromevox/braille/braille_input_handler_test.unitjs
diff --git a/chrome/browser/resources/chromeos/chromevox/braille/braille_input_handler_test.unitjs b/chrome/browser/resources/chromeos/chromevox/braille/braille_input_handler_test.unitjs
index 59fa53e7f55c2d5b73fa5aefff858142d4d1b3aa..3b9ad703c3f6d33b672666a9362a7d648ae1135c 100644
--- a/chrome/browser/resources/chromeos/chromevox/braille/braille_input_handler_test.unitjs
+++ b/chrome/browser/resources/chromeos/chromevox/braille/braille_input_handler_test.unitjs
@@ -38,6 +38,10 @@ function FakeEditor(port, inputHandler) {
this.contextID_ = 0;
/** @private {boolean} */
this.allowDeletes_ = false;
+ /** @private {string} */
+ this.uncommittedText_ = '';
+ /** @private {?Array<number>} */
+ this.extraCells_ = [];
port.postMessage = goog.bind(this.handleMessage_, this);
}
@@ -134,6 +138,25 @@ FakeEditor.prototype.assertContentIs = function(
/**
+ * Asserts that the uncommitted text last sent to the IME is the given text.
+ * @param {string} text
+ */
+FakeEditor.prototype.assertUncommittedTextIs = function(text) {
+ assertEquals(text, this.uncommittedText_);
+};
+
+
+/**
+ * Asserts that the input handler has added 'extra cells' for uncommitted
+ * text into the braille content.
+ * @param {string} cells Cells as a space-separated list of numbers.
+ */
+FakeEditor.prototype.assertExtraCellsAre = function(cells) {
+ assertEqualsJSON(cellsToArray(cells), this.extraCells_);
+};
+
+
+/**
* Sends a message from the IME to the input handler.
* @param {Object} msg The message to send.
* @private
@@ -151,9 +174,17 @@ FakeEditor.prototype.message_ = function(msg) {
* @private
*/
FakeEditor.prototype.callOnDisplayContentChanged_ = function() {
- this.inputHandler_.onDisplayContentChanged(
- cvox.BrailleUtil.createValue(
- this.text_, this.selectionStart_, this.selectionEnd_));
+ var content = cvox.BrailleUtil.createValue(
+ this.text_, this.selectionStart_, this.selectionEnd_)
+ var grabExtraCells = function() {
+ var span = content.getSpanInstanceOf(cvox.ExtraCellsSpan);
+ assertNotEquals(null, span);
+ // Convert the ArrayBuffer to a normal array for easier comparision.
+ this.extraCells_ = Array.prototype.map.call(new Uint8Array(span.cells),
+ function(a) {return a;});
+ }.bind(this);
+ this.inputHandler_.onDisplayContentChanged(content, grabExtraCells);
+ grabExtraCells();
};
@@ -186,23 +217,36 @@ FakeEditor.prototype.blur = function() {
* @private
*/
FakeEditor.prototype.handleMessage_ = function(msg) {
- assertEquals('replaceText', msg.type);
assertEquals(this.contextID_, msg.contextID);
- var deleteBefore = msg.deleteBefore;
- var newText = msg.newText;
- assertTrue(goog.isNumber(deleteBefore));
- assertTrue(goog.isString(newText));
- assertTrue(deleteBefore <= this.selectionStart_);
- if (deleteBefore > 0) {
- assertTrue(this.allowDeletes_);
- this.text_ =
- this.text_.substring(0, this.selectionStart_ - deleteBefore) +
- this.text_.substring(this.selectionEnd_);
- this.selectionStart_ -= deleteBefore;
- this.selectionEnd_ = this.selectionStart_;
- this.callOnDisplayContentChanged_();
+ switch(msg.type) {
+ case 'replaceText':
+ var deleteBefore = msg.deleteBefore;
+ var newText = msg.newText;
+ assertTrue(goog.isNumber(deleteBefore));
+ assertTrue(goog.isString(newText));
+ assertTrue(deleteBefore <= this.selectionStart_);
+ if (deleteBefore > 0) {
+ assertTrue(this.allowDeletes_);
+ this.text_ =
+ this.text_.substring(0, this.selectionStart_ - deleteBefore) +
+ this.text_.substring(this.selectionEnd_);
+ this.selectionStart_ -= deleteBefore;
+ this.selectionEnd_ = this.selectionStart_;
+ this.callOnDisplayContentChanged_();
+ }
+ this.insert(newText);
+ break;
+ case 'setUncommitted':
+ assertTrue(goog.isString(msg.text));
+ this.uncommittedText_ = msg.text;
+ break;
+ case 'commitUncommitted':
+ this.insert(this.uncommittedText_);
+ this.uncommittedText_ = '';
+ break;
+ default:
+ throw new Error('Unexpected message to IME: ' + JSON.stringify(msg));
}
- this.insert(newText);
};
/*
@@ -362,6 +406,8 @@ FakeTranslatorManager.prototype = {
* pattern (dot 1 uses bit 0, etc).
*/
function cellsToArray(cells) {
+ if (!cells)
+ return [];
return cells.split(/\s+/).map(function(cellString) {
var cell = 0;
assertTrue(cellString.length > 0);
@@ -532,25 +578,32 @@ TEST_F('CvoxBrailleInputHandlerUnitTest', 'InputContracted', function() {
var editor = this.createEditor();
this.translatorManager.setTranslators(this.contractedTranslator,
this.uncontractedTranslator);
+ editor.setContent('', 0);
editor.setActive(true);
editor.focus('text');
this.assertExpandingSelection();
// First, type a 'b'.
assertTrue(this.sendCells('12'));
+ editor.assertContentIs('', 0);
// Remember that the contracted translator produces uppercase.
- editor.assertContentIs('BUT', 'BUT'.length);
+ editor.assertUncommittedTextIs('BUT');
+ editor.assertExtraCellsAre('12');
this.assertExpandingNone();
- // From here on, the input handler needs to replace already entered text.
- editor.setAllowDeletes(true);
// Typing 'rl' changes to a different contraction.
assertTrue(this.sendCells('1235 123'));
- editor.assertContentIs('BRAILLE', 'BRAILLE'.length);
+ editor.assertUncommittedTextIs('BRAILLE');
+ editor.assertContentIs('', 0);
+ editor.assertExtraCellsAre('12 1235 123');
+ this.assertExpandingNone();
+
// Now, finish the word.
assertTrue(this.sendCells('0'));
editor.assertContentIs('BRAILLE ', 'BRAILLE '.length);
- this.assertExpandingNone();
+ editor.assertUncommittedTextIs('');
+ editor.assertExtraCellsAre('');
+ this.assertExpandingSelection();
// Move the cursor to the beginning.
editor.select(0);
@@ -567,15 +620,16 @@ TEST_F('CvoxBrailleInputHandlerUnitTest', 'InputContracted', function() {
// Move to the end, where contracted typing should work.
editor.select('bBRAILLEb '.length);
assertTrue(this.sendCells('1456 0')); // Symbol for 'this', then space.
- this.assertExpandingNone();
- editor.assertContentIs('bBRAILLEb THIS ', 'bBRAILLEb this '.length);
+ this.assertExpandingSelection();
+ editor.assertContentIs('bBRAILLEb THIS ', 'bBRAILLEb THIS '.length);
- // Move between the two words.
+ // Move to between the two words.
editor.select('bBRAILLEb'.length);
this.assertExpandingSelection();
- assertTrue(this.sendCells('0'));
- assertTrue(this.sendCells('12')); // 'b' for 'but'
- editor.assertContentIs('bBRAILLEb BUT THIS ', 'bBRAILLEb BUT'.length);
+ assertTrue(this.sendCells('0 12')); // Space plus 'b' for 'but'
+ editor.assertUncommittedTextIs('BUT');
+ editor.assertExtraCellsAre('12');
+ editor.assertContentIs('bBRAILLEb THIS ', 'bBRAILLEb '.length);
this.assertExpandingNone();
});
@@ -614,19 +668,17 @@ TEST_F('CvoxBrailleInputHandlerUnitTest', 'Backspace', function() {
// Add some text that we can delete later.
editor.setContent('Text ', 'Text '.length);
- // The IME needs to delete text, even when typing.
- editor.setAllowDeletes(true);
// Type 'brl' to make sure replacement works when deleting text.
assertTrue(this.sendCells('12 1235 123'));
- editor.assertContentIs('Text BRAILLE', 'Text BRAILLE'.length);
+ editor.assertUncommittedTextIs('BRAILLE');
// Delete what we just typed, one cell at a time.
this.sendKeyEvent('Backspace');
- editor.assertContentIs('Text BR', 'Text BR'.length);
+ editor.assertUncommittedTextIs('BR');
this.sendKeyEvent('Backspace');
- editor.assertContentIs('Text BUT', 'Text BUT'.length);
+ editor.assertUncommittedTextIs('BUT');
this.sendKeyEvent('Backspace');
- editor.assertContentIs('Text ', 'Text '.length);
+ editor.assertUncommittedTextIs('');
// Now, backspace should be handled as usual, synthetizing key events.
assertEquals(0, this.keyEvents.length);

Powered by Google App Engine
This is Rietveld 408576698