Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(452)

Unified Diff: chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc

Issue 490443002: Add test for ChromeVox keyboard commands. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: No changes to ui_controls_factory_aurax11 needed. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | ui/aura/test/ui_controls_factory_ozone.cc » ('j') | ui/aura/test/ui_controls_factory_ozone.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc
diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc
index ef47cedcffd9de516f4007f7b6a551a17bcfb2f0..c4b85ce30a83df2d4fbe581bf08d103f3e65db67 100644
--- a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc
+++ b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc
@@ -21,6 +21,7 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/test/base/in_process_browser_test.h"
@@ -60,11 +61,24 @@ class LoggedInSpokenFeedbackTest : public InProcessBrowserTest {
}
void SendKeyPress(ui::KeyboardCode key) {
- gfx::NativeWindow root_window =
- ash::Shell::GetInstance()->GetPrimaryRootWindow();
- ASSERT_TRUE(
- ui_test_utils::SendKeyPressToWindowSync(
- root_window, key, false, false, false, false));
+ ASSERT_NO_FATAL_FAILURE(
+ ASSERT_TRUE(
+ ui_test_utils::SendKeyPressToWindowSync(
+ NULL, key, false, false, false, false)));
+ }
+
+ void SendKeyPressWithControl(ui::KeyboardCode key) {
+ ASSERT_NO_FATAL_FAILURE(
+ ASSERT_TRUE(
+ ui_test_utils::SendKeyPressToWindowSync(
+ NULL, key, true, false, false, false)));
+ }
+
+ void SendKeyPressWithSearchAndShift(ui::KeyboardCode key) {
+ ASSERT_NO_FATAL_FAILURE(
+ ASSERT_TRUE(
+ ui_test_utils::SendKeyPressToWindowSync(
+ NULL, key, false, true, false, true)));
}
void RunJavaScriptInChromeVoxBackgroundPage(const std::string& script) {
@@ -92,6 +106,37 @@ class LoggedInSpokenFeedbackTest : public InProcessBrowserTest {
"cvox.ChromeVox.earcons.playEarcon = function() {};");
}
+ void LoadChromeVoxAndThenNavigateToURL(const GURL& url) {
+ // The goal of this helper function is to avoid race conditions between
+ // the page loading and the ChromeVox extension loading and fully
David Tseng 2014/09/22 21:52:21 Mention something about the content script being f
+ // initializing. To do this, we first load a test url that repeatedly
+ // asks ChromeVox to speak 'ready', then we load ChromeVox and block
+ // until we get that 'ready' speech.
+
+ ui_test_utils::NavigateToURL(
+ browser(),
+ GURL("data:text/html;charset=utf-8,"
+ "<script>"
+ "window.setInterval(function() {"
+ " try {"
+ " cvox.Api.speak('ready');"
+ " } catch (e) {}"
+ "}, 100);"
+ "</script>"));
+ EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
+ AccessibilityManager::Get()->EnableSpokenFeedback(
+ true, ash::A11Y_NOTIFICATION_NONE);
+
+ // Block until we get "ready".
+ while (speech_monitor_.GetNextUtterance() != "ready") {
David Tseng 2014/09/22 21:52:21 Should we sleep here inside the loop to avoid pote
+ }
+
+ // Now load the requested url.
+ ui_test_utils::NavigateToURL(browser(), url);
+ }
+
+ SpeechMonitor speech_monitor_;
+
private:
StubBrailleController braille_controller_;
DISALLOW_COPY_AND_ASSIGN(LoggedInSpokenFeedbackTest);
@@ -100,52 +145,51 @@ class LoggedInSpokenFeedbackTest : public InProcessBrowserTest {
IN_PROC_BROWSER_TEST_F(LoggedInSpokenFeedbackTest, AddBookmark) {
EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
- SpeechMonitor monitor;
AccessibilityManager::Get()->EnableSpokenFeedback(
true, ash::A11Y_NOTIFICATION_NONE);
- EXPECT_TRUE(monitor.SkipChromeVoxEnabledMessage());
+ EXPECT_TRUE(speech_monitor_.SkipChromeVoxEnabledMessage());
DisableEarcons();
chrome::ExecuteCommand(browser(), IDC_SHOW_BOOKMARK_BAR);
// Create a bookmark with title "foo".
chrome::ExecuteCommand(browser(), IDC_BOOKMARK_PAGE);
- EXPECT_EQ("Bookmark added!,", monitor.GetNextUtterance());
- EXPECT_EQ("about blank,", monitor.GetNextUtterance());
- EXPECT_EQ("Bookmark name,", monitor.GetNextUtterance());
- EXPECT_EQ("text box", monitor.GetNextUtterance());
+ EXPECT_EQ("Bookmark added!,", speech_monitor_.GetNextUtterance());
+ EXPECT_EQ("about blank,", speech_monitor_.GetNextUtterance());
+ EXPECT_EQ("Bookmark name,", speech_monitor_.GetNextUtterance());
+ EXPECT_EQ("text box", speech_monitor_.GetNextUtterance());
SendKeyPress(ui::VKEY_F);
- EXPECT_EQ("f", monitor.GetNextUtterance());
+ EXPECT_EQ("f", speech_monitor_.GetNextUtterance());
SendKeyPress(ui::VKEY_O);
- EXPECT_EQ("o", monitor.GetNextUtterance());
+ EXPECT_EQ("o", speech_monitor_.GetNextUtterance());
SendKeyPress(ui::VKEY_O);
- EXPECT_EQ("o", monitor.GetNextUtterance());
+ EXPECT_EQ("o", speech_monitor_.GetNextUtterance());
SendKeyPress(ui::VKEY_TAB);
- EXPECT_EQ("Bookmarks bar,", monitor.GetNextUtterance());
- EXPECT_EQ("Bookmark folder,", monitor.GetNextUtterance());
- EXPECT_TRUE(MatchPattern(monitor.GetNextUtterance(), "combo box*"));
+ EXPECT_EQ("Bookmarks bar,", speech_monitor_.GetNextUtterance());
+ EXPECT_EQ("Bookmark folder,", speech_monitor_.GetNextUtterance());
+ EXPECT_TRUE(MatchPattern(speech_monitor_.GetNextUtterance(), "combo box*"));
SendKeyPress(ui::VKEY_RETURN);
- EXPECT_TRUE(MatchPattern(monitor.GetNextUtterance(), "*oolbar*"));
+ EXPECT_TRUE(MatchPattern(speech_monitor_.GetNextUtterance(), "*oolbar*"));
// Wait for active window change to be announced to avoid interference from
// that below.
- while (monitor.GetNextUtterance() != "window about blank tab") {
+ while (speech_monitor_.GetNextUtterance() != "window about blank tab") {
// Do nothing.
}
// Focus bookmarks bar and listen for "foo".
chrome::ExecuteCommand(browser(), IDC_FOCUS_BOOKMARKS);
while (true) {
- std::string utterance = monitor.GetNextUtterance();
+ std::string utterance = speech_monitor_.GetNextUtterance();
VLOG(0) << "Got utterance: " << utterance;
if (utterance == "Bookmarks,")
break;
}
- EXPECT_EQ("foo,", monitor.GetNextUtterance());
- EXPECT_EQ("button", monitor.GetNextUtterance());
+ EXPECT_EQ("foo,", speech_monitor_.GetNextUtterance());
+ EXPECT_EQ("button", speech_monitor_.GetNextUtterance());
}
//
@@ -185,66 +229,96 @@ INSTANTIATE_TEST_CASE_P(
IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest, EnableSpokenFeedback) {
EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
- SpeechMonitor monitor;
AccessibilityManager::Get()->EnableSpokenFeedback(
true, ash::A11Y_NOTIFICATION_NONE);
- EXPECT_TRUE(monitor.SkipChromeVoxEnabledMessage());
+ EXPECT_TRUE(speech_monitor_.SkipChromeVoxEnabledMessage());
}
IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest, FocusToolbar) {
EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
- SpeechMonitor monitor;
AccessibilityManager::Get()->EnableSpokenFeedback(
true, ash::A11Y_NOTIFICATION_NONE);
- EXPECT_TRUE(monitor.SkipChromeVoxEnabledMessage());
+ EXPECT_TRUE(speech_monitor_.SkipChromeVoxEnabledMessage());
DisableEarcons();
chrome::ExecuteCommand(browser(), IDC_FOCUS_TOOLBAR);
// Might be "Google Chrome Toolbar" or "Chromium Toolbar".
- EXPECT_TRUE(MatchPattern(monitor.GetNextUtterance(), "*oolbar*"));
- EXPECT_EQ("Reload,", monitor.GetNextUtterance());
- EXPECT_EQ("button", monitor.GetNextUtterance());
+ EXPECT_TRUE(MatchPattern(speech_monitor_.GetNextUtterance(), "*oolbar*"));
+ EXPECT_EQ("Reload,", speech_monitor_.GetNextUtterance());
+ EXPECT_EQ("button", speech_monitor_.GetNextUtterance());
}
IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest, TypeInOmnibox) {
EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
- SpeechMonitor monitor;
AccessibilityManager::Get()->EnableSpokenFeedback(
true, ash::A11Y_NOTIFICATION_NONE);
- EXPECT_TRUE(monitor.SkipChromeVoxEnabledMessage());
+ EXPECT_TRUE(speech_monitor_.SkipChromeVoxEnabledMessage());
DisableEarcons();
// Wait for ChromeVox to finish speaking.
chrome::ExecuteCommand(browser(), IDC_FOCUS_LOCATION);
while (true) {
- std::string utterance = monitor.GetNextUtterance();
+ std::string utterance = speech_monitor_.GetNextUtterance();
VLOG(0) << "Got utterance: " << utterance;
if (utterance == "text box")
break;
}
SendKeyPress(ui::VKEY_X);
- EXPECT_EQ("x", monitor.GetNextUtterance());
+ EXPECT_EQ("x", speech_monitor_.GetNextUtterance());
SendKeyPress(ui::VKEY_Y);
- EXPECT_EQ("y", monitor.GetNextUtterance());
+ EXPECT_EQ("y", speech_monitor_.GetNextUtterance());
SendKeyPress(ui::VKEY_Z);
- EXPECT_EQ("z", monitor.GetNextUtterance());
+ EXPECT_EQ("z", speech_monitor_.GetNextUtterance());
SendKeyPress(ui::VKEY_BACK);
- EXPECT_EQ("z", monitor.GetNextUtterance());
+ EXPECT_EQ("z", speech_monitor_.GetNextUtterance());
+}
+
+IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest, ChromeVoxShiftSearch) {
+ LoadChromeVoxAndThenNavigateToURL(
+ GURL("data:text/html;charset=utf-8,<button autofocus>Click me</button>"));
+ while (true) {
+ std::string utterance = speech_monitor_.GetNextUtterance();
+ if (utterance == "Click me")
David Tseng 2014/09/22 21:52:21 Would be helpful to state why we're expecting this
+ break;
+ }
David Tseng 2014/09/22 21:52:21 Ditto.
+ EXPECT_EQ("Button", speech_monitor_.GetNextUtterance());
+
+ // Press Search+Shift+/ to enter ChromeVox's "find in page".
+ SendKeyPressWithSearchAndShift(ui::VKEY_OEM_2);
+ EXPECT_EQ("Find in page.", speech_monitor_.GetNextUtterance());
+ EXPECT_EQ("Enter a search query.", speech_monitor_.GetNextUtterance());
+}
+
+IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest, ChromeVoxPrefixKey) {
+ LoadChromeVoxAndThenNavigateToURL(
+ GURL("data:text/html;charset=utf-8,<button autofocus>Click me</button>"));
+ while (true) {
+ std::string utterance = speech_monitor_.GetNextUtterance();
+ if (utterance == "Click me")
+ break;
+ }
+ EXPECT_EQ("Button", speech_monitor_.GetNextUtterance());
+
+ // Press the prefix key Ctrl+';' followed by '/'
+ // to enter ChromeVox's "find in page".
+ SendKeyPressWithControl(ui::VKEY_OEM_1);
+ SendKeyPress(ui::VKEY_OEM_2);
+ EXPECT_EQ("Find in page.", speech_monitor_.GetNextUtterance());
+ EXPECT_EQ("Enter a search query.", speech_monitor_.GetNextUtterance());
}
IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest, TouchExploreStatusTray) {
EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
- SpeechMonitor monitor;
AccessibilityManager::Get()->EnableSpokenFeedback(
true, ash::A11Y_NOTIFICATION_NONE);
- EXPECT_TRUE(monitor.SkipChromeVoxEnabledMessage());
+ EXPECT_TRUE(speech_monitor_.SkipChromeVoxEnabledMessage());
DisableEarcons();
SimulateTouchScreenInChromeVox();
@@ -254,10 +328,10 @@ IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest, TouchExploreStatusTray) {
ash::SystemTray* tray = ash::Shell::GetInstance()->GetPrimarySystemTray();
tray->NotifyAccessibilityEvent(ui::AX_EVENT_HOVER, true);
- EXPECT_EQ("Status tray,", monitor.GetNextUtterance());
- EXPECT_TRUE(MatchPattern(monitor.GetNextUtterance(), "time*,"));
- EXPECT_TRUE(MatchPattern(monitor.GetNextUtterance(), "Battery*,"));
- EXPECT_EQ("button", monitor.GetNextUtterance());
+ EXPECT_EQ("Status tray,", speech_monitor_.GetNextUtterance());
+ EXPECT_TRUE(MatchPattern(speech_monitor_.GetNextUtterance(), "time*,"));
+ EXPECT_TRUE(MatchPattern(speech_monitor_.GetNextUtterance(), "Battery*,"));
+ EXPECT_EQ("button", speech_monitor_.GetNextUtterance());
}
//
@@ -284,17 +358,16 @@ class GuestSpokenFeedbackTest : public LoggedInSpokenFeedbackTest {
IN_PROC_BROWSER_TEST_F(GuestSpokenFeedbackTest, FocusToolbar) {
EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
- SpeechMonitor monitor;
AccessibilityManager::Get()->EnableSpokenFeedback(
true, ash::A11Y_NOTIFICATION_NONE);
- EXPECT_TRUE(monitor.SkipChromeVoxEnabledMessage());
+ EXPECT_TRUE(speech_monitor_.SkipChromeVoxEnabledMessage());
DisableEarcons();
chrome::ExecuteCommand(browser(), IDC_FOCUS_TOOLBAR);
// Might be "Google Chrome Toolbar" or "Chromium Toolbar".
- EXPECT_TRUE(MatchPattern(monitor.GetNextUtterance(), "*oolbar*"));
- EXPECT_EQ("Reload,", monitor.GetNextUtterance());
- EXPECT_EQ("button", monitor.GetNextUtterance());
+ EXPECT_TRUE(MatchPattern(speech_monitor_.GetNextUtterance(), "*oolbar*"));
+ EXPECT_EQ("Reload,", speech_monitor_.GetNextUtterance());
+ EXPECT_EQ("button", speech_monitor_.GetNextUtterance());
}
//
@@ -317,6 +390,8 @@ class OobeSpokenFeedbackTest : public InProcessBrowserTest {
SetProfileForTest(ProfileHelper::GetSigninProfile());
}
+ SpeechMonitor speech_monitor_;
+
private:
DISALLOW_COPY_AND_ASSIGN(OobeSpokenFeedbackTest);
};
@@ -331,18 +406,18 @@ IN_PROC_BROWSER_TEST_F(OobeSpokenFeedbackTest, DISABLED_SpokenFeedbackInOobe) {
views::Widget* widget = web_ui_login_view->GetWidget();
gfx::NativeWindow window = widget->GetNativeWindow();
- SpeechMonitor monitor;
AccessibilityManager::Get()->EnableSpokenFeedback(
true, ash::A11Y_NOTIFICATION_NONE);
- EXPECT_TRUE(monitor.SkipChromeVoxEnabledMessage());
+ EXPECT_TRUE(speech_monitor_.SkipChromeVoxEnabledMessage());
- EXPECT_EQ("Select your language:", monitor.GetNextUtterance());
- EXPECT_EQ("English ( United States)", monitor.GetNextUtterance());
- EXPECT_TRUE(MatchPattern(monitor.GetNextUtterance(), "Combo box * of *"));
+ EXPECT_EQ("Select your language:", speech_monitor_.GetNextUtterance());
+ EXPECT_EQ("English ( United States)", speech_monitor_.GetNextUtterance());
+ EXPECT_TRUE(MatchPattern(speech_monitor_.GetNextUtterance(),
+ "Combo box * of *"));
ASSERT_TRUE(
ui_test_utils::SendKeyPressToWindowSync(
window, ui::VKEY_TAB, false, false, false, false));
- EXPECT_EQ("Select your keyboard:", monitor.GetNextUtterance());
+ EXPECT_EQ("Select your keyboard:", speech_monitor_.GetNextUtterance());
}
} // namespace chromeos
« no previous file with comments | « no previous file | ui/aura/test/ui_controls_factory_ozone.cc » ('j') | ui/aura/test/ui_controls_factory_ozone.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698