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

Unified Diff: chrome/browser/resources/chromeos/chromevox/host/chrome/braille_integration_test.unitjs

Issue 484063003: Port braille related tests from ChromeVox upstream. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkcr
Patch Set: Rename a fake class. Created 6 years, 3 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/host/chrome/braille_integration_test.unitjs
diff --git a/chrome/browser/resources/chromeos/chromevox/host/chrome/braille_integration_test.unitjs b/chrome/browser/resources/chromeos/chromevox/host/chrome/braille_integration_test.unitjs
new file mode 100644
index 0000000000000000000000000000000000000000..4fbe3dbd1f73c1293c896e3b32cba613358b11a1
--- /dev/null
+++ b/chrome/browser/resources/chromeos/chromevox/host/chrome/braille_integration_test.unitjs
@@ -0,0 +1,220 @@
+// 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',
+ '../../testing/assert_additions.js']);
+
+// Tests the communication between content script and background page for
+// braille.
+
+/**
+ * Test fixture.
+ * @constructor
+ * @extends {ChromeVoxUnitTestBase}
+ */
+function CvoxBrailleIntegrationUnitTest() {}
+
+CvoxBrailleIntegrationUnitTest.prototype = {
+ __proto__: ChromeVoxUnitTestBase.prototype,
+
+ /** @override */
+ closureModuleDeps: [
+ 'cvox.BrailleBackground',
+ 'cvox.BrailleInputHandler',
+ 'cvox.BrailleKeyCommand',
+ 'cvox.BrailleUtil',
+ 'cvox.ChromeBraille',
+ 'cvox.ExpandingBrailleTranslator',
+ ],
+
+ /** @override */
+ setUp: function() {
+ cvox.BrailleTable.getAll = function() {}
+ this.displayManager = new FakeDisplayManager();
+ this.inputHandler = new FakeInputHandler();
+
+ this.brailleBackground = new cvox.BrailleBackground(
+ this.displayManager, this.inputHandler);
+
+ cvox.ExtensionBridge = new FakeExtensionBridge(this.brailleBackground);
+
+ this.braille = new cvox.ChromeBraille();
+ this.braille.setCommandListener(function(command, content) {
+ this.lastCommand = command;
+ this.lastCommandContent = content;
+ }.bind(this));
+ this.lastCommand = null;
+ this.lastCommandContent = null;
+
+ // Create convenience objects used in all tests.
+ this.command1 = {command: cvox.BrailleKeyCommand.PAN_LEFT};
+ this.content1 = cvox.NavBraille.fromText('text 1');
+ this.command2 = {command: cvox.BrailleKeyCommand.ROUTING};
+ this.content2 = cvox.NavBraille.fromText('text 2');
+ },
+
+ /** @Override */
+ tearDown: function() {
+ cvox.ExtensionBridge = null;
+ },
+
+ sendCommand: function(command, content) {
+ this.displayManager.commandListener(command, content);
+ }
+};
+
+function FakeExtensionBridge(brailleBackground) {
+ /** @private {Function} */
+ this.messageListener_ = null;
+ /** @private {cvox.BrailleBackground} */
+ this.brailleBackground_ = brailleBackground;
+}
+
+FakeExtensionBridge.prototype = {
+ uniqueId: function() { return 1; },
+
+ /** @param {Function} listener The listener. */
+ addMessageListener: function(listener) {
+ assertEquals(null, this.messageListener_);
+ this.messageListener_ = listener;
+ },
+
+ send: function(msg) {
+ if (msg['message'] == 'BRAILLE') {
+ assertNotEquals(null, this.messageListener_);
+ this.messageListener_(msg);
+ } else {
+ assertEquals('BRAILLE', msg['target']);
+ this.brailleBackground_.onBrailleMessage(msg);
+ }
+ }
+};
+
+/** @extends {cvox.BrailleDisplaymanager} */
+function FakeDisplayManager() {
+ /** @type {Function} */
+ this.commandListener = null;
+ /** @type {cvox.NavBraille} */
+ this.content = null;
+}
+
+FakeDisplayManager.prototype = {
+ /** @Override */
+ setCommandListener: function(listener) {
+ this.commandListener = listener;
+ },
+
+ /** @Override */
+ setContent: function(content, expansionType) {
+ assertEquals(cvox.ExpandingBrailleTranslator.ExpansionType.SELECTION,
+ expansionType);
+ this.content = content;
+ }
+};
+
+/** @extends {cvox.BrailleInputHandler} */
+function FakeInputHandler() {
+}
+
+FakeInputHandler.prototype = {
+ /** @Override */
+ init: function() {},
+
+ /** @Override */
+ onBrailleKeyEvent: function() {
+ return false;
+ },
+
+ /** @Override */
+ onDisplayContentChanged: function() {},
+
+ /** @Override */
+ getExpansionType: function() {
+ return cvox.ExpandingBrailleTranslator.ExpansionType.SELECTION;
+ }
+};
+
+TEST_F('CvoxBrailleIntegrationUnitTest', 'Write', function() {
+ this.braille.write(this.content1);
+ assertEqualsJSON(this.content1, this.displayManager.content);
+});
+
+TEST_F('CvoxBrailleIntegrationUnitTest', 'WriteWithSpans', function() {
+ var selectionSpan = new cvox.BrailleUtil.ValueSelectionSpan();
+ var valueSpan = new cvox.BrailleUtil.ValueSpan(20);
+ var toSend = cvox.NavBraille.fromText(
+ new cvox.Spannable('Hello', valueSpan));
+ toSend.text.setSpan(selectionSpan, 0, 0);
+ toSend.text.setSpan(document.body, 0, toSend.text.getLength());
+ var expected = cvox.NavBraille.fromText(
+ new cvox.Spannable(toSend.text.toString(), valueSpan));
+ expected.text.setSpan(selectionSpan, 0, 0);
+
+ this.braille.write(toSend);
+ assertEqualsJSON(expected, this.displayManager.content);
+});
+
+TEST_F('CvoxBrailleIntegrationUnitTest', 'CommandNoContent', function() {
+ // Commands are only delivered to the content script if the window has focus.
+ window.focus();
+ this.sendCommand(this.command1, null);
+ assertEqualsJSON(this.command1, this.lastCommand);
+ assertEquals(null, this.lastCommandContent);
+});
+
+TEST_F('CvoxBrailleIntegrationUnitTest', 'InterleavedWritesAndCommands',
+ function() {
+ window.focus();
+ this.braille.write(this.content1);
+ this.sendCommand(this.command1, this.displayManager.content);
+ assertEqualsJSON(this.command1, this.lastCommand);
+ assertEqualsJSON(this.content1, this.lastCommandContent);
+
+ var savedContent1 = this.displayManager.content;
+ this.braille.write(this.content2);
+ // Old content still on display.
+ this.sendCommand(this.command1, savedContent1);
+ assertEqualsJSON(this.command1, this.lastCommand);
+ assertEquals(null, this.lastCommandContent);
+ this.sendCommand(this.command2, this.displayManager.content);
+ assertEqualsJSON(this.command2, this.lastCommand);
+ assertEqualsJSON(this.content2, this.lastCommandContent);
+
+});
+
+TEST_F('CvoxBrailleIntegrationUnitTest', 'CommandAfterBackgroundWrite',
+ function() {
+ window.focus();
+ this.braille.write(this.content1);
+ this.sendCommand(this.command1, this.displayManager.content);
+ assertEqualsJSON(this.command1, this.lastCommand);
+ assertEqualsJSON(this.content1, this.lastCommandContent);
+
+ this.brailleBackground.write(this.content2);
+ assertEqualsJSON(this.content2, this.displayManager.content);
+ this.sendCommand(this.command2, this.displayManager.content);
+ assertEqualsJSON(this.command2, this.lastCommand);
+ assertEquals(null, this.lastCommandContent);
+});
+
+TEST_F('CvoxBrailleIntegrationUnitTest', 'CommandAfterOtherTabWrite',
+ function() {
+ window.focus();
+ // Ignore the listener of the braille from the second 'tab'.
+ cvox.ExtensionBridge.addMessageListener = function() {}
+ // Create another content script braille object, presumably from another
+ // tab.
+ var anotherBraille = new cvox.ChromeBraille();
+ this.braille.write(this.content1);
+ this.sendCommand(this.command1, this.displayManager.content);
+ // Now, this other braille gets a different unique id.
+ cvox.ExtensionBridge.uniqueId = function() { return 2; }
+ anotherBraille.write(this.content2);
+ this.sendCommand(this.command2, this.displayManager.content);
+ // The first 'tab' still gets the command, but since the second 'tab's\
+ // braille was on the display, it gets null content.
+ assertEqualsJSON(this.command2, this.lastCommand);
+ assertEquals(null, this.lastCommandContent);
+});

Powered by Google App Engine
This is Rietveld 408576698