1// Copyright (c) 2010 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#include "chrome/browser/accessibility_events.h"
6#include "chrome/browser/chromeos/login/wizard_accessibility_handler.h"
7#include "testing/gtest/include/gtest/gtest.h"
8
9using chromeos::EarconType;
10using chromeos::WizardAccessibilityHandler;
11
12namespace chromeos {
13
14class WizardAccessibilityHandlerTest : public testing::Test {
15 protected:
16  void ChangeText(WizardAccessibilityHandler* handler,
17                  AccessibilityTextBoxInfo* textbox_info,
18                  const std::string& value,
19                  int selection_start,
20                  int selection_end,
21                  std::string* description) {
22    textbox_info->SetValue(value, selection_start, selection_end);
23    EarconType earcon = chromeos::NO_EARCON;
24    handler->DescribeAccessibilityEvent(
25        NotificationType::ACCESSIBILITY_TEXT_CHANGED,
26        textbox_info,
27        description,
28        &earcon);
29  }
30};
31
32TEST_F(WizardAccessibilityHandlerTest, TestFocusEvents) {
33  WizardAccessibilityHandler handler;
34
35  std::string description;
36  EarconType earcon;
37
38  // No need to test every possible control, but test several types
39  // to exercise different types of string concatenation.
40
41  // NOTE: unittests are forced to run under the en-US locale, so it's
42  // safe to do these string comparisons without using l10n_util.
43
44  // Test a simple control.
45  std::string button_name = "Save";
46  AccessibilityButtonInfo button_info(NULL, button_name);
47  handler.DescribeAccessibilityEvent(
48      NotificationType::ACCESSIBILITY_CONTROL_FOCUSED,
49      &button_info,
50      &description,
51      &earcon);
52  EXPECT_EQ(chromeos::EARCON_BUTTON, earcon);
53  EXPECT_EQ("Save Button", description);
54
55  // Test a control with multiple states.
56  std::string checkbox_name = "Accessibility";
57  AccessibilityCheckboxInfo checkbox_info(NULL, checkbox_name, false);
58  handler.DescribeAccessibilityEvent(
59      NotificationType::ACCESSIBILITY_CONTROL_FOCUSED,
60      &checkbox_info,
61      &description,
62      &earcon);
63  EXPECT_EQ(chromeos::EARCON_CHECK_OFF, earcon);
64  EXPECT_EQ("Accessibility Unchecked check box", description);
65  checkbox_info.SetChecked(true);
66  handler.DescribeAccessibilityEvent(
67      NotificationType::ACCESSIBILITY_CONTROL_FOCUSED,
68      &checkbox_info,
69      &description,
70      &earcon);
71  EXPECT_EQ(chromeos::EARCON_CHECK_ON, earcon);
72  EXPECT_EQ("Accessibility Checked check box", description);
73
74  // Test a control with a value and index.
75  std::string combobox_name = "Language";
76  std::string combobox_value = "English";
77  AccessibilityComboBoxInfo combobox_info(
78      NULL, combobox_name, combobox_value, 12, 35);
79  handler.DescribeAccessibilityEvent(
80      NotificationType::ACCESSIBILITY_CONTROL_FOCUSED,
81      &combobox_info,
82      &description,
83      &earcon);
84  EXPECT_EQ(chromeos::EARCON_LISTBOX, earcon);
85  EXPECT_EQ("English Language Combo box 13 of 35", description);
86}
87
88TEST_F(WizardAccessibilityHandlerTest, TestTextEvents) {
89  WizardAccessibilityHandler handler;
90
91  std::string description;
92  EarconType earcon;
93
94  AccessibilityTextBoxInfo textbox_info(NULL, "", false);
95  handler.DescribeAccessibilityEvent(
96      NotificationType::ACCESSIBILITY_CONTROL_FOCUSED,
97      &textbox_info,
98      &description,
99      &earcon);
100  EXPECT_EQ("Text box", description);
101  EXPECT_EQ(chromeos::EARCON_TEXTBOX, earcon);
102
103  // Type "hello world.", one character at a time.
104  ChangeText(&handler, &textbox_info, "h", 1, 1, &description);
105  EXPECT_EQ("h", description);
106  ChangeText(&handler, &textbox_info, "he", 2, 2, &description);
107  EXPECT_EQ("e", description);
108  ChangeText(&handler, &textbox_info, "hel", 3, 3, &description);
109  EXPECT_EQ("l", description);
110  ChangeText(&handler, &textbox_info, "hell", 4, 4, &description);
111  EXPECT_EQ("l", description);
112  ChangeText(&handler, &textbox_info, "hello", 5, 5, &description);
113  EXPECT_EQ("o", description);
114  ChangeText(&handler, &textbox_info, "hello ", 6, 6, &description);
115  EXPECT_EQ("Space", description);
116  ChangeText(&handler, &textbox_info, "hello w", 7, 7, &description);
117  EXPECT_EQ("w", description);
118  ChangeText(&handler, &textbox_info, "hello wo", 8, 8, &description);
119  EXPECT_EQ("o", description);
120  ChangeText(&handler, &textbox_info, "hello wor", 9, 9, &description);
121  EXPECT_EQ("r", description);
122  ChangeText(&handler, &textbox_info, "hello worl", 10, 10, &description);
123  EXPECT_EQ("l", description);
124  ChangeText(&handler, &textbox_info, "hello world", 11, 11, &description);
125  EXPECT_EQ("d", description);
126  ChangeText(&handler, &textbox_info, "hello world.", 12, 12, &description);
127  EXPECT_EQ("Period", description);
128
129  // Move by characters and by words.
130  ChangeText(&handler, &textbox_info, "hello world.", 11, 11, &description);
131  EXPECT_EQ("Period", description);
132  ChangeText(&handler, &textbox_info, "hello world.", 6, 6, &description);
133  EXPECT_EQ("world", description);
134  ChangeText(&handler, &textbox_info, "hello world.", 0, 0, &description);
135  EXPECT_EQ("hello ", description);
136  ChangeText(&handler, &textbox_info, "hello world.", 1, 1, &description);
137  EXPECT_EQ("h", description);
138  ChangeText(&handler, &textbox_info, "hello world.", 5, 5, &description);
139  EXPECT_EQ("ello", description);
140
141  // Delete characters and words.
142  ChangeText(&handler, &textbox_info, "hell world.", 4, 4, &description);
143  EXPECT_EQ("o", description);
144  ChangeText(&handler, &textbox_info, "hel world.", 3, 3, &description);
145  EXPECT_EQ("l", description);
146  ChangeText(&handler, &textbox_info, " world.", 0, 0, &description);
147  EXPECT_EQ("hel", description);
148
149  // Select characters and words.
150  ChangeText(&handler, &textbox_info, " world.", 0, 1, &description);
151  EXPECT_EQ("Space", description);
152  ChangeText(&handler, &textbox_info, " world.", 0, 4, &description);
153  EXPECT_EQ("wor", description);
154  ChangeText(&handler, &textbox_info, " world.", 1, 4, &description);
155  EXPECT_EQ("Space", description);
156  ChangeText(&handler, &textbox_info, " world.", 4, 4, &description);
157  EXPECT_EQ("Unselected", description);
158
159  // If the string suddenly changes, it should just speak the new value.
160  ChangeText(&handler, &textbox_info, "Potato", 0, 0, &description);
161  EXPECT_EQ("Potato", description);
162}
163
164}
165