Index: third_party/protobuf/java/core/src/test/java/com/google/protobuf/CodedInputStreamTest.java |
diff --git a/third_party/protobuf/java/src/test/java/com/google/protobuf/CodedInputStreamTest.java b/third_party/protobuf/java/core/src/test/java/com/google/protobuf/CodedInputStreamTest.java |
similarity index 93% |
rename from third_party/protobuf/java/src/test/java/com/google/protobuf/CodedInputStreamTest.java |
rename to third_party/protobuf/java/core/src/test/java/com/google/protobuf/CodedInputStreamTest.java |
index 18d8142c90277ab839cdd5f4003c1088a60e89f1..ca940cedb24535ede3794c36b17cd463f40f1a51 100644 |
--- a/third_party/protobuf/java/src/test/java/com/google/protobuf/CodedInputStreamTest.java |
+++ b/third_party/protobuf/java/core/src/test/java/com/google/protobuf/CodedInputStreamTest.java |
@@ -81,10 +81,12 @@ public class CodedInputStreamTest extends TestCase { |
this.blockSize = blockSize; |
} |
+ @Override |
public int read(byte[] b) throws IOException { |
return super.read(b, 0, Math.min(b.length, blockSize)); |
} |
+ @Override |
public int read(byte[] b, int off, int len) throws IOException { |
return super.read(b, off, Math.min(len, blockSize)); |
} |
@@ -547,6 +549,56 @@ public class CodedInputStreamTest extends TestCase { |
} |
} |
+ public void testReadString() throws Exception { |
+ String lorem = "Lorem ipsum dolor sit amet "; |
+ StringBuilder builder = new StringBuilder(); |
+ for (int i = 0; i < 4096; i += lorem.length()) { |
+ builder.append(lorem); |
+ } |
+ lorem = builder.toString().substring(0, 4096); |
+ byte[] bytes = lorem.getBytes("UTF-8"); |
+ ByteString.Output rawOutput = ByteString.newOutput(); |
+ CodedOutputStream output = CodedOutputStream.newInstance(rawOutput, bytes.length); |
+ |
+ int tag = WireFormat.makeTag(1, WireFormat.WIRETYPE_LENGTH_DELIMITED); |
+ output.writeRawVarint32(tag); |
+ output.writeRawVarint32(bytes.length); |
+ output.writeRawBytes(bytes); |
+ output.flush(); |
+ |
+ CodedInputStream input = |
+ CodedInputStream.newInstance( |
+ new ByteArrayInputStream(rawOutput.toByteString().toByteArray())); |
+ assertEquals(tag, input.readTag()); |
+ String text = input.readString(); |
+ assertEquals(lorem, text); |
+ } |
+ |
+ public void testReadStringRequireUtf8() throws Exception { |
+ String lorem = "Lorem ipsum dolor sit amet "; |
+ StringBuilder builder = new StringBuilder(); |
+ for (int i = 0; i < 4096; i += lorem.length()) { |
+ builder.append(lorem); |
+ } |
+ lorem = builder.toString().substring(0, 4096); |
+ byte[] bytes = lorem.getBytes("UTF-8"); |
+ ByteString.Output rawOutput = ByteString.newOutput(); |
+ CodedOutputStream output = CodedOutputStream.newInstance(rawOutput, bytes.length); |
+ |
+ int tag = WireFormat.makeTag(1, WireFormat.WIRETYPE_LENGTH_DELIMITED); |
+ output.writeRawVarint32(tag); |
+ output.writeRawVarint32(bytes.length); |
+ output.writeRawBytes(bytes); |
+ output.flush(); |
+ |
+ CodedInputStream input = |
+ CodedInputStream.newInstance( |
+ new ByteArrayInputStream(rawOutput.toByteString().toByteArray())); |
+ assertEquals(tag, input.readTag()); |
+ String text = input.readStringRequireUtf8(); |
+ assertEquals(lorem, text); |
+ } |
+ |
/** |
* Tests that if we readString invalid UTF-8 bytes, no exception |
* is thrown. Instead, the invalid bytes are replaced with the Unicode |