Home | History | Annotate | Download | only in testing
      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