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