Commit 9906144c authored by David Tseng's avatar David Tseng Committed by Commit Bot

Adds extension js browser tests for accessibility common

- js e2e tests can verify internal state of the accessibility common extension
- initial files for test suite for accessibility common to establish async function style
- some misc test file reorganization

Test: browser_tests --gtest_filter=AccessibilityCommonE2ETest.*
AX-Relnotes: n/a

Change-Id: Ia05f297266e278416647922f034f5f12a8e147f8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2329741Reviewed-by: default avatarAnastasia Helfinstein <anastasi@google.com>
Commit-Queue: David Tseng <dtseng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#793391}
parent 3687dbd9
......@@ -57,11 +57,14 @@ source_set("browser_tests") {
js2gtest("accessibility_common_extjs_tests") {
test_type = "extension"
sources = [ "autoclick_test.js" ]
sources = [
"accessibility_common_test.js",
"autoclick/autoclick_test.js",
]
gen_include_files = [
"../common/testing/callback_helper.js",
"../common/testing/e2e_test_base.js",
"mock_accessibility_private.js",
"../common/testing/mock_accessibility_private.js",
]
# The test base classes generate C++ code with these deps.
......
......@@ -23,6 +23,13 @@ class AccessibilityCommon {
return this.autoclick_;
}
/**
* @return {Magnifier}
*/
getMagnifierForTest() {
return this.magnifier_;
}
/**
* Initializes the AccessibilityCommon extension.
* @private
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
GEN_INCLUDE(['../common/testing/e2e_test_base.js']);
/**
* Accessibility common extension browser tests.
*/
AccessibilityCommonE2ETest = class extends E2ETestBase {
constructor() {
super();
}
/** @override */
testGenCppIncludes() {
GEN(`
#include "ash/accessibility/accessibility_delegate.h"
#include "ash/shell.h"
#include "base/bind.h"
#include "base/callback.h"
#include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
#include "chrome/common/extensions/extension_constants.h"
#include "content/public/test/browser_test.h"
`);
}
/** @override */
testGenPreamble() {
// Note that at least one accessibility common feature has to be enabled for
// the extension to load. Extension load is required for this test suite to
// have a place to be injected.
GEN(`
base::Closure load_cb =
base::Bind(&chromeos::AccessibilityManager::EnableAutoclick,
base::Unretained(chromeos::AccessibilityManager::Get()),
true);
chromeos::AccessibilityManager::Get()->EnableAutoclick(true);
WaitForExtension(extension_misc::kAccessibilityCommonExtensionId, load_cb);
`);
}
async getPref(name) {
return new Promise(resolve => {
chrome.settingsPrivate.getPref(name, (ret) => {
resolve(ret);
});
});
}
async setPref(name, value) {
return new Promise(resolve => {
chrome.settingsPrivate.setPref(name, value, undefined, () => {
resolve();
});
});
}
};
TEST_F('AccessibilityCommonE2ETest', 'ToggleFeatures', function() {
this.newCallback(async () => {
// First, verify autoclick is already on.
let pref = await this.getPref('settings.a11y.autoclick');
assertEquals('settings.a11y.autoclick', pref.key);
assertTrue(pref.value);
assertTrue(!!accessibilityCommon.getAutoclickForTest());
// Next, flip on screen magnifier and verify all prefs and internal state.
await this.setPref('settings.a11y.screen_magnifier', true);
pref = await this.getPref('settings.a11y.autoclick');
assertEquals('settings.a11y.autoclick', pref.key);
assertTrue(pref.value);
assertTrue(!!accessibilityCommon.getAutoclickForTest());
pref = await this.getPref('settings.a11y.screen_magnifier');
assertEquals('settings.a11y.screen_magnifier', pref.key);
assertTrue(pref.value);
assertTrue(!!accessibilityCommon.getMagnifierForTest());
// Then, flip off autoclick and verify all prefs and internal state.
await this.setPref('settings.a11y.autoclick', false);
pref = await this.getPref('settings.a11y.autoclick');
assertEquals('settings.a11y.autoclick', pref.key);
assertFalse(pref.value);
assertTrue(!accessibilityCommon.getAutoclickForTest());
pref = await this.getPref('settings.a11y.screen_magnifier');
assertEquals('settings.a11y.screen_magnifier', pref.key);
assertTrue(pref.value);
assertTrue(!!accessibilityCommon.getMagnifierForTest());
// Unfortunately, turning off all features would remove the extension. Flip
// autoclick back on.
await this.setPref('settings.a11y.autoclick', true);
pref = await this.getPref('settings.a11y.autoclick');
assertEquals('settings.a11y.autoclick', pref.key);
assertTrue(pref.value);
assertTrue(!!accessibilityCommon.getAutoclickForTest());
pref = await this.getPref('settings.a11y.screen_magnifier');
assertEquals('settings.a11y.screen_magnifier', pref.key);
assertTrue(pref.value);
assertTrue(!!accessibilityCommon.getMagnifierForTest());
// And, finally flip screen magnifier off.
await this.setPref('settings.a11y.screen_magnifier', false);
pref = await this.getPref('settings.a11y.autoclick');
assertEquals('settings.a11y.autoclick', pref.key);
assertTrue(pref.value);
assertTrue(!!accessibilityCommon.getAutoclickForTest());
pref = await this.getPref('settings.a11y.screen_magnifier');
assertEquals('settings.a11y.screen_magnifier', pref.key);
assertFalse(pref.value);
assertTrue(!accessibilityCommon.getMagnifierForTest());
})();
});
......@@ -2,11 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
GEN_INCLUDE(['../common/testing/e2e_test_base.js']);
GEN_INCLUDE(['mock_accessibility_private.js']);
GEN_INCLUDE(['../../common/testing/e2e_test_base.js']);
GEN_INCLUDE(['../../common/testing/mock_accessibility_private.js']);
/**
* Base class for browser tests for automatic clicks extension.
* Automatic clicks feature using accessibility common extension browser tests.
*/
AutoclickE2ETest = class extends E2ETestBase {
constructor() {
......
......@@ -18,7 +18,8 @@
},
"permissions": [
"accessibilityPrivate",
"accessibilityFeatures.read"
"accessibilityFeatures.read",
"settingsPrivate"
],
"automation": {
"desktop": true
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment