Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / content / browser / renderer_host / input / motion_event_android_unittest.cc
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
3 // found in the LICENSE file.
4
5 #include <android/input.h>
6
7 #include "base/android/jni_android.h"
8 #include "base/float_util.h"
9 #include "content/browser/renderer_host/input/motion_event_android.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "ui/events/event_constants.h"
12 #include "ui/events/test/motion_event_test_utils.h"
13
14 using ui::MotionEvent;
15
16 namespace content {
17 namespace {
18 const float kPixToDip = 0.5f;
19
20 int kAndroidActionDown = AMOTION_EVENT_ACTION_DOWN;
21
22 int kAndroidAltKeyDown = AMETA_ALT_ON;
23
24 // Corresponds to TOOL_TYPE_FINGER, see
25 // developer.android.com/reference/android/view/MotionEvent.html
26 //     #TOOL_TYPE_FINGER.
27 int kAndroidToolTypeFinger = 1;
28
29 // Corresponds to BUTTON_PRIMARY, see
30 // developer.android.com/reference/android/view/MotionEvent.html#BUTTON_PRIMARY.
31 int kAndroidButtonPrimary = 1;
32
33 }  // namespace
34
35 // Note that these tests avoid creating a Java instance of the MotionEvent, as
36 // we're primarily testing caching behavior, and the code necessary to
37 // construct a Java-backed MotionEvent itself adds unnecessary complexity.
38 TEST(MotionEventAndroidTest, Constructor) {
39   int event_time_ms = 5;
40   base::TimeTicks event_time =
41       base::TimeTicks() + base::TimeDelta::FromMilliseconds(event_time_ms);
42   MotionEventAndroid::Pointer p0(
43       1, 13.7f, -7.13f, 5.3f, 1.2f, 0.1f, kAndroidToolTypeFinger);
44   MotionEventAndroid::Pointer p1(
45       2, -13.7f, 7.13f, 3.5f, 12.1f, -0.1f, kAndroidToolTypeFinger);
46   float raw_offset = -3.f;
47   int pointer_count = 2;
48   int history_size = 0;
49   int action_index = -1;
50   MotionEventAndroid event(kPixToDip,
51                            base::android::AttachCurrentThread(),
52                            nullptr,
53                            event_time_ms,
54                            kAndroidActionDown,
55                            pointer_count,
56                            history_size,
57                            action_index,
58                            kAndroidButtonPrimary,
59                            kAndroidAltKeyDown,
60                            raw_offset,
61                            -raw_offset,
62                            p0,
63                            p1);
64
65   EXPECT_EQ(MotionEvent::ACTION_DOWN, event.GetAction());
66   EXPECT_EQ(event_time, event.GetEventTime());
67   EXPECT_EQ(p0.pos_x_pixels * kPixToDip, event.GetX(0));
68   EXPECT_EQ(p0.pos_y_pixels * kPixToDip, event.GetY(0));
69   EXPECT_EQ(p1.pos_x_pixels * kPixToDip, event.GetX(1));
70   EXPECT_EQ(p1.pos_y_pixels * kPixToDip, event.GetY(1));
71   EXPECT_FLOAT_EQ((p0.pos_x_pixels + raw_offset) * kPixToDip, event.GetRawX(0));
72   EXPECT_FLOAT_EQ((p0.pos_y_pixels - raw_offset) * kPixToDip, event.GetRawY(0));
73   EXPECT_FLOAT_EQ((p1.pos_x_pixels + raw_offset) * kPixToDip, event.GetRawX(1));
74   EXPECT_FLOAT_EQ((p1.pos_y_pixels - raw_offset) * kPixToDip, event.GetRawY(1));
75   EXPECT_EQ(p0.touch_major_pixels * kPixToDip, event.GetTouchMajor(0));
76   EXPECT_EQ(p1.touch_major_pixels * kPixToDip, event.GetTouchMajor(1));
77   EXPECT_EQ(p0.touch_minor_pixels * kPixToDip, event.GetTouchMinor(0));
78   EXPECT_EQ(p1.touch_minor_pixels * kPixToDip, event.GetTouchMinor(1));
79   EXPECT_EQ(p0.orientation_rad, event.GetOrientation(0));
80   EXPECT_EQ(p1.orientation_rad, event.GetOrientation(1));
81   EXPECT_EQ(p0.id, event.GetPointerId(0));
82   EXPECT_EQ(p1.id, event.GetPointerId(1));
83   EXPECT_EQ(MotionEvent::TOOL_TYPE_FINGER, event.GetToolType(0));
84   EXPECT_EQ(MotionEvent::TOOL_TYPE_FINGER, event.GetToolType(1));
85   EXPECT_EQ(MotionEvent::BUTTON_PRIMARY, event.GetButtonState());
86   EXPECT_EQ(ui::EF_ALT_DOWN, event.GetFlags());
87   EXPECT_EQ(static_cast<size_t>(pointer_count), event.GetPointerCount());
88   EXPECT_EQ(static_cast<size_t>(history_size), event.GetHistorySize());
89   EXPECT_EQ(action_index, event.GetActionIndex());
90 }
91
92 TEST(MotionEventAndroidTest, Clone) {
93   const int pointer_count = 1;
94   MotionEventAndroid::Pointer p0(
95       1, 13.7f, -7.13f, 5.3f, 1.2f, 0.1f, kAndroidToolTypeFinger);
96   MotionEventAndroid::Pointer p1(0, 0, 0, 0, 0, 0, 0);
97   MotionEventAndroid event(kPixToDip,
98                            base::android::AttachCurrentThread(),
99                            nullptr,
100                            0,
101                            kAndroidActionDown,
102                            pointer_count,
103                            0,
104                            0,
105                            0,
106                            0,
107                            0,
108                            0,
109                            p0,
110                            p1);
111
112   scoped_ptr<MotionEvent> clone = event.Clone();
113   EXPECT_EQ(ui::test::ToString(event), ui::test::ToString(*clone));
114 }
115
116 TEST(MotionEventAndroidTest, Cancel) {
117   const int event_time_ms = 5;
118   const int pointer_count = 1;
119   MotionEventAndroid::Pointer p0(
120       1, 13.7f, -7.13f, 5.3f, 1.2f, 0.1f, kAndroidToolTypeFinger);
121   MotionEventAndroid::Pointer p1(0, 0, 0, 0, 0, 0, 0);
122   MotionEventAndroid event(kPixToDip,
123                            base::android::AttachCurrentThread(),
124                            nullptr,
125                            event_time_ms,
126                            kAndroidActionDown,
127                            pointer_count,
128                            0,
129                            0,
130                            0,
131                            0,
132                            0,
133                            0,
134                            p0,
135                            p1);
136
137   scoped_ptr<MotionEvent> cancel_event = event.Cancel();
138   EXPECT_EQ(MotionEvent::ACTION_CANCEL, cancel_event->GetAction());
139   EXPECT_EQ(
140       base::TimeTicks() + base::TimeDelta::FromMilliseconds(event_time_ms),
141       cancel_event->GetEventTime());
142   EXPECT_EQ(p0.pos_x_pixels * kPixToDip, cancel_event->GetX(0));
143   EXPECT_EQ(p0.pos_y_pixels * kPixToDip, cancel_event->GetY(0));
144   EXPECT_EQ(static_cast<size_t>(pointer_count),
145             cancel_event->GetPointerCount());
146   EXPECT_EQ(0U, cancel_event->GetHistorySize());
147 }
148
149 TEST(MotionEventAndroidTest, InvalidOrientationsSanitized) {
150   int pointer_count = 2;
151   float orientation0 = 1e10f;
152   float orientation1 = std::numeric_limits<float>::quiet_NaN();
153   MotionEventAndroid::Pointer p0(0, 0, 0, 0, 0, orientation0, 0);
154   MotionEventAndroid::Pointer p1(1, 0, 0, 0, 0, orientation1, 0);
155   MotionEventAndroid event(kPixToDip,
156                            base::android::AttachCurrentThread(),
157                            nullptr,
158                            0,
159                            kAndroidActionDown,
160                            pointer_count,
161                            0,
162                            0,
163                            0,
164                            0,
165                            0,
166                            0,
167                            p0,
168                            p1);
169
170   EXPECT_EQ(0.f, event.GetOrientation(0));
171   EXPECT_EQ(0.f, event.GetOrientation(1));
172 }
173
174 }  // namespace content