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

Side by Side Diff: ui/events/cocoa/events_mac_unittest.mm

Issue 2193153002: MacViews: Send Mac scrollWheel NSEvents as ui::ET_SCROLL (ui::ScrollEvent). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@20160728-MacViews-ScrollLayers
Patch Set: NSDictionary subscripting Created 4 years, 2 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
« no previous file with comments | « ui/events/cocoa/events_mac.mm ('k') | ui/events/event.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import <Cocoa/Cocoa.h> 5 #import <Cocoa/Cocoa.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <memory> 8 #include <memory>
9 9
10 #include "base/mac/scoped_cftyperef.h" 10 #include "base/mac/scoped_cftyperef.h"
11 #include "base/mac/sdk_forward_declarations.h" 11 #include "base/mac/sdk_forward_declarations.h"
12 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
14 #import "ui/events/cocoa/cocoa_event_utils.h"
14 #include "ui/events/event_constants.h" 15 #include "ui/events/event_constants.h"
15 #include "ui/events/event_utils.h" 16 #include "ui/events/event_utils.h"
16 #import "ui/events/test/cocoa_test_event_utils.h" 17 #import "ui/events/test/cocoa_test_event_utils.h"
17 #include "ui/gfx/geometry/point.h" 18 #include "ui/gfx/geometry/point.h"
18 #import "ui/gfx/test/ui_cocoa_test_helper.h" 19 #import "ui/gfx/test/ui_cocoa_test_helper.h"
19 20
20 namespace ui { 21 namespace ui {
21 22
22 namespace { 23 namespace {
23 24
(...skipping 30 matching lines...) Expand all
54 base::ScopedCFTypeRef<CGEventRef> mouse( 55 base::ScopedCFTypeRef<CGEventRef> mouse(
55 CGEventCreateMouseEvent(nullptr, type, screen_point, other_button)); 56 CGEventCreateMouseEvent(nullptr, type, screen_point, other_button));
56 CGEventSetFlags(mouse, event_flags); 57 CGEventSetFlags(mouse, event_flags);
57 return cocoa_test_event_utils::AttachWindowToCGEvent(mouse, test_window()); 58 return cocoa_test_event_utils::AttachWindowToCGEvent(mouse, test_window());
58 } 59 }
59 60
60 // Creates a scroll event from a "real" mouse wheel (i.e. not a trackpad). 61 // Creates a scroll event from a "real" mouse wheel (i.e. not a trackpad).
61 NSEvent* TestScrollEvent(const gfx::Point& window_location, 62 NSEvent* TestScrollEvent(const gfx::Point& window_location,
62 int32_t delta_x, 63 int32_t delta_x,
63 int32_t delta_y) { 64 int32_t delta_y) {
65 bool precise = false;
64 return cocoa_test_event_utils::TestScrollEvent( 66 return cocoa_test_event_utils::TestScrollEvent(
65 Flip(window_location).ToCGPoint(), test_window(), delta_x, delta_y); 67 Flip(window_location).ToCGPoint(), test_window(), delta_x, delta_y,
68 precise, NSEventPhaseNone, NSEventPhaseNone);
66 } 69 }
67 70
71 // Creates the sequence of events generated by a trackpad scroll.
72 // |initial_rest| indicates whether there is a pause before scrolling starts.
73 // |delta_y| is the portion to scroll without momentum (fingers on the
74 // trackpad). |momentum_delta_y| is the momentum portion. A zero delta skips
75 // that phase (if both are zero, the |initial_rest| is cancelled).
76 NSArray* TrackpadScrollSequence(bool initial_rest,
77 int32_t delta_y,
78 int32_t momentum_delta_y);
79
80 protected:
81 const gfx::Point default_location_ = gfx::Point(10, 20);
82
68 private: 83 private:
69 DISALLOW_COPY_AND_ASSIGN(EventsMacTest); 84 DISALLOW_COPY_AND_ASSIGN(EventsMacTest);
70 }; 85 };
71 86
87 // Trackpad scroll sequences below determined empirically on OSX 10.11 (linking
88 // to 10.10 SDK), and dumping out with NSLog in -[NSView scrollWheel:]. First
89 // created using a Magic Trackpad 2 on a MacPro. See the Trackpad* test cases
90 // below for example event streams.
91 NSArray* EventsMacTest::TrackpadScrollSequence(bool initial_rest,
92 int32_t delta_y,
93 int32_t momentum_delta_y) {
94 int32_t delta_x = 0; // Just test vertical scrolling for now.
95 base::scoped_nsobject<NSMutableArray> events([[NSMutableArray alloc] init]);
96
97 // Resting part.
98 if (initial_rest) {
99 // MayBegin always has a zero delta.
100 [events addObject:cocoa_test_event_utils::TestScrollEvent(
101 Flip(default_location_).ToCGPoint(), test_window(), delta_x, 0, true,
102 NSEventPhaseMayBegin, NSEventPhaseNone)];
103 if (delta_y == 0) {
104 // Rest and release: event gets cancelled.
105 DCHECK_EQ(0, momentum_delta_y); // Pretty sure this is impossible.
106 [events addObject:cocoa_test_event_utils::TestScrollEvent(
107 Flip(default_location_).ToCGPoint(), test_window(), delta_x, 0, true,
108 NSEventPhaseCancelled, NSEventPhaseNone)];
109 return events.autorelease();
110 }
111 }
112
113 // With or without a rest, a begin is sent. It can have a non-zero
114 // deviceDeltaY but regular deltaY is always 0.
115 [events addObject:cocoa_test_event_utils::TestScrollEvent(
116 Flip(default_location_).ToCGPoint(), test_window(), delta_x, 0, true,
117 NSEventPhaseBegan, NSEventPhaseNone)];
118
119 [events addObject:cocoa_test_event_utils::TestScrollEvent(
120 Flip(default_location_).ToCGPoint(), test_window(), delta_x, delta_y,
121 true, NSEventPhaseChanged, NSEventPhaseNone)];
122
123 // With or without momentum, an end is sent for the non-momentum part.
124 [events addObject:cocoa_test_event_utils::TestScrollEvent(
125 Flip(default_location_).ToCGPoint(), test_window(), delta_x, 0, true,
126 NSEventPhaseEnded, NSEventPhaseNone)];
127
128 if (momentum_delta_y == 0)
129 return events.autorelease();
130
131 // Flick part. Basically the same, but with phase and momentumPhase swapped.
132 [events addObject:cocoa_test_event_utils::TestScrollEvent(
133 Flip(default_location_).ToCGPoint(), test_window(), delta_x, 0, true,
134 NSEventPhaseNone, NSEventPhaseBegan)];
135
136 [events addObject:cocoa_test_event_utils::TestScrollEvent(
137 Flip(default_location_).ToCGPoint(), test_window(), delta_x,
138 momentum_delta_y, true, NSEventPhaseNone, NSEventPhaseChanged)];
139
140 [events addObject:cocoa_test_event_utils::TestScrollEvent(
141 Flip(default_location_).ToCGPoint(), test_window(), delta_x, 0, true,
142 NSEventPhaseNone, NSEventPhaseEnded)];
143 return events.autorelease();
144 }
145
72 } // namespace 146 } // namespace
73 147
74 TEST_F(EventsMacTest, EventFlagsFromNative) { 148 TEST_F(EventsMacTest, EventFlagsFromNative) {
75 // Left click. 149 // Left click.
76 NSEvent* left = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp, 0); 150 NSEvent* left = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp, 0);
77 EXPECT_EQ(EF_LEFT_MOUSE_BUTTON, EventFlagsFromNative(left)); 151 EXPECT_EQ(EF_LEFT_MOUSE_BUTTON, EventFlagsFromNative(left));
78 152
79 // Right click. 153 // Right click.
80 NSEvent* right = cocoa_test_event_utils::MouseEventWithType(NSRightMouseUp, 154 NSEvent* right = cocoa_test_event_utils::MouseEventWithType(NSRightMouseUp,
81 0); 155 0);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 ui::EventFlagsFromNative(event)); 222 ui::EventFlagsFromNative(event));
149 EXPECT_EQ(location, ui::EventLocationFromNative(event)); 223 EXPECT_EQ(location, ui::EventLocationFromNative(event));
150 224
151 event = TestMouseEvent(kCGEventRightMouseUp, location, kNoEventFlags); 225 event = TestMouseEvent(kCGEventRightMouseUp, location, kNoEventFlags);
152 EXPECT_EQ(ui::ET_MOUSE_RELEASED, ui::EventTypeFromNative(event)); 226 EXPECT_EQ(ui::ET_MOUSE_RELEASED, ui::EventTypeFromNative(event));
153 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, ui::EventFlagsFromNative(event)); 227 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, ui::EventFlagsFromNative(event));
154 EXPECT_EQ(location, ui::EventLocationFromNative(event)); 228 EXPECT_EQ(location, ui::EventLocationFromNative(event));
155 229
156 // Scroll up. 230 // Scroll up.
157 event = TestScrollEvent(location, 0, 1); 231 event = TestScrollEvent(location, 0, 1);
158 EXPECT_EQ(ui::ET_MOUSEWHEEL, ui::EventTypeFromNative(event)); 232 EXPECT_EQ(ui::ET_SCROLL, ui::EventTypeFromNative(event));
159 EXPECT_EQ(0, ui::EventFlagsFromNative(event)); 233 EXPECT_EQ(0, ui::EventFlagsFromNative(event));
160 EXPECT_EQ(location.ToString(), ui::EventLocationFromNative(event).ToString()); 234 EXPECT_EQ(location.ToString(), ui::EventLocationFromNative(event).ToString());
161 offset = ui::GetMouseWheelOffset(event); 235 offset = ui::GetMouseWheelOffset(event);
162 EXPECT_GT(offset.y(), 0); 236 EXPECT_GT(offset.y(), 0);
163 EXPECT_EQ(0, offset.x()); 237 EXPECT_EQ(0, offset.x());
164 238
165 // Scroll down. 239 // Scroll down.
166 event = TestScrollEvent(location, 0, -1); 240 event = TestScrollEvent(location, 0, -1);
167 EXPECT_EQ(ui::ET_MOUSEWHEEL, ui::EventTypeFromNative(event)); 241 EXPECT_EQ(ui::ET_SCROLL, ui::EventTypeFromNative(event));
168 EXPECT_EQ(0, ui::EventFlagsFromNative(event)); 242 EXPECT_EQ(0, ui::EventFlagsFromNative(event));
169 EXPECT_EQ(location, ui::EventLocationFromNative(event)); 243 EXPECT_EQ(location, ui::EventLocationFromNative(event));
170 offset = ui::GetMouseWheelOffset(event); 244 offset = ui::GetMouseWheelOffset(event);
171 EXPECT_LT(offset.y(), 0); 245 EXPECT_LT(offset.y(), 0);
172 EXPECT_EQ(0, offset.x()); 246 EXPECT_EQ(0, offset.x());
173 247
174 // Scroll left. 248 // Scroll left.
175 event = TestScrollEvent(location, 1, 0); 249 event = TestScrollEvent(location, 1, 0);
176 EXPECT_EQ(ui::ET_MOUSEWHEEL, ui::EventTypeFromNative(event)); 250 EXPECT_EQ(ui::ET_SCROLL, ui::EventTypeFromNative(event));
177 EXPECT_EQ(0, ui::EventFlagsFromNative(event)); 251 EXPECT_EQ(0, ui::EventFlagsFromNative(event));
178 EXPECT_EQ(location, ui::EventLocationFromNative(event)); 252 EXPECT_EQ(location, ui::EventLocationFromNative(event));
179 offset = ui::GetMouseWheelOffset(event); 253 offset = ui::GetMouseWheelOffset(event);
180 EXPECT_EQ(0, offset.y()); 254 EXPECT_EQ(0, offset.y());
181 EXPECT_GT(offset.x(), 0); 255 EXPECT_GT(offset.x(), 0);
182 256
183 // Scroll right. 257 // Scroll right.
184 event = TestScrollEvent(location, -1, 0); 258 event = TestScrollEvent(location, -1, 0);
185 EXPECT_EQ(ui::ET_MOUSEWHEEL, ui::EventTypeFromNative(event)); 259 EXPECT_EQ(ui::ET_SCROLL, ui::EventTypeFromNative(event));
186 EXPECT_EQ(0, ui::EventFlagsFromNative(event)); 260 EXPECT_EQ(0, ui::EventFlagsFromNative(event));
187 EXPECT_EQ(location, ui::EventLocationFromNative(event)); 261 EXPECT_EQ(location, ui::EventLocationFromNative(event));
188 offset = ui::GetMouseWheelOffset(event); 262 offset = ui::GetMouseWheelOffset(event);
189 EXPECT_EQ(0, offset.y()); 263 EXPECT_EQ(0, offset.y());
190 EXPECT_LT(offset.x(), 0); 264 EXPECT_LT(offset.x(), 0);
191 } 265 }
192 266
193 // Test correct location when the window has a native titlebar. 267 // Test correct location when the window has a native titlebar.
194 TEST_F(EventsMacTest, NativeTitlebarEventLocation) { 268 TEST_F(EventsMacTest, NativeTitlebarEventLocation) {
195 gfx::Point location(5, 10); 269 gfx::Point location(5, 10);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 328
255 event = cocoa_test_event_utils::MouseEventWithType(NSMouseMoved, 0); 329 event = cocoa_test_event_utils::MouseEventWithType(NSMouseMoved, 0);
256 EXPECT_EQ(ui::ET_MOUSE_MOVED, ui::EventTypeFromNative(event)); 330 EXPECT_EQ(ui::ET_MOUSE_MOVED, ui::EventTypeFromNative(event));
257 331
258 event = cocoa_test_event_utils::EnterEvent(); 332 event = cocoa_test_event_utils::EnterEvent();
259 EXPECT_EQ(ui::ET_MOUSE_ENTERED, ui::EventTypeFromNative(event)); 333 EXPECT_EQ(ui::ET_MOUSE_ENTERED, ui::EventTypeFromNative(event));
260 event = cocoa_test_event_utils::ExitEvent(); 334 event = cocoa_test_event_utils::ExitEvent();
261 EXPECT_EQ(ui::ET_MOUSE_EXITED, ui::EventTypeFromNative(event)); 335 EXPECT_EQ(ui::ET_MOUSE_EXITED, ui::EventTypeFromNative(event));
262 } 336 }
263 337
338 // Verify that a mouse wheel scroll event is correctly lacking phase data.
339 TEST_F(EventsMacTest, MouseWheelScroll) {
340 int32_t wheel_delta_y = 2;
341
342 NSEvent* ns_wheel = TestScrollEvent(default_location_, 0, wheel_delta_y);
343 EXPECT_FALSE([ns_wheel hasPreciseScrollingDeltas]);
344 ui::ScrollEvent wheel(ns_wheel);
345 EXPECT_EQ(ui::ET_SCROLL, wheel.type());
346
347 // Currently wheel events still say two for finger count, but this may change.
348 EXPECT_EQ(2, wheel.finger_count());
349
350 // Note the phase is "end" for wheel events, not "none". There is always an
351 // "end" when no more events are expected.
352 EXPECT_EQ(ui::EventMomentumPhase::END, wheel.momentum_phase());
353 EXPECT_EQ(default_location_, wheel.location());
354
355 float pixel_delta_y = wheel_delta_y * ui::kScrollbarPixelsPerCocoaTick;
356 EXPECT_EQ(pixel_delta_y, wheel.y_offset_ordinal());
357 EXPECT_EQ(0, wheel.x_offset_ordinal());
358 }
359
360 // Test the event flow for a trackpad "rest" that doesn't result in scrolling
361 // nor momentum. Also check the boring stuff like type, finger count and
362 // location, which isn't phase-specific.
363 // Sequence:
364 // (1) NSEvent: type=ScrollWheel loc=(780,41) time=14909.3 flags=0x100 win=<set>
365 // {deviceD,d}elta{X,Y,Z}=0 count:0 phase=MayBegin momentumPhase=None
366 // (2) NSEvent: type=ScrollWheel loc=(780,41) time=14912.9 flags=0x100 win=<set>
367 // {deviceD,d}elta{X,Y,Z}=0 count:0 phase=Cancelled momentumPhase=None.
368 TEST_F(EventsMacTest, TrackpadRestRelease) {
369 NSArray* ns_events = TrackpadScrollSequence(true, 0, 0);
370 ASSERT_EQ(2u, [ns_events count]);
371 EXPECT_TRUE([ns_events[0] hasPreciseScrollingDeltas]);
372
373 ui::ScrollEvent rest(ns_events[0]);
374 EXPECT_EQ(ui::ET_SCROLL, rest.type());
375 EXPECT_EQ(2, rest.finger_count());
376 EXPECT_EQ(ui::EventMomentumPhase::MAY_BEGIN, rest.momentum_phase());
377 EXPECT_EQ(0, rest.y_offset_ordinal());
378 EXPECT_EQ(default_location_, rest.location());
379
380 ui::ScrollEvent cancel(ns_events[1]);
381 EXPECT_EQ(ui::ET_SCROLL, cancel.type());
382 EXPECT_EQ(2, cancel.finger_count());
383 EXPECT_EQ(ui::EventMomentumPhase::END, cancel.momentum_phase());
384 EXPECT_EQ(0, cancel.y_offset_ordinal());
385 EXPECT_EQ(default_location_, cancel.location());
386 }
387
388 // Test the event flow for touching the trackpad while "in motion" already, then
389 // pausing so that a flick is not generated. deltaX and deltaZ are always zero.
390 // Note, deviceDeltaX may take on an integer value even though deltaX is zero.
391 // Sequence:
392 // (1) NSEvent: type=ScrollWheel loc=(780,41) time=15263.2 flags=0x100 win=<set>
393 // deltaY=0.000000 deviceDeltaY=1.000000 phase=Began momentumPhase=None
394 // (n) NSEvent: type=ScrollWheel loc=(780,41) time=15263.2 flags=0x100 win=<set>
395 // deltaY=0.400024 deviceDeltaY=3.000000 phase=Changed momentumPhase=None
396 // (3) NSEvent: type=ScrollWheel loc=(780,41) time=15264.2 flags=0x100 win=<set>
397 // deltaY=0.000000 deviceDeltaY=0.000000 phase=Ended momentumPhase=None.
398 TEST_F(EventsMacTest, TrackpadScrollThenRest) {
399 int32_t delta_y = 21;
400
401 NSArray* ns_events = TrackpadScrollSequence(false, delta_y, 0);
402 ASSERT_EQ(3u, [ns_events count]);
403
404 ui::ScrollEvent begin(ns_events[0]);
405 EXPECT_EQ(ui::EventMomentumPhase::MAY_BEGIN, begin.momentum_phase());
406 EXPECT_EQ(0, begin.y_offset_ordinal());
407
408 ui::ScrollEvent update(ns_events[1]);
409 // There's no momentum yet, so phase is none.
410 EXPECT_EQ(ui::EventMomentumPhase::NONE, update.momentum_phase());
411 // Note: No pixel conversion for "precise" deltas.
412 EXPECT_EQ(delta_y, update.y_offset_ordinal());
413
414 ui::ScrollEvent end(ns_events[2]);
415 EXPECT_EQ(ui::EventMomentumPhase::END, end.momentum_phase());
416 EXPECT_EQ(0, end.y_offset_ordinal());
417 }
418
419 // Same as the above, but with an initial rest, which is not cancelled. This
420 // results in multiple MAY_BEGIN phases.
421 TEST_F(EventsMacTest, TrackpadRestThenScrollThenRest) {
422 int32_t delta_y = 21;
423
424 NSArray* ns_events = TrackpadScrollSequence(true, delta_y, 0);
425 ASSERT_EQ(4u, [ns_events count]);
426
427 ui::ScrollEvent rest(ns_events[0]);
428 EXPECT_EQ(ui::EventMomentumPhase::MAY_BEGIN, rest.momentum_phase());
429 EXPECT_EQ(0, rest.y_offset_ordinal());
430
431 ui::ScrollEvent begin(ns_events[1]);
432 EXPECT_EQ(ui::EventMomentumPhase::MAY_BEGIN, begin.momentum_phase());
433 EXPECT_EQ(0, begin.y_offset_ordinal());
434
435 ui::ScrollEvent update(ns_events[2]);
436 EXPECT_EQ(ui::EventMomentumPhase::NONE, update.momentum_phase());
437 EXPECT_EQ(delta_y, update.y_offset_ordinal());
438
439 ui::ScrollEvent end(ns_events[3]);
440 EXPECT_EQ(ui::EventMomentumPhase::END, end.momentum_phase());
441 EXPECT_EQ(0, end.y_offset_ordinal());
442 }
443
444 // Test the event flows that lead to momentum, with and without an initial rest.
445 // Example sequence (no initial rest):
446 // (1) NSEvent: type=ScrollWheel loc=(780,41) time=15187.5 flags=0x100 win=<set>
447 // deltaY=0.000000 deviceDeltaY=1.000000 phase=Began momentumPhase=None
448 // (n) NSEvent: type=ScrollWheel loc=(780,41) time=15187.5 flags=0x100 win=<set>
449 // deltaY=0.500031 deviceDeltaY=4.000000 phase=Changed momentumPhase=None
450 // (3) NSEvent: type=ScrollWheel loc=(780,41) time=15187.6 flags=0x100 win=<set>
451 // deltaY=0.000000 deviceDeltaY=0.000000 phase=Ended momentumPhase=None
452 // (4) NSEvent: type=ScrollWheel loc=(780,41) time=15187.6 flags=0x100 win=<set>
453 // deltaY=0.900055 deviceDeltaY=3.000000 phase=None momentumPhase=Began
454 // (n) NSEvent: type=ScrollWheel loc=(780,41) time=15187.6 flags=0x100 win=<set>
455 // deltaY=0.300018 deviceDeltaY=3.000000 phase=None momentumPhase=Changed
456 // (6) NSEvent: type=ScrollWheel loc=(780,41) time=15188.0 flags=0x100 win=<set>
457 // deltaY=0.000000 deviceDeltaY=0.000000 phase=None momentumPhase=Ended.
458 TEST_F(EventsMacTest, TrackpadScrollThenFlick) {
459 int32_t delta_y = 21;
460 int32_t momentum_delta_y = 33;
461
462 NSArray* ns_events = TrackpadScrollSequence(false, delta_y, momentum_delta_y);
463 ASSERT_EQ(6u, [ns_events count]);
464
465 // Non-momentum part.
466 {
467 ui::ScrollEvent begin(ns_events[0]);
468 EXPECT_EQ(ui::EventMomentumPhase::MAY_BEGIN, begin.momentum_phase());
469 EXPECT_EQ(0, begin.y_offset_ordinal());
470
471 ui::ScrollEvent update(ns_events[1]);
472 EXPECT_EQ(ui::EventMomentumPhase::NONE, update.momentum_phase());
473 EXPECT_EQ(delta_y, update.y_offset_ordinal());
474
475 ui::ScrollEvent end(ns_events[2]);
476 // Even though the event stream continues, AppKit doesn't provide a way to
477 // know this without peeking at future events. So this "end" mid-stream is
478 // unavoidable.
479 EXPECT_EQ(ui::EventMomentumPhase::END, end.momentum_phase());
480 EXPECT_EQ(0, end.y_offset_ordinal());
481 }
482 // Momentum part.
483 {
484 ui::ScrollEvent begin(ns_events[3]);
485 // Since a momentum "begin" is really a continuation of the stream, it's
486 // currently treated as an update, but the offsets should always be zero.
487 EXPECT_EQ(ui::EventMomentumPhase::INERTIAL_UPDATE, begin.momentum_phase());
488 EXPECT_EQ(0, begin.y_offset_ordinal());
489
490 ui::ScrollEvent update(ns_events[4]);
491 EXPECT_EQ(ui::EventMomentumPhase::INERTIAL_UPDATE, update.momentum_phase());
492 EXPECT_EQ(momentum_delta_y, update.y_offset_ordinal());
493
494 ui::ScrollEvent end(ns_events[5]);
495 EXPECT_EQ(ui::EventMomentumPhase::END, end.momentum_phase());
496 EXPECT_EQ(0, end.y_offset_ordinal());
497 }
498 }
499
264 } // namespace ui 500 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/cocoa/events_mac.mm ('k') | ui/events/event.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698