background.extjs revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// Include test fixture. 6GEN_INCLUDE(['../../testing/chromevox_e2e_test_base.js']); 7 8/** 9 * Test fixture for cvox2.Background. 10 * @constructor 11 * @extends {ChromeVoxE2ETest} 12 */ 13function BackgroundTest() {} 14 15BackgroundTest.prototype = { 16 __proto__: ChromeVoxE2ETest.prototype, 17 18 // This method is called without a |this| instance bound. 19 /** @override */ 20 testGenCppIncludes: function() { 21 ChromeVoxE2ETest.prototype.testGenCppIncludes.call(this); 22 GEN('#include "base/command_line.h"'); 23 GEN('#include "chromeos/chromeos_switches.h"'); 24 }, 25 26 // This method is called without a |this| instance bound. 27 /** @override */ 28 testGenPreamble: function() { 29 GEN_BLOCK(function() {/*! 30 CommandLine* command_line = CommandLine::ForCurrentProcess(); 31 command_line->AppendSwitch(chromeos::switches::kEnableChromeVoxNext); 32 */}); 33 ChromeVoxE2ETest.prototype.testGenPreamble.call(this); 34 }, 35 36 /** @override */ 37 setUp: function() { 38 this.mockTts = new MockTts(); 39 cvox.ChromeVox.tts = this.mockTts; 40 } 41}; 42 43/** 44 * Mock tts class. 45 * @constructor 46 * @extends {cvox.TtsInterface} 47 */ 48var MockTts = function() { 49}; 50 51MockTts.prototype = { 52 /** Tracks all spoken text. @type {!Array.<string>} */ 53 utterances: [], 54 55 /** @override */ 56 speak: function(textString, queueMode, properties) { 57 this.utterances.push(textString); 58 }, 59 60 /** 61 * Checks to see if a string was spoken. 62 * @param {string} textString The string to check. 63 * @return {boolean} True if the string was spoken (possibly as part of a 64 * larger utterance). 65 */ 66 checkIfSubstringWasSpoken: function(textString) { 67 return this.utterances.some(function(t) { 68 return t.indexOf(textString) != -1; 69 }); 70 } 71}; 72 73/** Tests that ChromeVox classic is in this context. */ 74SYNC_TEST_F('BackgroundTest', 'ClassicNamespaces', function() { 75 assertEquals('object', typeof(cvox)); 76 assertEquals('function', typeof(cvox.ChromeVoxBackground)); 77}); 78 79/** Tests that ChromeVox next is in this context. */ 80SYNC_TEST_F('BackgroundTest', 'NextNamespaces', function() { 81 assertEquals('object', typeof(cvox2)); 82 assertEquals('function', typeof(cvox2.Background)); 83}); 84 85/** Tests that ChromeVox reads the desktop tree. */ 86TEST_F('BackgroundTest', 'DesktopFocus', function() { 87 function findStatusTray(root) { 88 if (root.role == chrome.automation.RoleType.button && 89 root.attributes.name && 90 root.attributes.name.indexOf('Status tray') != -1) { 91 return root; 92 } 93 for (var i = 0; i < root.children().length; i++) { 94 var found = findStatusTray(root.children()[i]); 95 if (found) 96 return found; 97 } 98 return null; 99 } 100 101 chrome.automation.getDesktop(function(root) { 102 var testButton = findStatusTray(root); 103 testButton.addEventListener(chrome.automation.EventType.focus, 104 function(e) { 105 var result = 106 cvox.ChromeVox.tts.checkIfSubstringWasSpoken('Status tray'); 107 testDone([result, '']); 108 }, 109 true); 110 testButton.focus(); 111 }); 112}); 113