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 goog.provide('cvox.ChromeVoxTester'); 6 7 goog.require('cvox.AbstractBraille'); 8 goog.require('cvox.AbstractEarcons'); 9 goog.require('cvox.ChromeVoxEventWatcher'); 10 goog.require('cvox.ChromeVoxUserCommands'); 11 goog.require('cvox.LiveRegions'); 12 goog.require('cvox.NavigationManager'); 13 goog.require('cvox.NavigationShifter'); 14 goog.require('cvox.TestHost'); 15 goog.require('cvox.TestMathJax'); 16 goog.require('cvox.TestMsgs'); 17 goog.require('cvox.TestTts'); 18 19 20 /** 21 * @fileoverview Testing framework for ChromeVox. 22 * 23 */ 24 25 26 /** 27 * Initializes cvox.ChromeVoxTester and sets up the mock ChromeVox 28 * environment. 29 * @param {!Document} doc The DOM document to add event listeners to. 30 */ 31 cvox.ChromeVoxTester.setUp = function(doc) { 32 cvox.ChromeVox.mathJax = new cvox.TestMathJax(); 33 34 cvox.ChromeVox.navigationManager = new cvox.NavigationManager(); 35 cvox.ChromeVoxTester.testTts_ = new cvox.TestTts(); 36 cvox.ChromeVox.tts = cvox.ChromeVoxTester.testTts_; 37 38 // TODO(deboer): Factor this out as 'TestEarcons' 39 cvox.ChromeVox.earcons = new cvox.AbstractEarcons(); 40 cvox.ChromeVox.earcons.playEarcon = function(earcon) { }; 41 42 cvox.ChromeVox.braille = new cvox.AbstractBraille(); 43 cvox.ChromeVox.braille.write = function(params) {}; 44 45 cvox.ChromeVox.msgs = new cvox.TestMsgs(); 46 47 cvox.ChromeVox.host = new cvox.TestHost(); 48 49 // Init LiveRegions with a date of 0 so that the initial delay before 50 // things is spoken is skipped. 51 cvox.LiveRegions.init(new Date(0), cvox.AbstractTts.QUEUE_MODE_QUEUE, false); 52 53 cvox.ChromeVoxEventWatcher.init(doc); 54 window.console.log('done setup'); 55 }; 56 57 /** 58 * Tears down cvox.ChromeVoxTester. 59 * @param {!Document} doc The DOM document where event listeners were added. 60 */ 61 cvox.ChromeVoxTester.tearDown = function(doc) { 62 cvox.ChromeVoxEventWatcher.cleanup(doc); 63 }; 64 65 66 /** 67 * Returns the cvox.TestTts created by the tester. 68 * @return {cvox.TestTts} The TestTts. 69 */ 70 cvox.ChromeVoxTester.testTts = function() { 71 return cvox.ChromeVoxTester.testTts_; 72 }; 73 74 75 /** 76 * All calls to tts.speak are saved in an array of utterances. 77 * Clear any utterances that were saved up to this poing. 78 */ 79 cvox.ChromeVoxTester.clearUtterances = function() { 80 cvox.ChromeVoxTester.testTts_.clearUtterances(); 81 }; 82 83 84 /** 85 * Return a list of strings of what was spoken by tts.speak(). 86 * @return {Array.<string>} A list of all utterances spoken since 87 * initialization or the last call to clearUtterances. 88 */ 89 cvox.ChromeVoxTester.getUtteranceList = function() { 90 return cvox.ChromeVoxTester.testTts_.getUtteranceList(); 91 }; 92 93 /** 94 * @type {Object.<string, number>} Map from a navigation strategy name 95 * to the Navigation Manager strategy enum. 96 */ 97 cvox.ChromeVoxTester.STRATEGY_MAP = { 98 'lineardom': cvox.NavigationShifter.GRANULARITIES.OBJECT, 99 'smart': cvox.NavigationShifter.GRANULARITIES.GROUP, 100 'selection': cvox.NavigationShifter.GRANULARITIES.SENTENCE 101 }; 102 103 /** 104 * Switches to a different navigation strategy. 105 * @param {string} strategy The desired navigation strategy. 106 */ 107 cvox.ChromeVoxTester.setStrategy = function(strategy) { 108 cvox.ChromeVox.navigationManager.ensureNotSubnavigating(); 109 cvox.ChromeVox.navigationManager.setGranularity( 110 cvox.ChromeVoxTester.STRATEGY_MAP[strategy]); 111 }; 112 113 /** 114 * Starts reading the page from the current node. 115 */ 116 cvox.ChromeVoxTester.readFromHere = function() { 117 cvox.ChromeVox.navigationManager.startReading( 118 cvox.AbstractTts.QUEUE_MODE_FLUSH); 119 }; 120 121 /** 122 * Syncs to the given node in the test HTML 123 * @param {Node} node The node to sync to. 124 */ 125 cvox.ChromeVoxTester.syncToNode = function(node) { 126 cvox.ChromeVox.navigationManager 127 .updateSel(cvox.CursorSelection.fromNode(node)); 128 cvox.ChromeVox.navigationManager.sync(); 129 }; 130 131 /** 132 * Syncs to the first node in the test. 133 */ 134 cvox.ChromeVoxTester.syncToFirstNode = function() { 135 cvox.ChromeVox.navigationManager.updateSel(cvox.CursorSelection.fromBody()); 136 cvox.ChromeVox.navigationManager.sync(); 137 }; 138