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

Side by Side Diff: ui/chromeos/touch_accessibility_enabler_unittest.cc

Issue 2476843003: Toggle spoken feedback if two fingers are held down. (Closed)
Patch Set: Skip events rewritten by TouchExplorationController Created 4 years, 1 month 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 2016 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 "ui/chromeos/touch_accessibility_enabler.h"
6
7 #include "base/macros.h"
8 #include "base/test/simple_test_tick_clock.h"
9 #include "base/time/time.h"
10 #include "ui/aura/test/aura_test_base.h"
11 #include "ui/aura/window.h"
12 #include "ui/events/event.h"
13 #include "ui/events/event_utils.h"
14 #include "ui/events/gestures/gesture_provider_aura.h"
15 #include "ui/events/test/event_generator.h"
16 #include "ui/events/test/events_test_utils.h"
17 #include "ui/gfx/geometry/point.h"
18
19 namespace ui {
20
21 namespace {
22
23 class MockTouchAccessibilityEnablerDelegate
24 : public ui::TouchAccessibilityEnablerDelegate {
25 public:
26 void PlaySpokenFeedbackToggleCountdown(int tick_count) override {
27 ++feedback_progress_sound_count_;
28 }
29 void ToggleSpokenFeedback() override { toggle_spoken_feedback_ = true; }
30
31 size_t feedback_progress_sound_count() const {
32 return feedback_progress_sound_count_;
33 }
34 bool toggle_spoken_feedback() const { return toggle_spoken_feedback_; }
35
36 private:
37 size_t feedback_progress_sound_count_ = 0;
38 bool toggle_spoken_feedback_ = false;
39 };
oshima 2016/11/14 22:02:47 nit: DISALLOW_COPY_AND_ASSIGN
dmazzoni 2016/11/14 23:17:16 Done.
40
41 class TouchAccessibilityEnablerTest : public aura::test::AuraTestBase {
42 public:
43 TouchAccessibilityEnablerTest() {}
44 ~TouchAccessibilityEnablerTest() override {}
45
46 void SetUp() override {
47 aura::test::AuraTestBase::SetUp();
48
49 generator_.reset(new test::EventGenerator(root_window()));
50
51 simulated_clock_ = new base::SimpleTestTickClock();
52 // Tests fail if time is ever 0.
53 simulated_clock_->Advance(base::TimeDelta::FromMilliseconds(10));
54 // ui takes ownership of the tick clock.
55 ui::SetEventTickClockForTesting(
56 std::unique_ptr<base::TickClock>(simulated_clock_));
57
58 enabler_.reset(new TouchAccessibilityEnabler(root_window(), &delegate_));
59 }
60
61 void TearDown() override {
62 enabler_.reset(nullptr);
63 ui::SetEventTickClockForTesting(nullptr);
64 aura::test::AuraTestBase::TearDown();
65 }
66
67 protected:
68 base::TimeTicks Now() {
69 // This is the same as what EventTimeForNow() does, but here we do it
70 // with our simulated clock.
71 return simulated_clock_->NowTicks();
72 }
73
74 std::unique_ptr<test::EventGenerator> generator_;
75 // Owned by |ui|.
76 base::SimpleTestTickClock* simulated_clock_ = nullptr;
77 MockTouchAccessibilityEnablerDelegate delegate_;
78 std::unique_ptr<TouchAccessibilityEnabler> enabler_;
79 ui::GestureDetector::Config gesture_detector_config_;
80
81 DISALLOW_COPY_AND_ASSIGN(TouchAccessibilityEnablerTest);
82 };
83
84 } // namespace
85
86 TEST_F(TouchAccessibilityEnablerTest, EntersOneFingerDownMode) {
87 EXPECT_TRUE(enabler_->IsInNoFingersDownForTesting());
88 EXPECT_FALSE(enabler_->IsInOneFingerDownForTesting());
89 generator_->set_current_location(gfx::Point(11, 12));
90 generator_->PressTouch();
91
92 EXPECT_FALSE(enabler_->IsInNoFingersDownForTesting());
93 EXPECT_TRUE(enabler_->IsInOneFingerDownForTesting());
94 }
95
96 TEST_F(TouchAccessibilityEnablerTest, EntersTwoFingersDownMode) {
97 EXPECT_TRUE(enabler_->IsInNoFingersDownForTesting());
98 generator_->set_current_location(gfx::Point(11, 12));
99 generator_->PressTouchId(1);
100
101 generator_->set_current_location(gfx::Point(22, 34));
102 generator_->PressTouchId(2);
103
104 EXPECT_TRUE(enabler_->IsInTwoFingersDownForTesting());
105 }
106
107 TEST_F(TouchAccessibilityEnablerTest, PlaysProgressSound) {
108 EXPECT_TRUE(enabler_->IsInNoFingersDownForTesting());
109 generator_->set_current_location(gfx::Point(11, 12));
110 generator_->PressTouchId(1);
111
112 generator_->set_current_location(gfx::Point(22, 34));
113 generator_->PressTouchId(2);
114
115 EXPECT_TRUE(enabler_->IsInTwoFingersDownForTesting());
116 EXPECT_EQ(0U, delegate_.feedback_progress_sound_count());
117
118 enabler_->TriggerOnTimerForTesting();
119 EXPECT_EQ(0U, delegate_.feedback_progress_sound_count());
120
121 simulated_clock_->Advance(base::TimeDelta::FromMilliseconds(500));
122 enabler_->TriggerOnTimerForTesting();
123 EXPECT_EQ(1U, delegate_.feedback_progress_sound_count());
124 }
125
126 TEST_F(TouchAccessibilityEnablerTest, TogglesSpokenFeedback) {
127 EXPECT_TRUE(enabler_->IsInNoFingersDownForTesting());
128 generator_->set_current_location(gfx::Point(11, 12));
129 generator_->PressTouchId(1);
130
131 generator_->set_current_location(gfx::Point(22, 34));
132 generator_->PressTouchId(2);
133
134 EXPECT_TRUE(enabler_->IsInTwoFingersDownForTesting());
135 EXPECT_FALSE(delegate_.toggle_spoken_feedback());
136
137 enabler_->TriggerOnTimerForTesting();
138 EXPECT_FALSE(delegate_.toggle_spoken_feedback());
139
140 simulated_clock_->Advance(base::TimeDelta::FromMilliseconds(3500));
141 enabler_->TriggerOnTimerForTesting();
142 EXPECT_TRUE(delegate_.toggle_spoken_feedback());
143 }
144
145 TEST_F(TouchAccessibilityEnablerTest, ThreeFingersCancelsDetection) {
146 EXPECT_TRUE(enabler_->IsInNoFingersDownForTesting());
147 generator_->set_current_location(gfx::Point(11, 12));
148 generator_->PressTouchId(1);
149
150 generator_->set_current_location(gfx::Point(22, 34));
151 generator_->PressTouchId(2);
152
153 EXPECT_TRUE(enabler_->IsInTwoFingersDownForTesting());
154
155 generator_->set_current_location(gfx::Point(33, 56));
156 generator_->PressTouchId(3);
157
158 EXPECT_TRUE(enabler_->IsInWaitForNoFingersForTesting());
159 }
160
161 TEST_F(TouchAccessibilityEnablerTest, MovingFingerPastSlopCancelsDetection) {
162 EXPECT_TRUE(enabler_->IsInNoFingersDownForTesting());
163 generator_->set_current_location(gfx::Point(11, 12));
164 generator_->PressTouch();
165
166 int slop = gesture_detector_config_.double_tap_slop;
167 int half_slop = slop / 2;
168
169 generator_->MoveTouch(gfx::Point(11 + half_slop, 12));
170 EXPECT_TRUE(enabler_->IsInOneFingerDownForTesting());
171
172 generator_->MoveTouch(gfx::Point(11 + slop + 1, 12));
173 EXPECT_TRUE(enabler_->IsInWaitForNoFingersForTesting());
174 }
175
176 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698