Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dc6ec7e8 authored by Felipe Leme's avatar Felipe Leme Committed by Android (Google) Code Review
Browse files

Merge "Improvements on KeyEventTest."

parents 29297912 7630a4e0
Loading
Loading
Loading
Loading
+156 −52
Original line number Diff line number Diff line
@@ -18,8 +18,8 @@ package android.view;

import static android.view.Display.INVALID_DISPLAY;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;

import android.os.Parcel;
import android.platform.test.annotations.Presubmit;
@@ -27,6 +27,9 @@ import android.platform.test.annotations.Presubmit;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;

import com.google.common.truth.Expect;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

@@ -36,7 +39,7 @@ import java.util.Set;
@SmallTest
@RunWith(AndroidJUnit4.class)
@Presubmit
public class KeyEventTest {
public final class KeyEventTest {

    private static final int DOWN_TIME = 50;
    private static final long EVENT_TIME = 100;
@@ -52,22 +55,14 @@ public class KeyEventTest {

    private static final int ID_SOURCE_MASK = 0x3 << 30;

    @Rule public final Expect expect = Expect.create();

    @Test
    public void testObtain() {
        KeyEvent keyEvent = KeyEvent.obtain(DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT,
                METASTATE, DEVICE_ID, SCAN_CODE, FLAGS, SOURCE, CHARACTERS);
        assertEquals(DOWN_TIME, keyEvent.getDownTime());
        assertEquals(EVENT_TIME, keyEvent.getEventTime());
        assertEquals(ACTION, keyEvent.getAction());
        assertEquals(KEYCODE, keyEvent.getKeyCode());
        assertEquals(REPEAT, keyEvent.getRepeatCount());
        assertEquals(METASTATE, keyEvent.getMetaState());
        assertEquals(DEVICE_ID, keyEvent.getDeviceId());
        assertEquals(SCAN_CODE, keyEvent.getScanCode());
        assertEquals(FLAGS, keyEvent.getFlags());
        assertEquals(SOURCE, keyEvent.getSource());
        assertEquals(INVALID_DISPLAY, keyEvent.getDisplayId());
        assertEquals(CHARACTERS, keyEvent.getCharacters());

        assertHasDefaultFields(keyEvent, INVALID_DISPLAY);
    }

    @Test
@@ -75,6 +70,7 @@ public class KeyEventTest {
        KeyEvent keyEvent = KeyEvent.obtain(DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT,
                METASTATE, DEVICE_ID, SCAN_CODE, FLAGS, SOURCE, CHARACTERS);
        KeyEvent keyEvent2 = KeyEvent.obtain(keyEvent);

        compareKeys(keyEvent, keyEvent2);
    }

@@ -83,18 +79,8 @@ public class KeyEventTest {
        final int displayId = 5;
        KeyEvent keyEvent = KeyEvent.obtain(DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT,
                METASTATE, DEVICE_ID, SCAN_CODE, FLAGS, SOURCE, displayId, CHARACTERS);
        assertEquals(DOWN_TIME, keyEvent.getDownTime());
        assertEquals(EVENT_TIME, keyEvent.getEventTime());
        assertEquals(ACTION, keyEvent.getAction());
        assertEquals(KEYCODE, keyEvent.getKeyCode());
        assertEquals(REPEAT, keyEvent.getRepeatCount());
        assertEquals(METASTATE, keyEvent.getMetaState());
        assertEquals(DEVICE_ID, keyEvent.getDeviceId());
        assertEquals(SCAN_CODE, keyEvent.getScanCode());
        assertEquals(FLAGS, keyEvent.getFlags());
        assertEquals(SOURCE, keyEvent.getSource());
        assertEquals(displayId, keyEvent.getDisplayId());
        assertEquals(CHARACTERS, keyEvent.getCharacters());

        assertHasDefaultFields(keyEvent, displayId);
    }

    /**
@@ -109,8 +95,8 @@ public class KeyEventTest {
        for (int i = 0; i < 500; ++i) {
            KeyEvent keyEvent = KeyEvent.obtain(DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT,
                    METASTATE, DEVICE_ID, SCAN_CODE, FLAGS, SOURCE, CHARACTERS);
            assertFalse("Found duplicate ID in round " + i,
                    set.contains(keyEvent.getId()));
            assertWithMessage("event IDs (event generated on round %s: %s)", i, keyEvent)
                    .that(set).doesNotContain(keyEvent.getId());
            set.add(keyEvent.getSequenceNumber());
        }
    }
@@ -120,8 +106,8 @@ public class KeyEventTest {
        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < 500; ++i) {
            KeyEvent keyEvent = new KeyEvent(DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT);
            assertFalse("Found duplicate sequence number in round " + i,
                    set.contains(keyEvent.getId()));
            assertWithMessage("sequence numbers (event generated on round %s: %s)", i, keyEvent)
                    .that(set).doesNotContain(keyEvent.getSequenceNumber());
            set.add(keyEvent.getSequenceNumber());
        }
    }
@@ -131,7 +117,7 @@ public class KeyEventTest {
        for (int i = 0; i < 500; ++i) {
            KeyEvent keyEvent = KeyEvent.obtain(DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT,
                    METASTATE, DEVICE_ID, SCAN_CODE, FLAGS, SOURCE, CHARACTERS);
            assertEquals(0x3 << 30, ID_SOURCE_MASK & keyEvent.getId());
            assertThat((ID_SOURCE_MASK & keyEvent.getId())).isEqualTo((0x3 << 30));
        }
    }

@@ -139,48 +125,166 @@ public class KeyEventTest {
    public void testConstructorGeneratesIdWithRightSource() {
        for (int i = 0; i < 500; ++i) {
            KeyEvent keyEvent = new KeyEvent(DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT);
            assertEquals(0x3 << 30, ID_SOURCE_MASK & keyEvent.getId());
            assertThat((ID_SOURCE_MASK & keyEvent.getId())).isEqualTo((0x3 << 30));
        }
    }

    @Test
    public void testParcelUnparcel() {
        KeyEvent key1 = createKey();
        KeyEvent key2;

        Parcel parcel = Parcel.obtain();
        key1.writeToParcel(parcel, 0 /*flags*/);
        try {
            key1.writeToParcel(parcel, /* flags= */ 0);
            parcel.setDataPosition(0);

        KeyEvent key2 = KeyEvent.CREATOR.createFromParcel(parcel);
            key2 = KeyEvent.CREATOR.createFromParcel(parcel);
        } finally {
            parcel.recycle();
        }

        compareKeys(key1, key2);
    }

    @Test
    public void testConstructor() {
    public void testCopyConstructor() {
        KeyEvent key1 = createKey();
        KeyEvent key2 = new KeyEvent(key1);

        compareKeys(key1, key2);
    }

    @Test
    public void testConstructorWith10Args() {
        KeyEvent key = new KeyEvent(DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT, METASTATE,
                DEVICE_ID, SCAN_CODE, FLAGS, SOURCE);

        assertKeyEventFields(key, DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT, METASTATE,
                DEVICE_ID, SCAN_CODE, FLAGS, SOURCE, INVALID_DISPLAY, CHARACTERS);
    }

    @Test
    public void testConstructorWith9Args() {
        KeyEvent key = new KeyEvent(DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT, METASTATE,
                DEVICE_ID, SCAN_CODE, FLAGS);

        assertKeyEventFields(key, DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT, METASTATE,
                DEVICE_ID, SCAN_CODE, FLAGS, /* source= */ 0, /* displayId= */ 0,
                CHARACTERS);
    }

    @Test
    public void testConstructorWith8Args() {
        KeyEvent key = new KeyEvent(DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT, METASTATE,
                DEVICE_ID, SCAN_CODE);

        assertKeyEventFields(key, DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT, METASTATE,
                DEVICE_ID, SCAN_CODE, /* flags= */ 0, /* source= */ 0, /* displayId= */ 0,
                CHARACTERS);
    }

    @Test
    public void testConstructorWith6Args() {
        KeyEvent key = new KeyEvent(DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT, METASTATE);

        assertKeyEventFields(key, DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT, METASTATE,
                KeyCharacterMap.VIRTUAL_KEYBOARD, /* scanCode= */ 0, /* flags= */ 0,
                /* source= */ 0, /* displayId= */ 0, CHARACTERS);
    }

    @Test
    public void testConstructorWith5Args() {
        KeyEvent key = new KeyEvent(DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT);

        assertKeyEventFields(key, DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT,
                /* metaState= */ 0, KeyCharacterMap.VIRTUAL_KEYBOARD, /* scanCode= */ 0,
                /* flags= */ 0, /* source= */ 0, /* displayId= */ 0, CHARACTERS);
    }

    @Test
    public void testConstructorWith4Args() {
        KeyEvent key = new KeyEvent(42, CHARACTERS, DEVICE_ID, FLAGS);

        assertKeyEventFields(key, /* downTime= */ 42, /* eventTime= */ 42, KeyEvent.ACTION_MULTIPLE,
                KeyEvent.KEYCODE_UNKNOWN, /* repeat= */ 0, /* metaState= */ 0, DEVICE_ID,
                /* scanCode= */ 0, FLAGS, InputDevice.SOURCE_KEYBOARD, INVALID_DISPLAY, CHARACTERS);
    }

    @Test
    public void testConstructorWith2rgs() {
        KeyEvent key = new KeyEvent(ACTION, KEYCODE);

        assertKeyEventFields(key, /* downTime= */ 0, /* eventTime= */ 0, ACTION, KEYCODE,
                /* repeat= */ 0, /* metaState= */ 0, KeyCharacterMap.VIRTUAL_KEYBOARD,
                /* scanCode= */ 0, FLAGS, /* source= */ 0, /* displayId= */ 0, CHARACTERS);
    }

    private static KeyEvent createKey() {
        return KeyEvent.obtain(DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT, METASTATE,
                DEVICE_ID, SCAN_CODE, FLAGS, SOURCE, INVALID_DISPLAY, CHARACTERS);
    }

    private static void compareKeys(KeyEvent key1, KeyEvent key2) {
        assertEquals(key1.getId(), key2.getId());
        assertEquals(key1.getDownTime(), key2.getDownTime());
        assertEquals(key1.getEventTime(), key2.getEventTime());
        assertEquals(key1.getAction(), key2.getAction());
        assertEquals(key1.getKeyCode(), key2.getKeyCode());
        assertEquals(key1.getRepeatCount(), key2.getRepeatCount());
        assertEquals(key1.getMetaState(), key2.getMetaState());
        assertEquals(key1.getDeviceId(), key2.getDeviceId());
        assertEquals(key1.getScanCode(), key2.getScanCode());
        assertEquals(key1.getFlags(), key2.getFlags());
        assertEquals(key1.getSource(), key2.getSource());
        assertEquals(key1.getDisplayId(), key2.getDisplayId());
        assertEquals(key1.getCharacters(), key2.getCharacters());
    private void compareKeys(KeyEvent key1, KeyEvent key2) {
        expect.withMessage("id (key1=%s, key2=%s)", key1, key2)
                .that(key2.getId()).isEqualTo(key1.getId());
        expect.withMessage("downTime (key1=%s, key2=%s)", key1, key2)
                .that(key2.getDownTime()).isEqualTo(key1.getDownTime());
        expect.withMessage("eventTime (key1=%s, key2=%s)", key1, key2)
                .that(key2.getEventTime()).isEqualTo(key1.getEventTime());
        expect.withMessage("action (key1=%s, key2=%s)", key1, key2)
                .that(key2.getAction()).isEqualTo(key1.getAction());
        expect.withMessage("keyCode (key1=%s, key2=%s)", key1, key2)
                .that(key2.getKeyCode()).isEqualTo(key1.getKeyCode());
        expect.withMessage("repatCount (key1=%s, key2=%s)", key1, key2)
                .that(key2.getRepeatCount()).isEqualTo(key1.getRepeatCount());
        expect.withMessage("metaState (key1=%s, key2=%s)", key1, key2)
                .that(key2.getMetaState()).isEqualTo(key1.getMetaState());
        expect.withMessage("deviceId (key1=%s, key2=%s)", key1, key2)
                .that(key2.getDeviceId()).isEqualTo(key1.getDeviceId());
        expect.withMessage("scanCode (key1=%s, key2=%s)", key1, key2)
                .that(key2.getScanCode()).isEqualTo(key1.getScanCode());
        expect.withMessage("flags (key1=%s, key2=%s)", key1, key2)
                .that(key2.getFlags()).isEqualTo(key1.getFlags());
        expect.withMessage("source (key1=%s, key2=%s)", key1, key2)
                .that(key2.getSource()).isEqualTo(key1.getSource());
        expect.withMessage("displayId(key1=%s, key2=%s)", key1, key2)
                .that(key2.getDisplayId()).isEqualTo(key1.getDisplayId());
        expect.withMessage("characters(key1=%s, key2=%s)", key1, key2)
                .that(key2.getCharacters()).isEqualTo(key1.getCharacters());
    }

    private void assertHasDefaultFields(KeyEvent keyEvent, int displayId) {
        assertKeyEventFields(keyEvent, DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT, METASTATE,
                DEVICE_ID, SCAN_CODE, FLAGS, InputDevice.SOURCE_KEYBOARD, displayId, CHARACTERS);
    }

    private void assertKeyEventFields(KeyEvent keyEvent, long downTime, long eventTime,
            int action, int keyCode, int repeat, int metaState, int deviceId, int scanCode,
            int flags, int source, int displayId, String characters) {
        expect.withMessage("downTime on %s", keyEvent)
                .that(keyEvent.getDownTime()).isEqualTo(downTime);
        expect.withMessage("eventTime on %s", keyEvent)
                .that(keyEvent.getEventTime()).isEqualTo(eventTime);
        expect.withMessage("action on %s", keyEvent)
                .that(keyEvent.getAction()).isEqualTo(action);
        expect.withMessage("keyCode on %s", keyEvent)
                .that(keyEvent.getKeyCode()).isEqualTo(keyCode);
        expect.withMessage("repeatCount on %s", keyEvent)
                .that(keyEvent.getRepeatCount()).isEqualTo(repeat);
        expect.withMessage("metaState on %s", keyEvent)
                .that(keyEvent.getMetaState()).isEqualTo(metaState);
        expect.withMessage("deviceId on %s", keyEvent)
                .that(keyEvent.getDeviceId()).isEqualTo(deviceId);
        expect.withMessage("scanCode on %s", keyEvent)
                .that(keyEvent.getScanCode()).isEqualTo(scanCode);
        expect.withMessage("flags on %s", keyEvent)
                .that(keyEvent.getFlags()).isEqualTo(flags);
        expect.withMessage("source on %s", keyEvent)
                .that(keyEvent.getSource()).isEqualTo(source);
        expect.withMessage("displayId on %s", keyEvent)
                .that(keyEvent.getDisplayId()).isEqualTo(displayId);
        expect.withMessage("characters on %s", keyEvent)
                .that(keyEvent.getCharacters()).isEqualTo(characters);
    }
}