1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file.
4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// MSVC++ requires this to be set before any other includes to get M_PI.
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define _USE_MATH_DEFINES
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <cmath>
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/events/event.h"
12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/events/gestures/motion_event_aura.h"
13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace {
15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)ui::TouchEvent TouchWithType(ui::EventType type, int id) {
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return ui::TouchEvent(
18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      type, gfx::PointF(0, 0), id, base::TimeDelta::FromMilliseconds(0));
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)ui::TouchEvent TouchWithPosition(ui::EventType type,
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                 int id,
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                 float x,
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                 float y,
25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                 float raw_x,
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 float raw_y) {
27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ui::TouchEvent event(type,
28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                       gfx::PointF(x, y),
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                       0,
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                       id,
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                       base::TimeDelta::FromMilliseconds(0),
32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                       0,
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       0,
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       0,
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       0);
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  event.set_root_location(gfx::PointF(raw_x, raw_y));
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return event;
38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciui::TouchEvent TouchWithTapParams(ui::EventType type,
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 int id,
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 float radius_x,
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 float radius_y,
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 float rotation_angle,
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 float pressure) {
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ui::TouchEvent event(type,
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       gfx::PointF(1, 1),
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       0,
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       id,
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       base::TimeDelta::FromMilliseconds(0),
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       radius_x,
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       radius_y,
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       rotation_angle,
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       pressure);
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  event.set_root_location(gfx::PointF(1, 1));
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return event;
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)ui::TouchEvent TouchWithTime(ui::EventType type, int id, int ms) {
60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return ui::TouchEvent(
61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      type, gfx::PointF(0, 0), id, base::TimeDelta::FromMilliseconds(ms));
62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)base::TimeTicks MsToTicks(int ms) {
65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return base::TimeTicks() + base::TimeDelta::FromMilliseconds(ms);
66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace
69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace ui {
71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(MotionEventAuraTest, PointerCountAndIds) {
73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Test that |PointerCount()| returns the correct number of pointers, and ids
74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // are assigned correctly.
75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  int ids[] = {4, 6, 1};
76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  MotionEventAura event;
78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(0U, event.GetPointerCount());
79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]);
81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(press0);
82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(1U, event.GetPointerCount());
83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(ids[0], event.GetPointerId(0));
85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]);
87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(press1);
88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(2U, event.GetPointerCount());
89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(ids[0], event.GetPointerId(0));
91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(ids[1], event.GetPointerId(1));
92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent press2 = TouchWithType(ET_TOUCH_PRESSED, ids[2]);
94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(press2);
95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(3U, event.GetPointerCount());
96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(ids[0], event.GetPointerId(0));
98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(ids[1], event.GetPointerId(1));
99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(ids[2], event.GetPointerId(2));
100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent release1 = TouchWithType(ET_TOUCH_RELEASED, ids[1]);
102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(release1);
103010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.CleanupRemovedTouchPoints(release1);
104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(2U, event.GetPointerCount());
105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(ids[0], event.GetPointerId(0));
107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(ids[2], event.GetPointerId(1));
108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Test cloning of pointer count and id information.
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // TODO(mustaq): Make a separate clone test
111010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<MotionEvent> clone = event.Clone();
112010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(2U, clone->GetPointerCount());
113010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(ids[0], clone->GetPointerId(0));
114010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(ids[2], clone->GetPointerId(1));
115010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
116010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent release0 = TouchWithType(ET_TOUCH_RELEASED, ids[0]);
117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(release0);
118010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.CleanupRemovedTouchPoints(release0);
119010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(1U, event.GetPointerCount());
120010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
121010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(ids[2], event.GetPointerId(0));
122010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
123010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent release2 = TouchWithType(ET_TOUCH_RELEASED, ids[2]);
124010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(release2);
125010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.CleanupRemovedTouchPoints(release2);
126010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(0U, event.GetPointerCount());
127010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
128010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
129010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(MotionEventAuraTest, GetActionIndexAfterRemoval) {
130010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Test that |GetActionIndex()| returns the correct index when points have
131010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // been removed.
132010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  int ids[] = {4, 6, 9};
133010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
134010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  MotionEventAura event;
135010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(0U, event.GetPointerCount());
136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
137010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]);
138010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(press0);
139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]);
140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(press1);
141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent press2 = TouchWithType(ET_TOUCH_PRESSED, ids[2]);
142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(press2);
143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(3U, event.GetPointerCount());
144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent release1 = TouchWithType(ET_TOUCH_RELEASED, ids[1]);
146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(release1);
147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.CleanupRemovedTouchPoints(release1);
148010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(1, event.GetActionIndex());
149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(2U, event.GetPointerCount());
150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent release2 = TouchWithType(ET_TOUCH_RELEASED, ids[0]);
152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(release2);
153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.CleanupRemovedTouchPoints(release2);
154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(0, event.GetActionIndex());
155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(1U, event.GetPointerCount());
156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent release0 = TouchWithType(ET_TOUCH_RELEASED, ids[2]);
158010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(release0);
159010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.CleanupRemovedTouchPoints(release0);
160010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(0U, event.GetPointerCount());
161010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
162010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
163010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(MotionEventAuraTest, PointerLocations) {
164010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Test that location information is stored correctly.
165010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  MotionEventAura event;
166010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  const float kRawOffsetX = 11.1f;
168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  const float kRawOffsetY = 13.3f;
169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
170010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  int ids[] = {15, 13};
171010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  float x;
172010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  float y;
173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  float raw_x;
174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  float raw_y;
175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
176010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  x = 14.4f;
177010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  y = 17.3f;
178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  raw_x = x + kRawOffsetX;
179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  raw_y = y + kRawOffsetY;
180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  TouchEvent press0 =
1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      TouchWithPosition(ET_TOUCH_PRESSED, ids[0], x, y, raw_x, raw_y);
182010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(press0);
183010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
184010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(1U, event.GetPointerCount());
185010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FLOAT_EQ(x, event.GetX(0));
186010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FLOAT_EQ(y, event.GetY(0));
187f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_FLOAT_EQ(raw_x, event.GetRawX(0));
188f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_FLOAT_EQ(raw_y, event.GetRawY(0));
189010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
190010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  x = 17.8f;
191010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  y = 12.1f;
192f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  raw_x = x + kRawOffsetX;
193f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  raw_y = y + kRawOffsetY;
194f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  TouchEvent press1 =
1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      TouchWithPosition(ET_TOUCH_PRESSED, ids[1], x, y, raw_x, raw_y);
196010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(press1);
197010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
198010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(2U, event.GetPointerCount());
199010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FLOAT_EQ(x, event.GetX(1));
200010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FLOAT_EQ(y, event.GetY(1));
201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_FLOAT_EQ(raw_x, event.GetRawX(1));
202f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_FLOAT_EQ(raw_y, event.GetRawY(1));
203010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
204010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Test cloning of pointer location information.
205010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<MotionEvent> clone = event.Clone();
2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  {
2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const MotionEventAura* raw_clone_aura =
2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        static_cast<MotionEventAura*>(clone.get());
2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_EQ(2U, raw_clone_aura->GetPointerCount());
2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_FLOAT_EQ(x, raw_clone_aura->GetX(1));
2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_FLOAT_EQ(y, raw_clone_aura->GetY(1));
2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_FLOAT_EQ(raw_x, raw_clone_aura->GetRawX(1));
2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_FLOAT_EQ(raw_y, raw_clone_aura->GetRawY(1));
2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
215010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
216010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  x = 27.9f;
217010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  y = 22.3f;
218f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  raw_x = x + kRawOffsetX;
219f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  raw_y = y + kRawOffsetY;
220f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  TouchEvent move1 =
2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      TouchWithPosition(ET_TOUCH_MOVED, ids[1], x, y, raw_x, raw_y);
222010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(move1);
223010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
224010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FLOAT_EQ(x, event.GetX(1));
225010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FLOAT_EQ(y, event.GetY(1));
226f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_FLOAT_EQ(raw_x, event.GetRawX(1));
227f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_FLOAT_EQ(raw_y, event.GetRawY(1));
228010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
229010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  x = 34.6f;
230010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  y = 23.8f;
231f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  raw_x = x + kRawOffsetX;
232f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  raw_y = y + kRawOffsetY;
233f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  TouchEvent move0 =
2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      TouchWithPosition(ET_TOUCH_MOVED, ids[0], x, y, raw_x, raw_y);
235010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(move0);
236010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
237010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FLOAT_EQ(x, event.GetX(0));
238010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FLOAT_EQ(y, event.GetY(0));
239f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_FLOAT_EQ(raw_x, event.GetRawX(0));
240f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_FLOAT_EQ(raw_y, event.GetRawY(0));
2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(MotionEventAuraTest, TapParams) {
2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Test that touch params are stored correctly.
2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  MotionEventAura event;
2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  int ids[] = {15, 13};
2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  float radius_x;
2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  float radius_y;
2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  float rotation_angle;
2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  float pressure;
2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  radius_x = 123.45f;
2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  radius_y = 67.89f;
2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  rotation_angle = 23.f;
2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  pressure = 0.123f;
2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TouchEvent press0 = TouchWithTapParams(
2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ET_TOUCH_PRESSED, ids[0], radius_x, radius_y, rotation_angle, pressure);
2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  event.OnTouch(press0);
2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1U, event.GetPointerCount());
2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FLOAT_EQ(radius_x, event.GetTouchMajor(0) / 2);
2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FLOAT_EQ(radius_y, event.GetTouchMinor(0) / 2);
2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(0) * 180 / M_PI + 90);
2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FLOAT_EQ(pressure, event.GetPressure(0));
2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  radius_x = 67.89f;
2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  radius_y = 123.45f;
2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  rotation_angle = 46.f;
2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  pressure = 0.456f;
2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TouchEvent press1 = TouchWithTapParams(
2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ET_TOUCH_PRESSED, ids[1], radius_x, radius_y, rotation_angle, pressure);
2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  event.OnTouch(press1);
2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(2U, event.GetPointerCount());
2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FLOAT_EQ(radius_y, event.GetTouchMajor(1) / 2);
2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FLOAT_EQ(radius_x, event.GetTouchMinor(1) / 2);
2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(1) * 180 / M_PI);
2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FLOAT_EQ(pressure, event.GetPressure(1));
2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Test cloning of tap params
2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<MotionEvent> clone = event.Clone();
2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  {
2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const MotionEventAura* raw_clone_aura =
2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        static_cast<MotionEventAura*>(clone.get());
2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_EQ(2U, raw_clone_aura->GetPointerCount());
2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_FLOAT_EQ(radius_y, raw_clone_aura->GetTouchMajor(1) / 2);
2891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_FLOAT_EQ(radius_x, raw_clone_aura->GetTouchMinor(1) / 2);
2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_FLOAT_EQ(
2911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        rotation_angle, raw_clone_aura->GetOrientation(1) * 180 / M_PI);
2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_FLOAT_EQ(pressure, raw_clone_aura->GetPressure(1));
2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  radius_x = 76.98f;
2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  radius_y = 321.54f;
2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  rotation_angle = 64.f;
2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  pressure = 0.654f;
2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TouchEvent move1 = TouchWithTapParams(
3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ET_TOUCH_MOVED, ids[1], radius_x, radius_y, rotation_angle, pressure);
3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  event.OnTouch(move1);
3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(2U, event.GetPointerCount());
3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FLOAT_EQ(radius_y, event.GetTouchMajor(1) / 2);
3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FLOAT_EQ(radius_x, event.GetTouchMinor(1) / 2);
3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(1) * 180 / M_PI);
3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FLOAT_EQ(pressure, event.GetPressure(1));
308010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
309010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
310010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(MotionEventAuraTest, Timestamps) {
311010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Test that timestamp information is stored and converted correctly.
312010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  MotionEventAura event;
313010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  int ids[] = {7, 13};
314010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  int times_in_ms[] = {59436, 60263, 82175};
315010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
316010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent press0 = TouchWithTime(
317010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      ui::ET_TOUCH_PRESSED, ids[0], times_in_ms[0]);
318010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(press0);
319010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(MsToTicks(times_in_ms[0]), event.GetEventTime());
320010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
321010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent press1 = TouchWithTime(
322010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      ui::ET_TOUCH_PRESSED, ids[1], times_in_ms[1]);
323010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(press1);
324010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(MsToTicks(times_in_ms[1]), event.GetEventTime());
325010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
326010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent move0 = TouchWithTime(
327010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      ui::ET_TOUCH_MOVED, ids[0], times_in_ms[2]);
328010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(move0);
329010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(MsToTicks(times_in_ms[2]), event.GetEventTime());
330010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
331010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Test cloning of timestamp information.
332010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<MotionEvent> clone = event.Clone();
333010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(MsToTicks(times_in_ms[2]), clone->GetEventTime());
334010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
335010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
336010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(MotionEventAuraTest, CachedAction) {
337010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Test that the cached action and cached action index are correct.
338010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  int ids[] = {4, 6};
339010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  MotionEventAura event;
340010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
341010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]);
342010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(press0);
343010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(MotionEvent::ACTION_DOWN, event.GetAction());
344010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(1U, event.GetPointerCount());
345010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
346010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]);
347010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(press1);
348010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(MotionEvent::ACTION_POINTER_DOWN, event.GetAction());
349010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(1, event.GetActionIndex());
350010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(2U, event.GetPointerCount());
351010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
352010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Test cloning of CachedAction information.
353010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<MotionEvent> clone = event.Clone();
354010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(MotionEvent::ACTION_POINTER_DOWN, clone->GetAction());
355010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(1, clone->GetActionIndex());
356010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
357010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent move0 = TouchWithType(ET_TOUCH_MOVED, ids[0]);
358010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(move0);
359010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(MotionEvent::ACTION_MOVE, event.GetAction());
360010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(2U, event.GetPointerCount());
361010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
362010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent release0 = TouchWithType(ET_TOUCH_RELEASED, ids[0]);
363010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(release0);
364010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(MotionEvent::ACTION_POINTER_UP, event.GetAction());
365010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(2U, event.GetPointerCount());
366010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.CleanupRemovedTouchPoints(release0);
367010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(1U, event.GetPointerCount());
368010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
369010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent release1 = TouchWithType(ET_TOUCH_RELEASED, ids[1]);
370010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(release1);
371010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(MotionEvent::ACTION_UP, event.GetAction());
372010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(1U, event.GetPointerCount());
373010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.CleanupRemovedTouchPoints(release1);
374010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(0U, event.GetPointerCount());
375010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
376010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
377010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(MotionEventAuraTest, Cancel) {
378010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  int ids[] = {4, 6};
379010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  MotionEventAura event;
380010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
381010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]);
382010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(press0);
383010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(MotionEvent::ACTION_DOWN, event.GetAction());
384010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(1U, event.GetPointerCount());
385010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
386010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]);
387010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  event.OnTouch(press1);
388010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(MotionEvent::ACTION_POINTER_DOWN, event.GetAction());
389010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(1, event.GetActionIndex());
390010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(2U, event.GetPointerCount());
391010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
392010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<MotionEvent> cancel = event.Cancel();
393010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(MotionEvent::ACTION_CANCEL, cancel->GetAction());
394010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(2U, static_cast<MotionEventAura*>(cancel.get())->GetPointerCount());
395010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
396010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
39703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(MotionEventAuraTest, ToolType) {
39803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  MotionEventAura event;
39903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
40003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // For now, all pointers have an unknown tool type.
40103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // TODO(jdduke): Expand this test when ui::TouchEvent identifies the source
40203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // touch type, crbug.com/404128.
40303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  event.OnTouch(TouchWithType(ET_TOUCH_PRESSED, 7));
40403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  ASSERT_EQ(1U, event.GetPointerCount());
40503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(MotionEvent::TOOL_TYPE_UNKNOWN, event.GetToolType(0));
40603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
40703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(MotionEventAuraTest, Flags) {
4091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  int ids[] = {7, 11};
4101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  MotionEventAura event;
4111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]);
4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  press0.set_flags(EF_CONTROL_DOWN);
4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  event.OnTouch(press0);
4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(EF_CONTROL_DOWN, event.GetFlags());
4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]);
4181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  press1.set_flags(EF_CONTROL_DOWN | EF_CAPS_LOCK_DOWN);
4191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  event.OnTouch(press1);
4201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(EF_CONTROL_DOWN | EF_CAPS_LOCK_DOWN, event.GetFlags());
4211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
423010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace ui
424