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 9 using chromeos::EarconType; 10 using chromeos::WizardAccessibilityHandler; 11 12 namespace chromeos { 13 14 class 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 32 TEST_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 88 TEST_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