1731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Use of this source code is governed by a BSD-style license that can be
3731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// found in the LICENSE file.
4731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
5731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/accessibility_events.h"
6731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/chromeos/login/wizard_accessibility_handler.h"
7731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "testing/gtest/include/gtest/gtest.h"
8731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
9731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickusing chromeos::EarconType;
10731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickusing chromeos::WizardAccessibilityHandler;
11731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
12731df977c0511bca2206b5f333555b1205ff1f43Iain Merricknamespace chromeos {
13731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
14731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass WizardAccessibilityHandlerTest : public testing::Test {
15731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick protected:
16731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void ChangeText(WizardAccessibilityHandler* handler,
17731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                  AccessibilityTextBoxInfo* textbox_info,
18731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                  const std::string& value,
19731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                  int selection_start,
20731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                  int selection_end,
21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                  std::string* description) {
22731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    textbox_info->SetValue(value, selection_start, selection_end);
23731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EarconType earcon = chromeos::NO_EARCON;
24731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    handler->DescribeAccessibilityEvent(
25731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        NotificationType::ACCESSIBILITY_TEXT_CHANGED,
26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        textbox_info,
27731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        description,
28731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        &earcon);
29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  }
30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick};
31731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
32731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickTEST_F(WizardAccessibilityHandlerTest, TestFocusEvents) {
33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  WizardAccessibilityHandler handler;
34731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
35731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  std::string description;
36731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EarconType earcon;
37731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
38731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // No need to test every possible control, but test several types
39731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // to exercise different types of string concatenation.
40731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
41731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // NOTE: unittests are forced to run under the en-US locale, so it's
42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // safe to do these string comparisons without using l10n_util.
43731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
44731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Test a simple control.
45731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  std::string button_name = "Save";
46731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  AccessibilityButtonInfo button_info(NULL, button_name);
47731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  handler.DescribeAccessibilityEvent(
48731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      NotificationType::ACCESSIBILITY_CONTROL_FOCUSED,
49731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      &button_info,
50731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      &description,
51731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      &earcon);
52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ(chromeos::EARCON_BUTTON, earcon);
53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("Save Button", description);
54731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
55731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Test a control with multiple states.
56731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  std::string checkbox_name = "Accessibility";
57731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  AccessibilityCheckboxInfo checkbox_info(NULL, checkbox_name, false);
58731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  handler.DescribeAccessibilityEvent(
59731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      NotificationType::ACCESSIBILITY_CONTROL_FOCUSED,
60731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      &checkbox_info,
61731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      &description,
62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      &earcon);
63731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ(chromeos::EARCON_CHECK_OFF, earcon);
64731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("Accessibility Unchecked check box", description);
65731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  checkbox_info.SetChecked(true);
66731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  handler.DescribeAccessibilityEvent(
67731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      NotificationType::ACCESSIBILITY_CONTROL_FOCUSED,
68731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      &checkbox_info,
69731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      &description,
70731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      &earcon);
71731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ(chromeos::EARCON_CHECK_ON, earcon);
72731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("Accessibility Checked check box", description);
73731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
74731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Test a control with a value and index.
75731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  std::string combobox_name = "Language";
76731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  std::string combobox_value = "English";
77731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  AccessibilityComboBoxInfo combobox_info(
78731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      NULL, combobox_name, combobox_value, 12, 35);
79731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  handler.DescribeAccessibilityEvent(
80731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      NotificationType::ACCESSIBILITY_CONTROL_FOCUSED,
81731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      &combobox_info,
82731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      &description,
83731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      &earcon);
84731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ(chromeos::EARCON_LISTBOX, earcon);
85731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("English Language Combo box 13 of 35", description);
86731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
87731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
88731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickTEST_F(WizardAccessibilityHandlerTest, TestTextEvents) {
89731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  WizardAccessibilityHandler handler;
90731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
91731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  std::string description;
92731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EarconType earcon;
93731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
94731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  AccessibilityTextBoxInfo textbox_info(NULL, "", false);
95731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  handler.DescribeAccessibilityEvent(
96731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      NotificationType::ACCESSIBILITY_CONTROL_FOCUSED,
97731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      &textbox_info,
98731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      &description,
99731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      &earcon);
100731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("Text box", description);
101731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ(chromeos::EARCON_TEXTBOX, earcon);
102731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
103731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Type "hello world.", one character at a time.
104731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "h", 1, 1, &description);
105731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("h", description);
106731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "he", 2, 2, &description);
107731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("e", description);
108731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hel", 3, 3, &description);
109731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("l", description);
110731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hell", 4, 4, &description);
111731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("l", description);
112731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hello", 5, 5, &description);
113731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("o", description);
114731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hello ", 6, 6, &description);
115731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("Space", description);
116731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hello w", 7, 7, &description);
117731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("w", description);
118731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hello wo", 8, 8, &description);
119731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("o", description);
120731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hello wor", 9, 9, &description);
121731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("r", description);
122731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hello worl", 10, 10, &description);
123731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("l", description);
124731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hello world", 11, 11, &description);
125731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("d", description);
126731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hello world.", 12, 12, &description);
127731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("Period", description);
128731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
129731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Move by characters and by words.
130731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hello world.", 11, 11, &description);
131731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("Period", description);
132731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hello world.", 6, 6, &description);
133731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("world", description);
134731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hello world.", 0, 0, &description);
135731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("hello ", description);
136731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hello world.", 1, 1, &description);
137731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("h", description);
138731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hello world.", 5, 5, &description);
139731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("ello", description);
140731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
141731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Delete characters and words.
142731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hell world.", 4, 4, &description);
143731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("o", description);
144731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "hel world.", 3, 3, &description);
145731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("l", description);
146731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, " world.", 0, 0, &description);
147731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("hel", description);
148731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
149731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Select characters and words.
150731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, " world.", 0, 1, &description);
151731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("Space", description);
152731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, " world.", 0, 4, &description);
153731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("wor", description);
154731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, " world.", 1, 4, &description);
155731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("Space", description);
156731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, " world.", 4, 4, &description);
157731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("Unselected", description);
158731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
159731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // If the string suddenly changes, it should just speak the new value.
160731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ChangeText(&handler, &textbox_info, "Potato", 0, 0, &description);
161731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_EQ("Potato", description);
162731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
163731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
164731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
165