Merge "Improvements on KeyEventTest."
This commit is contained in:
@@ -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();
|
||||
Parcel parcel = Parcel.obtain();
|
||||
key1.writeToParcel(parcel, 0 /*flags*/);
|
||||
parcel.setDataPosition(0);
|
||||
KeyEvent key2;
|
||||
|
||||
KeyEvent key2 = KeyEvent.CREATOR.createFromParcel(parcel);
|
||||
parcel.recycle();
|
||||
Parcel parcel = Parcel.obtain();
|
||||
try {
|
||||
key1.writeToParcel(parcel, /* flags= */ 0);
|
||||
parcel.setDataPosition(0);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user