mirror of https://github.com/Genymobile/scrcpy
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
5.8 KiB
Java
152 lines
5.8 KiB
Java
package com.genymobile.scrcpy;
|
|
|
|
import android.view.KeyEvent;
|
|
import android.view.MotionEvent;
|
|
|
|
import org.junit.Assert;
|
|
import org.junit.Test;
|
|
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.DataOutputStream;
|
|
import java.io.IOException;
|
|
import java.nio.charset.StandardCharsets;
|
|
|
|
public class ControlEventReaderTest {
|
|
|
|
@Test
|
|
public void testParseKeycodeEvent() throws IOException {
|
|
ControlEventReader reader = new ControlEventReader();
|
|
|
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
DataOutputStream dos = new DataOutputStream(bos);
|
|
dos.writeByte(ControlEvent.TYPE_KEYCODE);
|
|
dos.writeByte(KeyEvent.ACTION_UP);
|
|
dos.writeInt(KeyEvent.KEYCODE_ENTER);
|
|
dos.writeInt(KeyEvent.META_CTRL_ON);
|
|
byte[] packet = bos.toByteArray();
|
|
|
|
reader.readFrom(new ByteArrayInputStream(packet));
|
|
ControlEvent event = reader.next();
|
|
|
|
Assert.assertEquals(ControlEvent.TYPE_KEYCODE, event.getType());
|
|
Assert.assertEquals(KeyEvent.ACTION_UP, event.getAction());
|
|
Assert.assertEquals(KeyEvent.KEYCODE_ENTER, event.getKeycode());
|
|
Assert.assertEquals(KeyEvent.META_CTRL_ON, event.getMetaState());
|
|
}
|
|
|
|
@Test
|
|
public void testParseTextEvent() throws IOException {
|
|
ControlEventReader reader = new ControlEventReader();
|
|
|
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
DataOutputStream dos = new DataOutputStream(bos);
|
|
dos.writeByte(ControlEvent.TYPE_TEXT);
|
|
byte[] text = "testé".getBytes(StandardCharsets.UTF_8);
|
|
dos.writeByte(text.length);
|
|
dos.write("testé".getBytes(StandardCharsets.UTF_8));
|
|
byte[] packet = bos.toByteArray();
|
|
|
|
reader.readFrom(new ByteArrayInputStream(packet));
|
|
ControlEvent event = reader.next();
|
|
|
|
Assert.assertEquals(ControlEvent.TYPE_TEXT, event.getType());
|
|
Assert.assertEquals("testé", event.getText());
|
|
}
|
|
|
|
@Test
|
|
public void testParseMouseEvent() throws IOException {
|
|
ControlEventReader reader = new ControlEventReader();
|
|
|
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
DataOutputStream dos = new DataOutputStream(bos);
|
|
dos.writeByte(ControlEvent.TYPE_KEYCODE);
|
|
dos.writeByte(MotionEvent.ACTION_DOWN);
|
|
dos.writeInt(MotionEvent.BUTTON_PRIMARY);
|
|
dos.writeInt(KeyEvent.META_CTRL_ON);
|
|
byte[] packet = bos.toByteArray();
|
|
|
|
reader.readFrom(new ByteArrayInputStream(packet));
|
|
ControlEvent event = reader.next();
|
|
|
|
Assert.assertEquals(ControlEvent.TYPE_KEYCODE, event.getType());
|
|
Assert.assertEquals(MotionEvent.ACTION_DOWN, event.getAction());
|
|
Assert.assertEquals(MotionEvent.BUTTON_PRIMARY, event.getKeycode());
|
|
Assert.assertEquals(KeyEvent.META_CTRL_ON, event.getMetaState());
|
|
}
|
|
|
|
@Test
|
|
public void testMultiEvents() throws IOException {
|
|
ControlEventReader reader = new ControlEventReader();
|
|
|
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
DataOutputStream dos = new DataOutputStream(bos);
|
|
|
|
dos.writeByte(ControlEvent.TYPE_KEYCODE);
|
|
dos.writeByte(KeyEvent.ACTION_UP);
|
|
dos.writeInt(KeyEvent.KEYCODE_ENTER);
|
|
dos.writeInt(KeyEvent.META_CTRL_ON);
|
|
|
|
dos.writeByte(ControlEvent.TYPE_KEYCODE);
|
|
dos.writeByte(MotionEvent.ACTION_DOWN);
|
|
dos.writeInt(MotionEvent.BUTTON_PRIMARY);
|
|
dos.writeInt(KeyEvent.META_CTRL_ON);
|
|
|
|
byte[] packet = bos.toByteArray();
|
|
reader.readFrom(new ByteArrayInputStream(packet));
|
|
|
|
ControlEvent event = reader.next();
|
|
Assert.assertEquals(ControlEvent.TYPE_KEYCODE, event.getType());
|
|
Assert.assertEquals(KeyEvent.ACTION_UP, event.getAction());
|
|
Assert.assertEquals(KeyEvent.KEYCODE_ENTER, event.getKeycode());
|
|
Assert.assertEquals(KeyEvent.META_CTRL_ON, event.getMetaState());
|
|
|
|
event = reader.next();
|
|
Assert.assertEquals(ControlEvent.TYPE_KEYCODE, event.getType());
|
|
Assert.assertEquals(MotionEvent.ACTION_DOWN, event.getAction());
|
|
Assert.assertEquals(MotionEvent.BUTTON_PRIMARY, event.getKeycode());
|
|
Assert.assertEquals(KeyEvent.META_CTRL_ON, event.getMetaState());
|
|
}
|
|
|
|
@Test
|
|
public void testPartialEvents() throws IOException {
|
|
ControlEventReader reader = new ControlEventReader();
|
|
|
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
DataOutputStream dos = new DataOutputStream(bos);
|
|
|
|
dos.writeByte(ControlEvent.TYPE_KEYCODE);
|
|
dos.writeByte(KeyEvent.ACTION_UP);
|
|
dos.writeInt(KeyEvent.KEYCODE_ENTER);
|
|
dos.writeInt(KeyEvent.META_CTRL_ON);
|
|
|
|
dos.writeByte(ControlEvent.TYPE_KEYCODE);
|
|
dos.writeByte(MotionEvent.ACTION_DOWN);
|
|
|
|
byte[] packet = bos.toByteArray();
|
|
reader.readFrom(new ByteArrayInputStream(packet));
|
|
|
|
ControlEvent event = reader.next();
|
|
Assert.assertEquals(ControlEvent.TYPE_KEYCODE, event.getType());
|
|
Assert.assertEquals(KeyEvent.ACTION_UP, event.getAction());
|
|
Assert.assertEquals(KeyEvent.KEYCODE_ENTER, event.getKeycode());
|
|
Assert.assertEquals(KeyEvent.META_CTRL_ON, event.getMetaState());
|
|
|
|
event = reader.next();
|
|
Assert.assertNull(event); // the event is not complete
|
|
|
|
bos.reset();
|
|
dos.writeInt(MotionEvent.BUTTON_PRIMARY);
|
|
dos.writeInt(KeyEvent.META_CTRL_ON);
|
|
packet = bos.toByteArray();
|
|
reader.readFrom(new ByteArrayInputStream(packet));
|
|
|
|
// the event is now complete
|
|
event = reader.next();
|
|
Assert.assertEquals(ControlEvent.TYPE_KEYCODE, event.getType());
|
|
Assert.assertEquals(MotionEvent.ACTION_DOWN, event.getAction());
|
|
Assert.assertEquals(MotionEvent.BUTTON_PRIMARY, event.getKeycode());
|
|
Assert.assertEquals(KeyEvent.META_CTRL_ON, event.getMetaState());
|
|
}
|
|
}
|