Filtering out 0x0d, 0x0a sequences from shell commands. Makes screenshotting work again. :-)

This commit is contained in:
Samuel Carlsson 2016-03-28 09:41:53 +02:00
parent 41872e3bb9
commit c9a0a59ace
5 changed files with 76 additions and 1 deletions

1
.gitignore vendored
View File

@ -1,6 +1,7 @@
Generated by tests
/foobar.md
/xyz
screenshot.png
#################
## Eclipse

View File

@ -0,0 +1,21 @@
package se.vidstige.jadb;
import java.io.IOException;
import java.io.OutputStream;
public class AdbFilterOutputStream extends LookBackFilteringOutputStream {
public AdbFilterOutputStream(OutputStream inner) {
super(inner, 1);
}
@Override
public void write(int c) throws IOException {
if (!lookback().isEmpty()) {
Byte last = lookback().getFirst();
if (last != null && last == 0x0d && c == 0x0a) {
unwrite();
}
}
super.write(c);
}
}

View File

@ -60,7 +60,7 @@ public class JadbDevice {
}
send(transport, "shell:" + shellLine.toString());
if (stdout != null) {
transport.readResponseTo(stdout);
transport.readResponseTo(new AdbFilterOutputStream(stdout));
}
}

View File

@ -0,0 +1,44 @@
package se.vidstige.jadb.test;
import org.junit.Assert;
import org.junit.Test;
import se.vidstige.jadb.AdbFilterOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class AdbOutputStreamFixture {
private byte[] passthrough(byte[] input) throws IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
OutputStream sut = new AdbFilterOutputStream(output);
sut.write(input);
sut.flush();
return output.toByteArray();
}
@Test
public void testSimple() throws Exception {
byte[] actual = passthrough(new byte[]{ 1, 2, 3});
Assert.assertArrayEquals(new byte[]{ 1, 2, 3}, actual);
}
@Test
public void testEmpty() throws Exception {
byte[] actual = passthrough(new byte[]{});
Assert.assertArrayEquals(new byte[]{}, actual);
}
@Test
public void testSimpleRemoval() throws Exception {
byte[] actual = passthrough(new byte[]{0x0d, 0x0a});
Assert.assertArrayEquals(new byte[]{0x0a}, actual);
}
@Test
public void testDoubleRemoval() throws Exception {
byte[] actual = passthrough(new byte[]{0x0d, 0x0a, 0x0d, 0x0a});
Assert.assertArrayEquals(new byte[]{0x0a, 0x0a}, actual);
}
}

View File

@ -7,6 +7,7 @@ import se.vidstige.jadb.JadbException;
import se.vidstige.jadb.RemoteFile;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
public class RealDeviceTestCases {
@ -77,4 +78,12 @@ public class RealDeviceTestCases {
any.executeShell(System.out, "ls /");
any.executeShell(System.out, "ls", "-la", "/");
}
@Test
public void testScreenshot() throws Exception {
JadbConnection jadb = new JadbConnection();
JadbDevice any = jadb.getAnyDevice();
FileOutputStream outputStream = new FileOutputStream(new File("screenshot.png"));
any.executeShell(outputStream, "screencap", "-p");
}
}