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

Side by Side Diff: content/public/android/junit/src/org/chromium/content/browser/input/GamepadMappingsTest.java

Issue 2081583002: Migrating majority of gamepad from content/browser/ to device/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Final tweaks Created 4 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 package org.chromium.content.browser.input;
6
7 import android.view.KeyEvent;
8 import android.view.MotionEvent;
9
10 import org.chromium.base.test.util.Feature;
11 import org.chromium.testing.local.LocalRobolectricTestRunner;
12
13 import org.junit.Assert;
14 import org.junit.Before;
15 import org.junit.Test;
16 import org.junit.runner.RunWith;
17
18 import org.robolectric.annotation.Config;
19
20 import java.util.Arrays;
21 import java.util.BitSet;
22
23 /**
24 * Verify no regressions in gamepad mappings.
25 */
26 @RunWith(LocalRobolectricTestRunner.class)
27 @Config(manifest = Config.NONE)
28 public class GamepadMappingsTest {
29 private static final float ERROR_TOLERANCE = 0.000001f;
30 /**
31 * Set bits indicate that we don't expect the button at mMappedButtons[index ] to be mapped.
32 */
33 private BitSet mUnmappedButtons = new BitSet(CanonicalButtonIndex.COUNT);
34 /**
35 * Set bits indicate that we don't expect the axis at mMappedAxes[index] to be mapped.
36 */
37 private BitSet mUnmappedAxes = new BitSet(CanonicalAxisIndex.COUNT);
38 private float[] mMappedButtons = new float[CanonicalButtonIndex.COUNT];
39 private float[] mMappedAxes = new float[CanonicalAxisIndex.COUNT];
40 private float[] mRawButtons = new float[GamepadDevice.MAX_RAW_BUTTON_VALUES] ;
41 private float[] mRawAxes = new float[GamepadDevice.MAX_RAW_AXIS_VALUES];
42
43 @Before
44 public void setUp() throws Exception {
45
46 // By default, we expect every button and axis to be mapped.
47 mUnmappedButtons.clear();
48 mUnmappedAxes.clear();
49
50 // Start with all the mapped values as unmapped.
51 Arrays.fill(mMappedButtons, Float.NaN);
52 Arrays.fill(mMappedAxes, Float.NaN);
53
54 // Set each raw value to something unique.
55 for (int i = 0; i < GamepadDevice.MAX_RAW_AXIS_VALUES; i++) {
56 mRawAxes[i] = -i - 1.0f;
57 }
58 for (int i = 0; i < GamepadDevice.MAX_RAW_BUTTON_VALUES; i++) {
59 mRawButtons[i] = i + 1.0f;
60 }
61 }
62
63 @Test
64 @Feature({"Gamepad"})
65 public void testShieldGamepadMappings() throws Exception {
66 GamepadMappings.mapToStandardGamepad(mMappedAxes, mMappedButtons, mRawAx es, mRawButtons,
67 GamepadMappings.NVIDIA_SHIELD_DEVICE_NAME_PREFIX);
68
69 assertShieldGamepadMappings();
70 }
71
72 @Test
73 @Feature({"Gamepad"})
74 public void testXBox360GamepadMappings() throws Exception {
75 GamepadMappings.mapToStandardGamepad(mMappedAxes, mMappedButtons, mRawAx es, mRawButtons,
76 GamepadMappings.MICROSOFT_XBOX_PAD_DEVICE_NAME);
77
78 assertShieldGamepadMappings();
79 }
80
81 @Test
82 @Feature({"Gamepad"})
83 public void testPS3SixAxisGamepadMappings() throws Exception {
84 GamepadMappings.mapToStandardGamepad(mMappedAxes, mMappedButtons, mRawAx es, mRawButtons,
85 GamepadMappings.PS3_SIXAXIS_DEVICE_NAME);
86
87 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.PRIMARY],
88 mRawButtons[KeyEvent.KEYCODE_BUTTON_X], ERROR_TOLERANCE);
89 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.SECONDARY],
90 mRawButtons[KeyEvent.KEYCODE_BUTTON_Y], ERROR_TOLERANCE);
91 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.TERTIARY],
92 mRawButtons[KeyEvent.KEYCODE_BUTTON_A], ERROR_TOLERANCE);
93 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.QUATERNARY],
94 mRawButtons[KeyEvent.KEYCODE_BUTTON_B], ERROR_TOLERANCE);
95
96 assertMappedCommonTriggerButtons();
97 assertMappedCommonThumbstickButtons();
98 assertMappedCommonDpadButtons();
99 assertMappedCommonStartSelectMetaButtons();
100 assertMappedTriggerAxexToShoulderButtons();
101 assertMappedXYAxes();
102 assertMappedZAndRZAxesToRightStick();
103
104 assertMapping();
105 }
106
107 @Test
108 @Feature({"Gamepad"})
109 public void testSamsungEIGP20GamepadMappings() throws Exception {
110 GamepadMappings.mapToStandardGamepad(mMappedAxes, mMappedButtons, mRawAx es, mRawButtons,
111 GamepadMappings.SAMSUNG_EI_GP20_DEVICE_NAME);
112
113 assertMappedCommonXYABButtons();
114 assertMappedCommonTriggerButtons();
115 assertMappedCommonThumbstickButtons();
116 assertMappedCommonStartSelectMetaButtons();
117 assertMappedHatAxisToDpadButtons();
118 assertMappedXYAxes();
119 assertMappedRXAndRYAxesToRightStick();
120
121 expectNoShoulderButtons();
122 assertMapping();
123 }
124
125 @Test
126 @Feature({"Gamepad"})
127 public void testAmazonFireGamepadMappings() throws Exception {
128 GamepadMappings.mapToStandardGamepad(mMappedAxes, mMappedButtons, mRawAx es, mRawButtons,
129 GamepadMappings.AMAZON_FIRE_DEVICE_NAME);
130
131 assertMappedCommonXYABButtons();
132 assertMappedPedalAxesToBottomShoulder();
133 assertMappedCommonThumbstickButtons();
134 assertMappedCommonStartSelectMetaButtons();
135 assertMappedTriggerButtonsToTopShoulder();
136 assertMappedHatAxisToDpadButtons();
137 assertMappedXYAxes();
138 assertMappedZAndRZAxesToRightStick();
139
140 assertMapping();
141 }
142
143 @Test
144 @Feature({"Gamepad"})
145 public void testUnknownGamepadMappings() throws Exception {
146 GamepadMappings.mapToStandardGamepad(
147 mMappedAxes, mMappedButtons, mRawAxes, mRawButtons, "");
148
149 assertMappedCommonXYABButtons();
150 assertMappedCommonTriggerButtons();
151 assertMappedCommonThumbstickButtons();
152 assertMappedCommonStartSelectMetaButtons();
153 assertMappedTriggerAxexToShoulderButtons();
154 assertMappedCommonDpadButtons();
155 assertMappedXYAxes();
156 assertMappedRXAndRYAxesToRightStick();
157
158 assertMapping();
159 }
160
161 /**
162 * Asserts that the current gamepad mapping being tested matches the shield mappings.
163 */
164 public void assertShieldGamepadMappings() {
165 assertMappedCommonXYABButtons();
166 assertMappedTriggerButtonsToTopShoulder();
167 assertMappedCommonThumbstickButtons();
168 assertMappedCommonStartSelectMetaButtons();
169 assertMappedTriggerAxesToBottomShoulder();
170 assertMappedHatAxisToDpadButtons();
171 assertMappedXYAxes();
172 assertMappedZAndRZAxesToRightStick();
173
174 assertMapping();
175 }
176
177 public void expectNoShoulderButtons() {
178 mUnmappedButtons.set(CanonicalButtonIndex.LEFT_SHOULDER);
179 mUnmappedButtons.set(CanonicalButtonIndex.RIGHT_SHOULDER);
180 }
181
182 public void assertMapping() {
183 for (int i = 0; i < mMappedAxes.length; i++) {
184 if (mUnmappedAxes.get(i)) {
185 Assert.assertTrue(
186 "An unexpected axis was mapped at index " + i, Float.isN aN(mMappedAxes[i]));
187 } else {
188 Assert.assertFalse(
189 "An axis was not mapped at index " + i, Float.isNaN(mMap pedAxes[i]));
190 }
191 }
192 for (int i = 0; i < mMappedButtons.length; i++) {
193 if (mUnmappedButtons.get(i)) {
194 Assert.assertTrue("An unexpected button was mapped at index " + i,
195 Float.isNaN(mMappedButtons[i]));
196 } else {
197 Assert.assertFalse(
198 "A button was not mapped at index " + i, Float.isNaN(mMa ppedButtons[i]));
199 }
200 }
201 }
202
203 private void assertMappedCommonTriggerButtons() {
204 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.LEFT_TRIGGER],
205 mRawButtons[KeyEvent.KEYCODE_BUTTON_L1], ERROR_TOLERANCE);
206 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.RIGHT_TRIGGER],
207 mRawButtons[KeyEvent.KEYCODE_BUTTON_R1], ERROR_TOLERANCE);
208 }
209
210 private void assertMappedCommonDpadButtons() {
211 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.DPAD_DOWN],
212 mRawButtons[KeyEvent.KEYCODE_DPAD_DOWN], ERROR_TOLERANCE);
213 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.DPAD_UP],
214 mRawButtons[KeyEvent.KEYCODE_DPAD_UP], ERROR_TOLERANCE);
215 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.DPAD_LEFT],
216 mRawButtons[KeyEvent.KEYCODE_DPAD_LEFT], ERROR_TOLERANCE);
217 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.DPAD_RIGHT],
218 mRawButtons[KeyEvent.KEYCODE_DPAD_RIGHT], ERROR_TOLERANCE);
219 }
220
221 private void assertMappedTriggerAxexToShoulderButtons() {
222 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.LEFT_SHOULDER],
223 mRawAxes[MotionEvent.AXIS_LTRIGGER], ERROR_TOLERANCE);
224 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.RIGHT_SHOULDER],
225 mRawAxes[MotionEvent.AXIS_RTRIGGER], ERROR_TOLERANCE);
226 }
227
228 private void assertMappedTriggerButtonsToTopShoulder() {
229 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.LEFT_SHOULDER],
230 mRawButtons[KeyEvent.KEYCODE_BUTTON_L1], ERROR_TOLERANCE);
231 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.RIGHT_SHOULDER],
232 mRawButtons[KeyEvent.KEYCODE_BUTTON_R1], ERROR_TOLERANCE);
233 }
234
235 private void assertMappedCommonXYABButtons() {
236 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.PRIMARY],
237 mRawButtons[KeyEvent.KEYCODE_BUTTON_A], ERROR_TOLERANCE);
238 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.SECONDARY],
239 mRawButtons[KeyEvent.KEYCODE_BUTTON_B], ERROR_TOLERANCE);
240 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.TERTIARY],
241 mRawButtons[KeyEvent.KEYCODE_BUTTON_X], ERROR_TOLERANCE);
242 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.QUATERNARY],
243 mRawButtons[KeyEvent.KEYCODE_BUTTON_Y], ERROR_TOLERANCE);
244 }
245
246 private void assertMappedCommonThumbstickButtons() {
247 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.LEFT_THUMBSTICK] ,
248 mRawButtons[KeyEvent.KEYCODE_BUTTON_THUMBL], ERROR_TOLERANCE);
249 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.RIGHT_THUMBSTICK ],
250 mRawButtons[KeyEvent.KEYCODE_BUTTON_THUMBR], ERROR_TOLERANCE);
251 }
252
253 private void assertMappedCommonStartSelectMetaButtons() {
254 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.START],
255 mRawButtons[KeyEvent.KEYCODE_BUTTON_START], ERROR_TOLERANCE);
256 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.BACK_SELECT],
257 mRawButtons[KeyEvent.KEYCODE_BUTTON_SELECT], ERROR_TOLERANCE);
258 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.META],
259 mRawButtons[KeyEvent.KEYCODE_BUTTON_MODE], ERROR_TOLERANCE);
260 }
261
262 private void assertMappedPedalAxesToBottomShoulder() {
263 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.LEFT_TRIGGER],
264 mRawAxes[MotionEvent.AXIS_BRAKE], ERROR_TOLERANCE);
265 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.RIGHT_TRIGGER],
266 mRawAxes[MotionEvent.AXIS_GAS], ERROR_TOLERANCE);
267 }
268
269 private void assertMappedTriggerAxesToBottomShoulder() {
270 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.LEFT_TRIGGER],
271 mRawAxes[MotionEvent.AXIS_LTRIGGER], ERROR_TOLERANCE);
272 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.RIGHT_TRIGGER],
273 mRawAxes[MotionEvent.AXIS_RTRIGGER], ERROR_TOLERANCE);
274 }
275
276 private void assertMappedHatAxisToDpadButtons() {
277 float hatX = mRawAxes[MotionEvent.AXIS_HAT_X];
278 float hatY = mRawAxes[MotionEvent.AXIS_HAT_Y];
279 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.DPAD_LEFT],
280 GamepadMappings.negativeAxisValueAsButton(hatX), ERROR_TOLERANCE );
281 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.DPAD_RIGHT],
282 GamepadMappings.positiveAxisValueAsButton(hatX), ERROR_TOLERANCE );
283 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.DPAD_UP],
284 GamepadMappings.negativeAxisValueAsButton(hatY), ERROR_TOLERANCE );
285 Assert.assertEquals(mMappedButtons[CanonicalButtonIndex.DPAD_DOWN],
286 GamepadMappings.positiveAxisValueAsButton(hatY), ERROR_TOLERANCE );
287 }
288
289 private void assertMappedXYAxes() {
290 Assert.assertEquals(mMappedAxes[CanonicalAxisIndex.LEFT_STICK_X],
291 mRawAxes[MotionEvent.AXIS_X], ERROR_TOLERANCE);
292 Assert.assertEquals(mMappedAxes[CanonicalAxisIndex.LEFT_STICK_Y],
293 mRawAxes[MotionEvent.AXIS_Y], ERROR_TOLERANCE);
294 }
295
296 private void assertMappedRXAndRYAxesToRightStick() {
297 Assert.assertEquals(mMappedAxes[CanonicalAxisIndex.RIGHT_STICK_X],
298 mRawAxes[MotionEvent.AXIS_RX], ERROR_TOLERANCE);
299 Assert.assertEquals(mMappedAxes[CanonicalAxisIndex.RIGHT_STICK_Y],
300 mRawAxes[MotionEvent.AXIS_RY], ERROR_TOLERANCE);
301 }
302
303 private void assertMappedZAndRZAxesToRightStick() {
304 Assert.assertEquals(mMappedAxes[CanonicalAxisIndex.RIGHT_STICK_X],
305 mRawAxes[MotionEvent.AXIS_Z], ERROR_TOLERANCE);
306 Assert.assertEquals(mMappedAxes[CanonicalAxisIndex.RIGHT_STICK_Y],
307 mRawAxes[MotionEvent.AXIS_RZ], ERROR_TOLERANCE);
308 }
309 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698