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
5goog.provide('cvox.ChromeVoxTester');
6
7goog.require('cvox.AbstractBraille');
8goog.require('cvox.AbstractEarcons');
9goog.require('cvox.ChromeVoxEventWatcher');
10goog.require('cvox.ChromeVoxUserCommands');
11goog.require('cvox.LiveRegions');
12goog.require('cvox.NavigationManager');
13goog.require('cvox.NavigationShifter');
14goog.require('cvox.TestHost');
15goog.require('cvox.TestMathJax');
16goog.require('cvox.TestMsgs');
17goog.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 */
31cvox.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 */
61cvox.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 */
70cvox.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 */
79cvox.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 */
89cvox.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 */
97cvox.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 */
107cvox.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 */
116cvox.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 */
125cvox.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 */
134cvox.ChromeVoxTester.syncToFirstNode = function() {
135  cvox.ChromeVox.navigationManager.updateSel(cvox.CursorSelection.fromBody());
136  cvox.ChromeVox.navigationManager.sync();
137};
138