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.
6 'chrome/browser/resources/chromeos/chromevox/testing/common.js',
7 'chrome/browser/resources/chromeos/chromevox/testing/callback_helper.js']);
10 * Base test fixture for ChromeVox end to end tests.
12 * These tests run against production ChromeVox inside of the extension's
13 * background page context.
16 function ChromeVoxE2ETest() {
17 this.callbackHelper_ = new CallbackHelper(this);
20 ChromeVoxE2ETest.prototype = {
21 __proto__: testing.Test.prototype,
25 * No UI in the background context.
27 runAccessibilityChecks: false,
36 testGenCppIncludes: function() {
37 GEN_BLOCK(function() {/*!
38 #include "ash/accessibility_delegate.h"
39 #include "base/bind.h"
40 #include "base/callback.h"
41 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
42 #include "chrome/common/extensions/extension_constants.h"
47 testGenPreamble: function() {
48 GEN_BLOCK(function() {/*!
49 base::Closure load_cb =
50 base::Bind(&chromeos::AccessibilityManager::EnableSpokenFeedback,
51 base::Unretained(chromeos::AccessibilityManager::Get()),
53 ui::A11Y_NOTIFICATION_NONE);
54 WaitForExtension(extension_misc::kChromeVoxExtensionId, load_cb);
59 * Launch a new tab, wait until tab status complete, then run callback.
60 * @param {function() : void} doc Snippet wrapped inside of a function.
61 * @param {function()} callback Called once the document is ready.
63 runWithLoadedTab: function(doc, callback) {
64 this.launchNewTabWithDoc(doc, function(tab) {
65 chrome.tabs.onUpdated.addListener(function(tabId, changeInfo) {
66 if (tabId == tab.id && changeInfo.status == 'complete') {
74 * Launches the given document in a new tab.
75 * @param {function() : void} doc Snippet wrapped inside of a function.
76 * @param {function()} opt_callback Called once the document is created.
78 runWithTab: function(doc, opt_callback) {
79 var docString = TestUtils.extractHtmlFromCommentEncodedString(doc);
80 var url = 'data:text/html,<!doctype html>' +
82 '<!-- chromevox_next_test -->';
87 chrome.tabs.create(createParams, opt_callback);
91 * Send a key to the page.
92 * @param {number} tabId Of the page.
93 * @param {string} key Name of the key (e.g. Down).
94 * @param {string} elementQueryString
96 sendKeyToElement: function(tabId, key, elementQueryString) {
97 var code = TestUtils.extractHtmlFromCommentEncodedString(function() {/*!
98 var target = document.body.querySelector('$1');
100 var evt = document.createEvent('KeyboardEvent');
101 evt.initKeyboardEvent('keydown', true, true, window, '$0', 0, false,
102 false, false, false);
103 document.activeElement.dispatchEvent(evt);
104 */}, [key, elementQueryString]);
106 chrome.tabs.executeScript(tabId, {code: code});
110 * Creates a callback that optionally calls {@code opt_callback} when
111 * called. If this method is called one or more times, then
112 * {@code testDone()} will be called when all callbacks have been called.
113 * @param {Function=} opt_callback Wrapped callback that will have its this
114 * reference bound to the test fixture.
117 newCallback: function(opt_callback) {
118 return this.callbackHelper_.wrap(opt_callback);
123 * Similar to |TEST_F|. Generates a test for the given |testFixture|,
124 * |testName|, and |testFunction|.
125 * Used this variant when an |isAsync| fixture wants to temporarily mix in an
127 * @param {string} testFixture Fixture name.
128 * @param {string} testName Test name.
129 * @param {function} testFunction The test impl.
131 function SYNC_TEST_F(testFixture, testName, testFunction) {
132 var wrappedTestFunction = function() {
133 testFunction.call(this);
134 testDone([true, '']);
136 TEST_F(testFixture, testName, wrappedTestFunction);