Home | History | Annotate | Download | only in login
      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