Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter_unittest.cc

Issue 1211003002: Revert of Proposed alternative for supporting ChromeVox keyboard commands. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 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 "ash/shell.h"
6 #include "ash/test/ash_test_base.h"
7 #include "chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter.h "
8 #include "ui/aura/window.h"
9 #include "ui/aura/window_tree_host.h"
10 #include "ui/events/event.h"
11 #include "ui/events/event_constants.h"
12 #include "ui/events/keycodes/keyboard_codes.h"
13 #include "ui/events/test/event_generator.h"
14
15 // Records all key events.
16 class EventCapturer : public ui::EventHandler {
17 public:
18 EventCapturer() {}
19 ~EventCapturer() override {}
20
21 void Reset() { events_.clear(); }
22
23 void OnEvent(ui::Event* event) override {
24 if (event->IsKeyEvent())
25 events_.push_back(new ui::KeyEvent(static_cast<ui::KeyEvent&>(*event)));
26 }
27
28 const ScopedVector<ui::KeyEvent>& captured_events() const { return events_; }
29
30 private:
31 ScopedVector<ui::KeyEvent> events_;
32
33 DISALLOW_COPY_AND_ASSIGN(EventCapturer);
34 };
35
36 class SpokenFeedbackEventRewriterTest
37 : public ash::test::AshTestBase,
38 public SpokenFeedbackEventRewriterDelegate {
39 public:
40 SpokenFeedbackEventRewriterTest()
41 : spoken_feedback_event_rewriter_(new SpokenFeedbackEventRewriter(this)),
42 is_spoken_feedback_enabled_(false),
43 dispatch_result_(false) {}
44
45 void SetUp() override {
46 ash::test::AshTestBase::SetUp();
47 CurrentContext()->AddPreTargetHandler(&event_capturer_);
48 CurrentContext()->GetHost()->GetEventSource()->AddEventRewriter(
49 spoken_feedback_event_rewriter_.get());
50 generator_.reset(new ui::test::EventGenerator(CurrentContext()));
51 }
52
53 void TearDown() override {
54 generator_.reset();
55 CurrentContext()->GetHost()->GetEventSource()->RemoveEventRewriter(
56 spoken_feedback_event_rewriter_.get());
57 CurrentContext()->RemovePreTargetHandler(&event_capturer_);
58 ash::test::AshTestBase::TearDown();
59 }
60
61 protected:
62 scoped_ptr<ui::test::EventGenerator> generator_;
63 EventCapturer event_capturer_;
64
65 void set_is_spoken_feedback_enabled(bool enabled) {
66 is_spoken_feedback_enabled_ = enabled;
67 }
68
69 void set_dispatch_result(bool result) { dispatch_result_ = result; }
70
71 private:
72 // SpokenFeedbackEventRewriterDelegate:
73 bool IsSpokenFeedbackEnabled() const override {
74 return is_spoken_feedback_enabled_;
75 }
76
77 bool DispatchKeyToChromeVox(ui::KeyEvent key_event) override {
78 return dispatch_result_;
79 }
80
81 scoped_ptr<SpokenFeedbackEventRewriter> spoken_feedback_event_rewriter_;
82 bool is_spoken_feedback_enabled_;
83 bool dispatch_result_;
84
85 DISALLOW_COPY_AND_ASSIGN(SpokenFeedbackEventRewriterTest);
86 };
87
88 TEST_F(SpokenFeedbackEventRewriterTest, PressAndReleaseCvoxKeys) {
89 // Mock ChromeVox enabled.
90 set_is_spoken_feedback_enabled(true);
91
92 // Send Search+Shift.
93 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN);
94 ASSERT_EQ(1U, event_capturer_.captured_events().size());
95 generator_->PressKey(ui::VKEY_SHIFT, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN);
96 ASSERT_EQ(2U, event_capturer_.captured_events().size());
97
98 // Mock successful commands lookup and dispatch.
99 set_dispatch_result(true);
100
101 // Send the right arrow key, which gets successfully looked up and dispatched
102 // as a ChromeVox command, so the event gets discarded.
103 generator_->PressKey(ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN);
104 ASSERT_EQ(2U, event_capturer_.captured_events().size());
105
106 event_capturer_.Reset();
107
108 // Released keys previously captured get eaten even without successful
109 // dispatch.
110 set_dispatch_result(false);
111 generator_->ReleaseKey(ui::VKEY_RIGHT,
112 ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN);
113 ASSERT_EQ(0U, event_capturer_.captured_events().size());
114
115 // Modifiers were not discarded, so we let them continue.
116 generator_->ReleaseKey(ui::VKEY_SHIFT, ui::EF_COMMAND_DOWN);
117 generator_->ReleaseKey(ui::VKEY_LWIN, 0);
118 ASSERT_EQ(2U, event_capturer_.captured_events().size());
119 }
120
121 TEST_F(SpokenFeedbackEventRewriterTest, KeysNotEatenWithChromeVoxDisabled) {
122 // Send Search+Shift+Right.
123 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN);
124 ASSERT_EQ(1U, event_capturer_.captured_events().size());
125 generator_->PressKey(ui::VKEY_SHIFT, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN);
126 ASSERT_EQ(2U, event_capturer_.captured_events().size());
127
128 // Mock successful commands lookup and dispatch; shouldn't matter either way.
129 set_dispatch_result(true);
130 generator_->PressKey(ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN);
131 ASSERT_EQ(3U, event_capturer_.captured_events().size());
132
133 // Released keys shouldn't get eaten.
134 set_dispatch_result(false);
135 generator_->ReleaseKey(ui::VKEY_RIGHT,
136 ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN);
137 generator_->ReleaseKey(ui::VKEY_SHIFT, ui::EF_COMMAND_DOWN);
138 generator_->ReleaseKey(ui::VKEY_LWIN, 0);
139 ASSERT_EQ(6U, event_capturer_.captured_events().size());
140
141 // Try releasing more keys.
142 generator_->ReleaseKey(ui::VKEY_RIGHT, 0);
143 generator_->ReleaseKey(ui::VKEY_SHIFT, 0);
144 generator_->ReleaseKey(ui::VKEY_LWIN, 0);
145 ASSERT_EQ(9U, event_capturer_.captured_events().size());
146 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698