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

Unified Diff: content/public/android/javatests/src/org/chromium/content/browser/input/GamepadMappingsTest.java

Issue 875813003: Gamepad: Add support for the Amazon Fire Game Controller (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: git cl format Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/public/android/java/src/org/chromium/content/browser/input/GamepadMappings.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/public/android/javatests/src/org/chromium/content/browser/input/GamepadMappingsTest.java
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/GamepadMappingsTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/GamepadMappingsTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..5ae486d5c7be4b0d20456068387dda08c6140406
--- /dev/null
+++ b/content/public/android/javatests/src/org/chromium/content/browser/input/GamepadMappingsTest.java
@@ -0,0 +1,294 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.content.browser.input;
+
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+
+import org.chromium.base.test.util.Feature;
+
+import java.util.Arrays;
+import java.util.BitSet;
+
+/**
+ * Verify no regressions in gamepad mappings.
+ */
+public class GamepadMappingsTest extends InstrumentationTestCase {
+ /**
+ * Set bits indicate that we don't expect the button at mMappedButtons[index] to be mapped.
+ */
+ private BitSet mUnmappedButtons = new BitSet(CanonicalButtonIndex.COUNT);
+ /**
+ * Set bits indicate that we don't expect the axis at mMappedAxes[index] to be mapped.
+ */
+ private BitSet mUnmappedAxes = new BitSet(CanonicalAxisIndex.COUNT);
+ private float[] mMappedButtons = new float[CanonicalButtonIndex.COUNT];
+ private float[] mMappedAxes = new float[CanonicalAxisIndex.COUNT];
+ private float[] mRawButtons = new float[GamepadDevice.MAX_RAW_BUTTON_VALUES];
+ private float[] mRawAxes = new float[GamepadDevice.MAX_RAW_AXIS_VALUES];
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ // By default, we expect every button and axis to be mapped.
+ mUnmappedButtons.clear();
+ mUnmappedAxes.clear();
+
+ // Start with all the mapped values as unmapped.
+ Arrays.fill(mMappedButtons, Float.NaN);
+ Arrays.fill(mMappedAxes, Float.NaN);
+
+ // Set each raw value to something unique.
+ for (int i = 0; i < GamepadDevice.MAX_RAW_AXIS_VALUES; i++) {
+ mRawAxes[i] = -i - 1.0f;
+ }
+ for (int i = 0; i < GamepadDevice.MAX_RAW_BUTTON_VALUES; i++) {
+ mRawButtons[i] = i + 1.0f;
+ }
+ }
+
+ @SmallTest
+ @Feature({"Gamepad"})
+ public void testShieldGamepadMappings() throws Exception {
+ GamepadMappings.mapToStandardGamepad(mMappedAxes, mMappedButtons, mRawAxes, mRawButtons,
+ GamepadMappings.NVIDIA_SHIELD_DEVICE_NAME_PREFIX);
+
+ assertShieldGamepadMappings();
+ }
+
+ @SmallTest
+ @Feature({"Gamepad"})
+ public void testXBox360GamepadMappings() throws Exception {
+ GamepadMappings.mapToStandardGamepad(mMappedAxes, mMappedButtons, mRawAxes, mRawButtons,
+ GamepadMappings.MICROSOFT_XBOX_PAD_DEVICE_NAME);
+
+ assertShieldGamepadMappings();
+ }
+
+ @SmallTest
+ @Feature({"Gamepad"})
+ public void testPS3SixAxisGamepadMappings() throws Exception {
+ GamepadMappings.mapToStandardGamepad(mMappedAxes, mMappedButtons, mRawAxes, mRawButtons,
+ GamepadMappings.PS3_SIXAXIS_DEVICE_NAME);
+
+ assertEquals(mMappedButtons[CanonicalButtonIndex.PRIMARY],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_X]);
+ assertEquals(mMappedButtons[CanonicalButtonIndex.SECONDARY],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_Y]);
+ assertEquals(mMappedButtons[CanonicalButtonIndex.TERTIARY],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_A]);
+ assertEquals(mMappedButtons[CanonicalButtonIndex.QUATERNARY],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_B]);
+
+ assertMappedCommonTriggerButtons();
+ assertMappedCommonThumbstickButtons();
+ assertMappedCommonDpadButtons();
+ assertMappedCommonStartSelectMetaButtons();
+ assertMappedTriggerAxexToShoulderButtons();
+ assertMappedXYAxes();
+ assertMappedZAndRZAxesToRightStick();
+
+ assertMapping();
+ }
+
+ @SmallTest
+ @Feature({"Gamepad"})
+ public void testSamsungEIGP20GamepadMappings() throws Exception {
+ GamepadMappings.mapToStandardGamepad(mMappedAxes, mMappedButtons, mRawAxes, mRawButtons,
+ GamepadMappings.SAMSUNG_EI_GP20_DEVICE_NAME);
+
+ assertMappedCommonXYABButtons();
+ assertMappedCommonTriggerButtons();
+ assertMappedCommonThumbstickButtons();
+ assertMappedCommonStartSelectMetaButtons();
+ assertMappedHatAxisToDpadButtons();
+ assertMappedXYAxes();
+ assertMappedRXAndRYAxesToRightStick();
+
+ expectNoShoulderButtons();
+ assertMapping();
+ }
+
+ @SmallTest
+ @Feature({"Gamepad"})
+ public void testAmazonFireGamepadMappings() throws Exception {
+ GamepadMappings.mapToStandardGamepad(mMappedAxes, mMappedButtons, mRawAxes, mRawButtons,
+ GamepadMappings.AMAZON_FIRE_DEVICE_NAME);
+
+ assertMappedCommonXYABButtons();
+ assertMappedPedalAxesToBottomShoulder();
+ assertMappedCommonThumbstickButtons();
+ assertMappedCommonStartSelectMetaButtons();
+ assertMappedTriggerButtonsToTopShoulder();
+ assertMappedHatAxisToDpadButtons();
+ assertMappedXYAxes();
+ assertMappedZAndRZAxesToRightStick();
+
+ assertMapping();
+ }
+
+ @SmallTest
+ @Feature({"Gamepad"})
+ public void testUnknownGamepadMappings() throws Exception {
+ GamepadMappings.mapToStandardGamepad(
+ mMappedAxes, mMappedButtons, mRawAxes, mRawButtons, "");
+
+ assertMappedCommonXYABButtons();
+ assertMappedCommonTriggerButtons();
+ assertMappedCommonThumbstickButtons();
+ assertMappedCommonStartSelectMetaButtons();
+ assertMappedTriggerAxexToShoulderButtons();
+ assertMappedCommonDpadButtons();
+ assertMappedXYAxes();
+ assertMappedRXAndRYAxesToRightStick();
+
+ assertMapping();
+ }
+
+ /**
+ * Asserts that the current gamepad mapping being tested matches the shield mappings.
+ */
+ public void assertShieldGamepadMappings() {
+ assertMappedCommonXYABButtons();
+ assertMappedTriggerButtonsToTopShoulder();
+ assertMappedCommonThumbstickButtons();
+ assertMappedCommonStartSelectMetaButtons();
+ assertMappedTriggerAxesToBottomShoulder();
+ assertMappedHatAxisToDpadButtons();
+ assertMappedXYAxes();
+ assertMappedZAndRZAxesToRightStick();
+
+ assertMapping();
+ }
+
+ public void expectNoShoulderButtons() {
+ mUnmappedButtons.set(CanonicalButtonIndex.LEFT_SHOULDER);
+ mUnmappedButtons.set(CanonicalButtonIndex.RIGHT_SHOULDER);
+ }
+
+ public void assertMapping() {
+ for (int i = 0; i < mMappedAxes.length; i++) {
+ if (mUnmappedAxes.get(i)) {
+ assertTrue(
+ "An unexpected axis was mapped at index " + i, Float.isNaN(mMappedAxes[i]));
+ } else {
+ assertFalse("An axis was not mapped at index " + i, Float.isNaN(mMappedAxes[i]));
+ }
+ }
+ for (int i = 0; i < mMappedButtons.length; i++) {
+ if (mUnmappedButtons.get(i)) {
+ assertTrue("An unexpected button was mapped at index " + i,
+ Float.isNaN(mMappedButtons[i]));
+ } else {
+ assertFalse(
+ "A button was not mapped at index " + i, Float.isNaN(mMappedButtons[i]));
+ }
+ }
+ }
+
+ private void assertMappedCommonTriggerButtons() {
+ assertEquals(mMappedButtons[CanonicalButtonIndex.LEFT_TRIGGER],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_L1]);
+ assertEquals(mMappedButtons[CanonicalButtonIndex.RIGHT_TRIGGER],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_R1]);
+ }
+
+ private void assertMappedCommonDpadButtons() {
+ assertEquals(mMappedButtons[CanonicalButtonIndex.DPAD_DOWN],
+ mRawButtons[KeyEvent.KEYCODE_DPAD_DOWN]);
+ assertEquals(mMappedButtons[CanonicalButtonIndex.DPAD_UP],
+ mRawButtons[KeyEvent.KEYCODE_DPAD_UP]);
+ assertEquals(mMappedButtons[CanonicalButtonIndex.DPAD_LEFT],
+ mRawButtons[KeyEvent.KEYCODE_DPAD_LEFT]);
+ assertEquals(mMappedButtons[CanonicalButtonIndex.DPAD_RIGHT],
+ mRawButtons[KeyEvent.KEYCODE_DPAD_RIGHT]);
+ }
+
+ private void assertMappedTriggerAxexToShoulderButtons() {
+ assertEquals(mMappedButtons[CanonicalButtonIndex.LEFT_SHOULDER],
+ mRawAxes[MotionEvent.AXIS_LTRIGGER]);
+ assertEquals(mMappedButtons[CanonicalButtonIndex.RIGHT_SHOULDER],
+ mRawAxes[MotionEvent.AXIS_RTRIGGER]);
+ }
+
+ private void assertMappedTriggerButtonsToTopShoulder() {
+ assertEquals(mMappedButtons[CanonicalButtonIndex.LEFT_SHOULDER],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_L1]);
+ assertEquals(mMappedButtons[CanonicalButtonIndex.RIGHT_SHOULDER],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_R1]);
+ }
+
+ private void assertMappedCommonXYABButtons() {
+ assertEquals(mMappedButtons[CanonicalButtonIndex.PRIMARY],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_A]);
+ assertEquals(mMappedButtons[CanonicalButtonIndex.SECONDARY],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_B]);
+ assertEquals(mMappedButtons[CanonicalButtonIndex.TERTIARY],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_X]);
+ assertEquals(mMappedButtons[CanonicalButtonIndex.QUATERNARY],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_Y]);
+ }
+
+ private void assertMappedCommonThumbstickButtons() {
+ assertEquals(mMappedButtons[CanonicalButtonIndex.LEFT_THUMBSTICK],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_THUMBL]);
+ assertEquals(mMappedButtons[CanonicalButtonIndex.RIGHT_THUMBSTICK],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_THUMBR]);
+ }
+
+ private void assertMappedCommonStartSelectMetaButtons() {
+ assertEquals(mMappedButtons[CanonicalButtonIndex.START],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_START]);
+ assertEquals(mMappedButtons[CanonicalButtonIndex.BACK_SELECT],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_SELECT]);
+ assertEquals(mMappedButtons[CanonicalButtonIndex.META],
+ mRawButtons[KeyEvent.KEYCODE_BUTTON_MODE]);
+ }
+
+ private void assertMappedPedalAxesToBottomShoulder() {
+ assertEquals(mMappedButtons[CanonicalButtonIndex.LEFT_TRIGGER],
+ mRawAxes[MotionEvent.AXIS_BRAKE]);
+ assertEquals(
+ mMappedButtons[CanonicalButtonIndex.RIGHT_TRIGGER], mRawAxes[MotionEvent.AXIS_GAS]);
+ }
+
+ private void assertMappedTriggerAxesToBottomShoulder() {
+ assertEquals(mMappedButtons[CanonicalButtonIndex.LEFT_TRIGGER],
+ mRawAxes[MotionEvent.AXIS_LTRIGGER]);
+ assertEquals(mMappedButtons[CanonicalButtonIndex.RIGHT_TRIGGER],
+ mRawAxes[MotionEvent.AXIS_RTRIGGER]);
+ }
+
+ private void assertMappedHatAxisToDpadButtons() {
+ float hatX = mRawAxes[MotionEvent.AXIS_HAT_X];
+ float hatY = mRawAxes[MotionEvent.AXIS_HAT_Y];
+ assertEquals(mMappedButtons[CanonicalButtonIndex.DPAD_LEFT],
+ GamepadMappings.negativeAxisValueAsButton(hatX));
+ assertEquals(mMappedButtons[CanonicalButtonIndex.DPAD_RIGHT],
+ GamepadMappings.positiveAxisValueAsButton(hatX));
+ assertEquals(mMappedButtons[CanonicalButtonIndex.DPAD_UP],
+ GamepadMappings.negativeAxisValueAsButton(hatY));
+ assertEquals(mMappedButtons[CanonicalButtonIndex.DPAD_DOWN],
+ GamepadMappings.positiveAxisValueAsButton(hatY));
+ }
+
+ private void assertMappedXYAxes() {
+ assertEquals(mMappedAxes[CanonicalAxisIndex.LEFT_STICK_X], mRawAxes[MotionEvent.AXIS_X]);
+ assertEquals(mMappedAxes[CanonicalAxisIndex.LEFT_STICK_Y], mRawAxes[MotionEvent.AXIS_Y]);
+ }
+
+ private void assertMappedRXAndRYAxesToRightStick() {
+ assertEquals(mMappedAxes[CanonicalAxisIndex.RIGHT_STICK_X], mRawAxes[MotionEvent.AXIS_RX]);
+ assertEquals(mMappedAxes[CanonicalAxisIndex.RIGHT_STICK_Y], mRawAxes[MotionEvent.AXIS_RY]);
+ }
+
+ private void assertMappedZAndRZAxesToRightStick() {
+ assertEquals(mMappedAxes[CanonicalAxisIndex.RIGHT_STICK_X], mRawAxes[MotionEvent.AXIS_Z]);
+ assertEquals(mMappedAxes[CanonicalAxisIndex.RIGHT_STICK_Y], mRawAxes[MotionEvent.AXIS_RZ]);
+ }
+}
« no previous file with comments | « content/public/android/java/src/org/chromium/content/browser/input/GamepadMappings.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698