diff options
Diffstat (limited to 'java/src/test/java')
53 files changed, 206 insertions, 8909 deletions
diff --git a/java/src/test/java/com/google/protobuf/AbstractMessageTest.java b/java/src/test/java/com/google/protobuf/AbstractMessageTest.java index d964ef5..c44d660 100644 --- a/java/src/test/java/com/google/protobuf/AbstractMessageTest.java +++ b/java/src/test/java/com/google/protobuf/AbstractMessageTest.java @@ -1,6 +1,6 @@ // Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ +// http://code.google.com/p/protobuf/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -30,7 +30,6 @@ package com.google.protobuf; -import com.google.protobuf.Descriptors.FieldDescriptor; import protobuf_unittest.UnittestOptimizeFor.TestOptimizedForSize; import protobuf_unittest.UnittestProto; import protobuf_unittest.UnittestProto.ForeignMessage; @@ -168,13 +167,6 @@ public class AbstractMessageTest extends TestCase { wrappedBuilder.setUnknownFields(unknownFields); return this; } - @Override - public Message.Builder getFieldBuilder(FieldDescriptor field) { - return wrappedBuilder.getFieldBuilder(field); - } - } - public Parser<? extends Message> getParserForType() { - return wrappedMessage.getParserForType(); } } @@ -228,34 +220,6 @@ public class AbstractMessageTest extends TestCase { TestUtil.assertAllFieldsSet((TestAllTypes) message.wrappedMessage); } - public void testParsingUninitialized() throws Exception { - TestRequiredForeign.Builder builder = TestRequiredForeign.newBuilder(); - builder.getOptionalMessageBuilder().setDummy2(10); - ByteString bytes = builder.buildPartial().toByteString(); - Message.Builder abstractMessageBuilder = - new AbstractMessageWrapper.Builder(TestRequiredForeign.newBuilder()); - // mergeFrom() should not throw initialization error. - abstractMessageBuilder.mergeFrom(bytes).buildPartial(); - try { - abstractMessageBuilder.mergeFrom(bytes).build(); - fail(); - } catch (UninitializedMessageException ex) { - // pass - } - - // test DynamicMessage directly. - Message.Builder dynamicMessageBuilder = DynamicMessage.newBuilder( - TestRequiredForeign.getDescriptor()); - // mergeFrom() should not throw initialization error. - dynamicMessageBuilder.mergeFrom(bytes).buildPartial(); - try { - dynamicMessageBuilder.mergeFrom(bytes).build(); - fail(); - } catch (UninitializedMessageException ex) { - // pass - } - } - public void testPackedSerialization() throws Exception { Message abstractMessage = new AbstractMessageWrapper(TestUtil.getPackedSet()); @@ -334,16 +298,12 @@ public class AbstractMessageTest extends TestCase { new AbstractMessageWrapper.Builder(builder); assertFalse(abstractBuilder.isInitialized()); - assertEquals("a, b, c", abstractBuilder.getInitializationErrorString()); builder.setA(1); assertFalse(abstractBuilder.isInitialized()); - assertEquals("b, c", abstractBuilder.getInitializationErrorString()); builder.setB(1); assertFalse(abstractBuilder.isInitialized()); - assertEquals("c", abstractBuilder.getInitializationErrorString()); builder.setC(1); assertTrue(abstractBuilder.isInitialized()); - assertEquals("", abstractBuilder.getInitializationErrorString()); } public void testForeignIsInitialized() throws Exception { @@ -352,27 +312,18 @@ public class AbstractMessageTest extends TestCase { new AbstractMessageWrapper.Builder(builder); assertTrue(abstractBuilder.isInitialized()); - assertEquals("", abstractBuilder.getInitializationErrorString()); builder.setOptionalMessage(TEST_REQUIRED_UNINITIALIZED); assertFalse(abstractBuilder.isInitialized()); - assertEquals( - "optional_message.a, optional_message.b, optional_message.c", - abstractBuilder.getInitializationErrorString()); builder.setOptionalMessage(TEST_REQUIRED_INITIALIZED); assertTrue(abstractBuilder.isInitialized()); - assertEquals("", abstractBuilder.getInitializationErrorString()); builder.addRepeatedMessage(TEST_REQUIRED_UNINITIALIZED); assertFalse(abstractBuilder.isInitialized()); - assertEquals( - "repeated_message[0].a, repeated_message[0].b, repeated_message[0].c", - abstractBuilder.getInitializationErrorString()); builder.setRepeatedMessage(0, TEST_REQUIRED_INITIALIZED); assertTrue(abstractBuilder.isInitialized()); - assertEquals("", abstractBuilder.getInitializationErrorString()); } // ----------------------------------------------------------------- @@ -415,7 +366,7 @@ public class AbstractMessageTest extends TestCase { // ----------------------------------------------------------------- // Tests for equals and hashCode - + public void testEqualsAndHashCode() throws Exception { TestAllTypes a = TestUtil.getAllSet(); TestAllTypes b = TestAllTypes.newBuilder().build(); @@ -431,7 +382,7 @@ public class AbstractMessageTest extends TestCase { checkEqualsIsConsistent(d); checkEqualsIsConsistent(e); checkEqualsIsConsistent(f); - + checkNotEqual(a, b); checkNotEqual(a, c); checkNotEqual(a, d); @@ -462,20 +413,19 @@ public class AbstractMessageTest extends TestCase { checkEqualsIsConsistent(eUnknownFields); checkEqualsIsConsistent(fUnknownFields); - // Subsequent reconstitutions should be identical + // Subseqent reconstitutions should be identical UnittestProto.TestEmptyMessage eUnknownFields2 = UnittestProto.TestEmptyMessage.parseFrom(e.toByteArray()); checkEqualsIsConsistent(eUnknownFields, eUnknownFields2); } - - + /** - * Asserts that the given proto has symmetric equals and hashCode methods. + * Asserts that the given proto has symetric equals and hashCode methods. */ private void checkEqualsIsConsistent(Message message) { // Object should be equal to itself. assertEquals(message, message); - + // Object should be equal to a dynamic copy of itself. DynamicMessage dynamic = DynamicMessage.newBuilder(message).build(); checkEqualsIsConsistent(message, dynamic); @@ -492,7 +442,7 @@ public class AbstractMessageTest extends TestCase { /** * Asserts that the given protos are not equal and have different hash codes. - * + * * @warning It's valid for non-equal objects to have the same hash code, so * this test is stricter than it needs to be. However, this should happen * relatively rarely. @@ -506,22 +456,4 @@ public class AbstractMessageTest extends TestCase { String.format("%s should have a different hash code from %s", m1, m2), m1.hashCode() == m2.hashCode()); } - - public void testCheckByteStringIsUtf8OnUtf8() { - ByteString byteString = ByteString.copyFromUtf8("some text"); - AbstractMessageLite.checkByteStringIsUtf8(byteString); - // No exception thrown. - } - - public void testCheckByteStringIsUtf8OnNonUtf8() { - ByteString byteString = - ByteString.copyFrom(new byte[]{(byte) 0x80}); // A lone continuation byte. - try { - AbstractMessageLite.checkByteStringIsUtf8(byteString); - fail("Expected AbstractMessageLite.checkByteStringIsUtf8 to throw IllegalArgumentException"); - } catch (IllegalArgumentException exception) { - assertEquals("Byte string is not UTF-8.", exception.getMessage()); - } - } - } diff --git a/java/src/test/java/com/google/protobuf/BoundedByteStringTest.java b/java/src/test/java/com/google/protobuf/BoundedByteStringTest.java deleted file mode 100644 index 2b71cfb..0000000 --- a/java/src/test/java/com/google/protobuf/BoundedByteStringTest.java +++ /dev/null @@ -1,68 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import java.io.UnsupportedEncodingException; - -/** - * This class tests {@link BoundedByteString}, which extends {@link LiteralByteString}, - * by inheriting the tests from {@link LiteralByteStringTest}. The only method which - * is strange enough that it needs to be overridden here is {@link #testToString()}. - * - * @author carlanton@google.com (Carl Haverl) - */ -public class BoundedByteStringTest extends LiteralByteStringTest { - - @Override - protected void setUp() throws Exception { - classUnderTest = "BoundedByteString"; - byte[] sourceBytes = ByteStringTest.getTestBytes(2341, 11337766L); - int from = 100; - int to = sourceBytes.length - 100; - stringUnderTest = ByteString.copyFrom(sourceBytes).substring(from, to); - referenceBytes = new byte[to - from]; - System.arraycopy(sourceBytes, from, referenceBytes, 0, to - from); - expectedHashCode = 727575887; - } - - @Override - public void testToString() throws UnsupportedEncodingException { - String testString = "I love unicode \u1234\u5678 characters"; - LiteralByteString unicode = new LiteralByteString(testString.getBytes(UTF_8)); - ByteString chopped = unicode.substring(2, unicode.size() - 6); - assertEquals(classUnderTest + ".substring() must have the expected type", - classUnderTest, getActualClassName(chopped)); - - String roundTripString = chopped.toString(UTF_8); - assertEquals(classUnderTest + " unicode bytes must match", - testString.substring(2, testString.length() - 6), roundTripString); - } -} diff --git a/java/src/test/java/com/google/protobuf/ByteStringTest.java b/java/src/test/java/com/google/protobuf/ByteStringTest.java deleted file mode 100644 index 15de17c..0000000 --- a/java/src/test/java/com/google/protobuf/ByteStringTest.java +++ /dev/null @@ -1,759 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import com.google.protobuf.ByteString.Output; - -import junit.framework.TestCase; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.Random; - -/** - * Test methods with implementations in {@link ByteString}, plus do some top-level "integration" - * tests. - * - * @author carlanton@google.com (Carl Haverl) - */ -public class ByteStringTest extends TestCase { - - private static final String UTF_16 = "UTF-16"; - - static byte[] getTestBytes(int size, long seed) { - Random random = new Random(seed); - byte[] result = new byte[size]; - random.nextBytes(result); - return result; - } - - private byte[] getTestBytes(int size) { - return getTestBytes(size, 445566L); - } - - private byte[] getTestBytes() { - return getTestBytes(1000); - } - - // Compare the entire left array with a subset of the right array. - private boolean isArrayRange(byte[] left, byte[] right, int rightOffset, int length) { - boolean stillEqual = (left.length == length); - for (int i = 0; (stillEqual && i < length); ++i) { - stillEqual = (left[i] == right[rightOffset + i]); - } - return stillEqual; - } - - // Returns true only if the given two arrays have identical contents. - private boolean isArray(byte[] left, byte[] right) { - return left.length == right.length && isArrayRange(left, right, 0, left.length); - } - - public void testSubstring_BeginIndex() { - byte[] bytes = getTestBytes(); - ByteString substring = ByteString.copyFrom(bytes).substring(500); - assertTrue("substring must contain the tail of the string", - isArrayRange(substring.toByteArray(), bytes, 500, bytes.length - 500)); - } - - public void testCopyFrom_BytesOffsetSize() { - byte[] bytes = getTestBytes(); - ByteString byteString = ByteString.copyFrom(bytes, 500, 200); - assertTrue("copyFrom sub-range must contain the expected bytes", - isArrayRange(byteString.toByteArray(), bytes, 500, 200)); - } - - public void testCopyFrom_Bytes() { - byte[] bytes = getTestBytes(); - ByteString byteString = ByteString.copyFrom(bytes); - assertTrue("copyFrom must contain the expected bytes", - isArray(byteString.toByteArray(), bytes)); - } - - public void testCopyFrom_ByteBufferSize() { - byte[] bytes = getTestBytes(); - ByteBuffer byteBuffer = ByteBuffer.allocate(bytes.length); - byteBuffer.put(bytes); - byteBuffer.position(500); - ByteString byteString = ByteString.copyFrom(byteBuffer, 200); - assertTrue("copyFrom byteBuffer sub-range must contain the expected bytes", - isArrayRange(byteString.toByteArray(), bytes, 500, 200)); - } - - public void testCopyFrom_ByteBuffer() { - byte[] bytes = getTestBytes(); - ByteBuffer byteBuffer = ByteBuffer.allocate(bytes.length); - byteBuffer.put(bytes); - byteBuffer.position(500); - ByteString byteString = ByteString.copyFrom(byteBuffer); - assertTrue("copyFrom byteBuffer sub-range must contain the expected bytes", - isArrayRange(byteString.toByteArray(), bytes, 500, bytes.length - 500)); - } - - public void testCopyFrom_StringEncoding() throws UnsupportedEncodingException { - String testString = "I love unicode \u1234\u5678 characters"; - ByteString byteString = ByteString.copyFrom(testString, UTF_16); - byte[] testBytes = testString.getBytes(UTF_16); - assertTrue("copyFrom string must respect the charset", - isArrayRange(byteString.toByteArray(), testBytes, 0, testBytes.length)); - } - - public void testCopyFrom_Utf8() throws UnsupportedEncodingException { - String testString = "I love unicode \u1234\u5678 characters"; - ByteString byteString = ByteString.copyFromUtf8(testString); - byte[] testBytes = testString.getBytes("UTF-8"); - assertTrue("copyFromUtf8 string must respect the charset", - isArrayRange(byteString.toByteArray(), testBytes, 0, testBytes.length)); - } - - public void testCopyFrom_Iterable() { - byte[] testBytes = getTestBytes(77777, 113344L); - final List<ByteString> pieces = makeConcretePieces(testBytes); - // Call copyFrom() on a Collection - ByteString byteString = ByteString.copyFrom(pieces); - assertTrue("copyFrom a List must contain the expected bytes", - isArrayRange(byteString.toByteArray(), testBytes, 0, testBytes.length)); - // Call copyFrom on an iteration that's not a collection - ByteString byteStringAlt = ByteString.copyFrom(new Iterable<ByteString>() { - public Iterator<ByteString> iterator() { - return pieces.iterator(); - } - }); - assertEquals("copyFrom from an Iteration must contain the expected bytes", - byteString, byteStringAlt); - } - - public void testCopyTo_TargetOffset() { - byte[] bytes = getTestBytes(); - ByteString byteString = ByteString.copyFrom(bytes); - byte[] target = new byte[bytes.length + 1000]; - byteString.copyTo(target, 400); - assertTrue("copyFrom byteBuffer sub-range must contain the expected bytes", - isArrayRange(bytes, target, 400, bytes.length)); - } - - public void testReadFrom_emptyStream() throws IOException { - ByteString byteString = - ByteString.readFrom(new ByteArrayInputStream(new byte[0])); - assertSame("reading an empty stream must result in the EMPTY constant " - + "byte string", ByteString.EMPTY, byteString); - } - - public void testReadFrom_smallStream() throws IOException { - assertReadFrom(getTestBytes(10)); - } - - public void testReadFrom_mutating() throws IOException { - byte[] capturedArray = null; - EvilInputStream eis = new EvilInputStream(); - ByteString byteString = ByteString.readFrom(eis); - - capturedArray = eis.capturedArray; - byte[] originalValue = byteString.toByteArray(); - for (int x = 0; x < capturedArray.length; ++x) { - capturedArray[x] = (byte) 0; - } - - byte[] newValue = byteString.toByteArray(); - assertTrue("copyFrom byteBuffer must not grant access to underlying array", - Arrays.equals(originalValue, newValue)); - } - - // Tests sizes that are near the rope copy-out threshold. - public void testReadFrom_mediumStream() throws IOException { - assertReadFrom(getTestBytes(ByteString.CONCATENATE_BY_COPY_SIZE - 1)); - assertReadFrom(getTestBytes(ByteString.CONCATENATE_BY_COPY_SIZE)); - assertReadFrom(getTestBytes(ByteString.CONCATENATE_BY_COPY_SIZE + 1)); - assertReadFrom(getTestBytes(200)); - } - - // Tests sizes that are over multi-segment rope threshold. - public void testReadFrom_largeStream() throws IOException { - assertReadFrom(getTestBytes(0x100)); - assertReadFrom(getTestBytes(0x101)); - assertReadFrom(getTestBytes(0x110)); - assertReadFrom(getTestBytes(0x1000)); - assertReadFrom(getTestBytes(0x1001)); - assertReadFrom(getTestBytes(0x1010)); - assertReadFrom(getTestBytes(0x10000)); - assertReadFrom(getTestBytes(0x10001)); - assertReadFrom(getTestBytes(0x10010)); - } - - // Tests sizes that are near the read buffer size. - public void testReadFrom_byteBoundaries() throws IOException { - final int min = ByteString.MIN_READ_FROM_CHUNK_SIZE; - final int max = ByteString.MAX_READ_FROM_CHUNK_SIZE; - - assertReadFrom(getTestBytes(min - 1)); - assertReadFrom(getTestBytes(min)); - assertReadFrom(getTestBytes(min + 1)); - - assertReadFrom(getTestBytes(min * 2 - 1)); - assertReadFrom(getTestBytes(min * 2)); - assertReadFrom(getTestBytes(min * 2 + 1)); - - assertReadFrom(getTestBytes(min * 4 - 1)); - assertReadFrom(getTestBytes(min * 4)); - assertReadFrom(getTestBytes(min * 4 + 1)); - - assertReadFrom(getTestBytes(min * 8 - 1)); - assertReadFrom(getTestBytes(min * 8)); - assertReadFrom(getTestBytes(min * 8 + 1)); - - assertReadFrom(getTestBytes(max - 1)); - assertReadFrom(getTestBytes(max)); - assertReadFrom(getTestBytes(max + 1)); - - assertReadFrom(getTestBytes(max * 2 - 1)); - assertReadFrom(getTestBytes(max * 2)); - assertReadFrom(getTestBytes(max * 2 + 1)); - } - - // Tests that IOExceptions propagate through ByteString.readFrom(). - public void testReadFrom_IOExceptions() { - try { - ByteString.readFrom(new FailStream()); - fail("readFrom must throw the underlying IOException"); - - } catch (IOException e) { - assertEquals("readFrom must throw the expected exception", - "synthetic failure", e.getMessage()); - } - } - - // Tests that ByteString.readFrom works with streams that don't - // always fill their buffers. - public void testReadFrom_reluctantStream() throws IOException { - final byte[] data = getTestBytes(0x1000); - - ByteString byteString = ByteString.readFrom(new ReluctantStream(data)); - assertTrue("readFrom byte stream must contain the expected bytes", - isArray(byteString.toByteArray(), data)); - - // Same test as above, but with some specific chunk sizes. - assertReadFromReluctantStream(data, 100); - assertReadFromReluctantStream(data, 248); - assertReadFromReluctantStream(data, 249); - assertReadFromReluctantStream(data, 250); - assertReadFromReluctantStream(data, 251); - assertReadFromReluctantStream(data, 0x1000); - assertReadFromReluctantStream(data, 0x1001); - } - - // Fails unless ByteString.readFrom reads the bytes correctly from a - // reluctant stream with the given chunkSize parameter. - private void assertReadFromReluctantStream(byte[] bytes, int chunkSize) - throws IOException { - ByteString b = ByteString.readFrom(new ReluctantStream(bytes), chunkSize); - assertTrue("readFrom byte stream must contain the expected bytes", - isArray(b.toByteArray(), bytes)); - } - - // Tests that ByteString.readFrom works with streams that implement - // available(). - public void testReadFrom_available() throws IOException { - final byte[] data = getTestBytes(0x1001); - - ByteString byteString = ByteString.readFrom(new AvailableStream(data)); - assertTrue("readFrom byte stream must contain the expected bytes", - isArray(byteString.toByteArray(), data)); - } - - // Fails unless ByteString.readFrom reads the bytes correctly. - private void assertReadFrom(byte[] bytes) throws IOException { - ByteString byteString = - ByteString.readFrom(new ByteArrayInputStream(bytes)); - assertTrue("readFrom byte stream must contain the expected bytes", - isArray(byteString.toByteArray(), bytes)); - } - - // A stream that fails when read. - private static final class FailStream extends InputStream { - @Override public int read() throws IOException { - throw new IOException("synthetic failure"); - } - } - - // A stream that simulates blocking by only producing 250 characters - // per call to read(byte[]). - private static class ReluctantStream extends InputStream { - protected final byte[] data; - protected int pos = 0; - - public ReluctantStream(byte[] data) { - this.data = data; - } - - @Override public int read() { - if (pos == data.length) { - return -1; - } else { - return data[pos++]; - } - } - - @Override public int read(byte[] buf) { - return read(buf, 0, buf.length); - } - - @Override public int read(byte[] buf, int offset, int size) { - if (pos == data.length) { - return -1; - } - int count = Math.min(Math.min(size, data.length - pos), 250); - System.arraycopy(data, pos, buf, offset, count); - pos += count; - return count; - } - } - - // Same as above, but also implements available(). - private static final class AvailableStream extends ReluctantStream { - public AvailableStream(byte[] data) { - super(data); - } - - @Override public int available() { - return Math.min(250, data.length - pos); - } - } - - // A stream which exposes the byte array passed into read(byte[], int, int). - private static class EvilInputStream extends InputStream { - public byte[] capturedArray = null; - - @Override - public int read(byte[] buf, int off, int len) { - if (capturedArray != null) { - return -1; - } else { - capturedArray = buf; - for (int x = 0; x < len; ++x) { - buf[x] = (byte) x; - } - return len; - } - } - - @Override - public int read() { - // Purposefully do nothing. - return -1; - } - } - - // A stream which exposes the byte array passed into write(byte[], int, int). - private static class EvilOutputStream extends OutputStream { - public byte[] capturedArray = null; - - @Override - public void write(byte[] buf, int off, int len) { - if (capturedArray == null) { - capturedArray = buf; - } - } - - @Override - public void write(int ignored) { - // Purposefully do nothing. - } - } - - public void testToStringUtf8() throws UnsupportedEncodingException { - String testString = "I love unicode \u1234\u5678 characters"; - byte[] testBytes = testString.getBytes("UTF-8"); - ByteString byteString = ByteString.copyFrom(testBytes); - assertEquals("copyToStringUtf8 must respect the charset", - testString, byteString.toStringUtf8()); - } - - public void testNewOutput_InitialCapacity() throws IOException { - byte[] bytes = getTestBytes(); - ByteString.Output output = ByteString.newOutput(bytes.length + 100); - output.write(bytes); - ByteString byteString = output.toByteString(); - assertTrue( - "String built from newOutput(int) must contain the expected bytes", - isArrayRange(bytes, byteString.toByteArray(), 0, bytes.length)); - } - - // Test newOutput() using a variety of buffer sizes and a variety of (fixed) - // write sizes - public void testNewOutput_ArrayWrite() throws IOException { - byte[] bytes = getTestBytes(); - int length = bytes.length; - int[] bufferSizes = {128, 256, length / 2, length - 1, length, length + 1, - 2 * length, 3 * length}; - int[] writeSizes = {1, 4, 5, 7, 23, bytes.length}; - - for (int bufferSize : bufferSizes) { - for (int writeSize : writeSizes) { - // Test writing the entire output writeSize bytes at a time. - ByteString.Output output = ByteString.newOutput(bufferSize); - for (int i = 0; i < length; i += writeSize) { - output.write(bytes, i, Math.min(writeSize, length - i)); - } - ByteString byteString = output.toByteString(); - assertTrue("String built from newOutput() must contain the expected bytes", - isArrayRange(bytes, byteString.toByteArray(), 0, bytes.length)); - } - } - } - - // Test newOutput() using a variety of buffer sizes, but writing all the - // characters using write(byte); - public void testNewOutput_WriteChar() throws IOException { - byte[] bytes = getTestBytes(); - int length = bytes.length; - int[] bufferSizes = {0, 1, 128, 256, length / 2, - length - 1, length, length + 1, - 2 * length, 3 * length}; - for (int bufferSize : bufferSizes) { - ByteString.Output output = ByteString.newOutput(bufferSize); - for (byte byteValue : bytes) { - output.write(byteValue); - } - ByteString byteString = output.toByteString(); - assertTrue("String built from newOutput() must contain the expected bytes", - isArrayRange(bytes, byteString.toByteArray(), 0, bytes.length)); - } - } - - // Test newOutput() in which we write the bytes using a variety of methods - // and sizes, and in which we repeatedly call toByteString() in the middle. - public void testNewOutput_Mixed() throws IOException { - Random rng = new Random(1); - byte[] bytes = getTestBytes(); - int length = bytes.length; - int[] bufferSizes = {0, 1, 128, 256, length / 2, - length - 1, length, length + 1, - 2 * length, 3 * length}; - - for (int bufferSize : bufferSizes) { - // Test writing the entire output using a mixture of write sizes and - // methods; - ByteString.Output output = ByteString.newOutput(bufferSize); - int position = 0; - while (position < bytes.length) { - if (rng.nextBoolean()) { - int count = 1 + rng.nextInt(bytes.length - position); - output.write(bytes, position, count); - position += count; - } else { - output.write(bytes[position]); - position++; - } - assertEquals("size() returns the right value", position, output.size()); - assertTrue("newOutput() substring must have correct bytes", - isArrayRange(output.toByteString().toByteArray(), - bytes, 0, position)); - } - ByteString byteString = output.toByteString(); - assertTrue("String built from newOutput() must contain the expected bytes", - isArrayRange(bytes, byteString.toByteArray(), 0, bytes.length)); - } - } - - public void testNewOutputEmpty() throws IOException { - // Make sure newOutput() correctly builds empty byte strings - ByteString byteString = ByteString.newOutput().toByteString(); - assertEquals(ByteString.EMPTY, byteString); - } - - public void testNewOutput_Mutating() throws IOException { - Output os = ByteString.newOutput(5); - os.write(new byte[] {1, 2, 3, 4, 5}); - EvilOutputStream eos = new EvilOutputStream(); - os.writeTo(eos); - byte[] capturedArray = eos.capturedArray; - ByteString byteString = os.toByteString(); - byte[] oldValue = byteString.toByteArray(); - Arrays.fill(capturedArray, (byte) 0); - byte[] newValue = byteString.toByteArray(); - assertTrue("Output must not provide access to the underlying byte array", - Arrays.equals(oldValue, newValue)); - } - - public void testNewCodedBuilder() throws IOException { - byte[] bytes = getTestBytes(); - ByteString.CodedBuilder builder = ByteString.newCodedBuilder(bytes.length); - builder.getCodedOutput().writeRawBytes(bytes); - ByteString byteString = builder.build(); - assertTrue("String built from newCodedBuilder() must contain the expected bytes", - isArrayRange(bytes, byteString.toByteArray(), 0, bytes.length)); - } - - public void testSubstringParity() { - byte[] bigBytes = getTestBytes(2048 * 1024, 113344L); - int start = 512 * 1024 - 3333; - int end = 512 * 1024 + 7777; - ByteString concreteSubstring = ByteString.copyFrom(bigBytes).substring(start, end); - boolean ok = true; - for (int i = start; ok && i < end; ++i) { - ok = (bigBytes[i] == concreteSubstring.byteAt(i - start)); - } - assertTrue("Concrete substring didn't capture the right bytes", ok); - - ByteString literalString = ByteString.copyFrom(bigBytes, start, end - start); - assertTrue("Substring must be equal to literal string", - concreteSubstring.equals(literalString)); - assertEquals("Substring must have same hashcode as literal string", - literalString.hashCode(), concreteSubstring.hashCode()); - } - - public void testCompositeSubstring() { - byte[] referenceBytes = getTestBytes(77748, 113344L); - - List<ByteString> pieces = makeConcretePieces(referenceBytes); - ByteString listString = ByteString.copyFrom(pieces); - - int from = 1000; - int to = 40000; - ByteString compositeSubstring = listString.substring(from, to); - byte[] substringBytes = compositeSubstring.toByteArray(); - boolean stillEqual = true; - for (int i = 0; stillEqual && i < to - from; ++i) { - stillEqual = referenceBytes[from + i] == substringBytes[i]; - } - assertTrue("Substring must return correct bytes", stillEqual); - - stillEqual = true; - for (int i = 0; stillEqual && i < to - from; ++i) { - stillEqual = referenceBytes[from + i] == compositeSubstring.byteAt(i); - } - assertTrue("Substring must support byteAt() correctly", stillEqual); - - ByteString literalSubstring = ByteString.copyFrom(referenceBytes, from, to - from); - assertTrue("Composite substring must equal a literal substring over the same bytes", - compositeSubstring.equals(literalSubstring)); - assertTrue("Literal substring must equal a composite substring over the same bytes", - literalSubstring.equals(compositeSubstring)); - - assertEquals("We must get the same hashcodes for composite and literal substrings", - literalSubstring.hashCode(), compositeSubstring.hashCode()); - - assertFalse("We can't be equal to a proper substring", - compositeSubstring.equals(literalSubstring.substring(0, literalSubstring.size() - 1))); - } - - public void testCopyFromList() { - byte[] referenceBytes = getTestBytes(77748, 113344L); - ByteString literalString = ByteString.copyFrom(referenceBytes); - - List<ByteString> pieces = makeConcretePieces(referenceBytes); - ByteString listString = ByteString.copyFrom(pieces); - - assertTrue("Composite string must be equal to literal string", - listString.equals(literalString)); - assertEquals("Composite string must have same hashcode as literal string", - literalString.hashCode(), listString.hashCode()); - } - - public void testConcat() { - byte[] referenceBytes = getTestBytes(77748, 113344L); - ByteString literalString = ByteString.copyFrom(referenceBytes); - - List<ByteString> pieces = makeConcretePieces(referenceBytes); - - Iterator<ByteString> iter = pieces.iterator(); - ByteString concatenatedString = iter.next(); - while (iter.hasNext()) { - concatenatedString = concatenatedString.concat(iter.next()); - } - - assertTrue("Concatenated string must be equal to literal string", - concatenatedString.equals(literalString)); - assertEquals("Concatenated string must have same hashcode as literal string", - literalString.hashCode(), concatenatedString.hashCode()); - } - - /** - * Test the Rope implementation can deal with Empty nodes, even though we - * guard against them. See also {@link LiteralByteStringTest#testConcat_empty()}. - */ - public void testConcat_empty() { - byte[] referenceBytes = getTestBytes(7748, 113344L); - ByteString literalString = ByteString.copyFrom(referenceBytes); - - ByteString duo = RopeByteString.newInstanceForTest(literalString, literalString); - ByteString temp = RopeByteString.newInstanceForTest( - RopeByteString.newInstanceForTest(literalString, ByteString.EMPTY), - RopeByteString.newInstanceForTest(ByteString.EMPTY, literalString)); - ByteString quintet = RopeByteString.newInstanceForTest(temp, ByteString.EMPTY); - - assertTrue("String with concatenated nulls must equal simple concatenate", - duo.equals(quintet)); - assertEquals("String with concatenated nulls have same hashcode as simple concatenate", - duo.hashCode(), quintet.hashCode()); - - ByteString.ByteIterator duoIter = duo.iterator(); - ByteString.ByteIterator quintetIter = quintet.iterator(); - boolean stillEqual = true; - while (stillEqual && quintetIter.hasNext()) { - stillEqual = (duoIter.nextByte() == quintetIter.nextByte()); - } - assertTrue("We must get the same characters by iterating", stillEqual); - assertFalse("Iterator must be exhausted", duoIter.hasNext()); - try { - duoIter.nextByte(); - fail("Should have thrown an exception."); - } catch (NoSuchElementException e) { - // This is success - } - try { - quintetIter.nextByte(); - fail("Should have thrown an exception."); - } catch (NoSuchElementException e) { - // This is success - } - - // Test that even if we force empty strings in as rope leaves in this - // configuration, we always get a (possibly Bounded) LiteralByteString - // for a length 1 substring. - // - // It is possible, using the testing factory method to create deeply nested - // trees of empty leaves, to make a string that will fail this test. - for (int i = 1; i < duo.size(); ++i) { - assertTrue("Substrings of size() < 2 must not be RopeByteStrings", - duo.substring(i - 1, i) instanceof LiteralByteString); - } - for (int i = 1; i < quintet.size(); ++i) { - assertTrue("Substrings of size() < 2 must not be RopeByteStrings", - quintet.substring(i - 1, i) instanceof LiteralByteString); - } - } - - public void testStartsWith() { - byte[] bytes = getTestBytes(1000, 1234L); - ByteString string = ByteString.copyFrom(bytes); - ByteString prefix = ByteString.copyFrom(bytes, 0, 500); - ByteString suffix = ByteString.copyFrom(bytes, 400, 600); - assertTrue(string.startsWith(ByteString.EMPTY)); - assertTrue(string.startsWith(string)); - assertTrue(string.startsWith(prefix)); - assertFalse(string.startsWith(suffix)); - assertFalse(prefix.startsWith(suffix)); - assertFalse(suffix.startsWith(prefix)); - assertFalse(ByteString.EMPTY.startsWith(prefix)); - assertTrue(ByteString.EMPTY.startsWith(ByteString.EMPTY)); - } - - public void testEndsWith() { - byte[] bytes = getTestBytes(1000, 1234L); - ByteString string = ByteString.copyFrom(bytes); - ByteString prefix = ByteString.copyFrom(bytes, 0, 500); - ByteString suffix = ByteString.copyFrom(bytes, 400, 600); - assertTrue(string.endsWith(ByteString.EMPTY)); - assertTrue(string.endsWith(string)); - assertTrue(string.endsWith(suffix)); - assertFalse(string.endsWith(prefix)); - assertFalse(suffix.endsWith(prefix)); - assertFalse(prefix.endsWith(suffix)); - assertFalse(ByteString.EMPTY.endsWith(suffix)); - assertTrue(ByteString.EMPTY.endsWith(ByteString.EMPTY)); - } - - static List<ByteString> makeConcretePieces(byte[] referenceBytes) { - List<ByteString> pieces = new ArrayList<ByteString>(); - // Starting length should be small enough that we'll do some concatenating by - // copying if we just concatenate all these pieces together. - for (int start = 0, length = 16; start < referenceBytes.length; start += length) { - length = (length << 1) - 1; - if (start + length > referenceBytes.length) { - length = referenceBytes.length - start; - } - pieces.add(ByteString.copyFrom(referenceBytes, start, length)); - } - return pieces; - } - - private byte[] substringUsingWriteTo( - ByteString data, int offset, int length) throws IOException { - ByteArrayOutputStream output = new ByteArrayOutputStream(); - data.writeTo(output, offset, length); - return output.toByteArray(); - } - - public void testWriteToOutputStream() throws Exception { - // Choose a size large enough so when two ByteStrings are concatenated they - // won't be merged into one byte array due to some optimizations. - final int dataSize = ByteString.CONCATENATE_BY_COPY_SIZE + 1; - byte[] data1 = new byte[dataSize]; - for (int i = 0; i < data1.length; i++) { - data1[i] = (byte) 1; - } - data1[1] = (byte) 11; - // Test LiteralByteString.writeTo(OutputStream,int,int) - LiteralByteString left = new LiteralByteString(data1); - byte[] result = substringUsingWriteTo(left, 1, 1); - assertEquals(1, result.length); - assertEquals((byte) 11, result[0]); - - byte[] data2 = new byte[dataSize]; - for (int i = 0; i < data1.length; i++) { - data2[i] = (byte) 2; - } - LiteralByteString right = new LiteralByteString(data2); - // Concatenate two ByteStrings to create a RopeByteString. - ByteString root = left.concat(right); - // Make sure we are actually testing a RopeByteString with a simple tree - // structure. - assertEquals(1, root.getTreeDepth()); - // Write parts of the left node. - result = substringUsingWriteTo(root, 0, dataSize); - assertEquals(dataSize, result.length); - assertEquals((byte) 1, result[0]); - assertEquals((byte) 1, result[dataSize - 1]); - // Write parts of the right node. - result = substringUsingWriteTo(root, dataSize, dataSize); - assertEquals(dataSize, result.length); - assertEquals((byte) 2, result[0]); - assertEquals((byte) 2, result[dataSize - 1]); - // Write a segment of bytes that runs across both nodes. - result = substringUsingWriteTo(root, dataSize / 2, dataSize); - assertEquals(dataSize, result.length); - assertEquals((byte) 1, result[0]); - assertEquals((byte) 1, result[dataSize - dataSize / 2 - 1]); - assertEquals((byte) 2, result[dataSize - dataSize / 2]); - assertEquals((byte) 2, result[dataSize - 1]); - } -} diff --git a/java/src/test/java/com/google/protobuf/CheckUtf8Test.java b/java/src/test/java/com/google/protobuf/CheckUtf8Test.java deleted file mode 100644 index 6470e9c..0000000 --- a/java/src/test/java/com/google/protobuf/CheckUtf8Test.java +++ /dev/null @@ -1,141 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import proto2_test_check_utf8.TestCheckUtf8.BytesWrapper; -import proto2_test_check_utf8.TestCheckUtf8.StringWrapper; -import proto2_test_check_utf8_size.TestCheckUtf8Size.BytesWrapperSize; -import proto2_test_check_utf8_size.TestCheckUtf8Size.StringWrapperSize; -import junit.framework.TestCase; - -/** - * Test that protos generated with file option java_string_check_utf8 do in - * fact perform appropriate UTF-8 checks. - * - * @author jbaum@google.com (Jacob Butcher) - */ -public class CheckUtf8Test extends TestCase { - - private static final String UTF8_BYTE_STRING_TEXT = "some text"; - private static final ByteString UTF8_BYTE_STRING = - ByteString.copyFromUtf8(UTF8_BYTE_STRING_TEXT); - private static final ByteString NON_UTF8_BYTE_STRING = - ByteString.copyFrom(new byte[]{(byte) 0x80}); // A lone continuation byte. - - public void testBuildRequiredStringWithGoodUtf8() throws Exception { - assertEquals(UTF8_BYTE_STRING_TEXT, - StringWrapper.newBuilder().setReqBytes(UTF8_BYTE_STRING).getReq()); - } - - public void testParseRequiredStringWithGoodUtf8() throws Exception { - ByteString serialized = - BytesWrapper.newBuilder().setReq(UTF8_BYTE_STRING).build().toByteString(); - assertEquals(UTF8_BYTE_STRING_TEXT, - StringWrapper.PARSER.parseFrom(serialized).getReq()); - } - - public void testBuildRequiredStringWithBadUtf8() throws Exception { - try { - StringWrapper.newBuilder().setReqBytes(NON_UTF8_BYTE_STRING); - fail("Expected IllegalArgumentException for non UTF-8 byte string."); - } catch (IllegalArgumentException exception) { - assertEquals("Byte string is not UTF-8.", exception.getMessage()); - } - } - - public void testBuildOptionalStringWithBadUtf8() throws Exception { - try { - StringWrapper.newBuilder().setOptBytes(NON_UTF8_BYTE_STRING); - fail("Expected IllegalArgumentException for non UTF-8 byte string."); - } catch (IllegalArgumentException exception) { - assertEquals("Byte string is not UTF-8.", exception.getMessage()); - } - } - - public void testBuildRepeatedStringWithBadUtf8() throws Exception { - try { - StringWrapper.newBuilder().addRepBytes(NON_UTF8_BYTE_STRING); - fail("Expected IllegalArgumentException for non UTF-8 byte string."); - } catch (IllegalArgumentException exception) { - assertEquals("Byte string is not UTF-8.", exception.getMessage()); - } - } - - public void testParseRequiredStringWithBadUtf8() throws Exception { - ByteString serialized = - BytesWrapper.newBuilder().setReq(NON_UTF8_BYTE_STRING).build().toByteString(); - try { - StringWrapper.PARSER.parseFrom(serialized); - fail("Expected InvalidProtocolBufferException for non UTF-8 byte string."); - } catch (InvalidProtocolBufferException exception) { - assertEquals("Protocol message had invalid UTF-8.", exception.getMessage()); - } - } - - public void testBuildRequiredStringWithBadUtf8Size() throws Exception { - try { - StringWrapperSize.newBuilder().setReqBytes(NON_UTF8_BYTE_STRING); - fail("Expected IllegalArgumentException for non UTF-8 byte string."); - } catch (IllegalArgumentException exception) { - assertEquals("Byte string is not UTF-8.", exception.getMessage()); - } - } - - public void testBuildOptionalStringWithBadUtf8Size() throws Exception { - try { - StringWrapperSize.newBuilder().setOptBytes(NON_UTF8_BYTE_STRING); - fail("Expected IllegalArgumentException for non UTF-8 byte string."); - } catch (IllegalArgumentException exception) { - assertEquals("Byte string is not UTF-8.", exception.getMessage()); - } - } - - public void testBuildRepeatedStringWithBadUtf8Size() throws Exception { - try { - StringWrapperSize.newBuilder().addRepBytes(NON_UTF8_BYTE_STRING); - fail("Expected IllegalArgumentException for non UTF-8 byte string."); - } catch (IllegalArgumentException exception) { - assertEquals("Byte string is not UTF-8.", exception.getMessage()); - } - } - - public void testParseRequiredStringWithBadUtf8Size() throws Exception { - ByteString serialized = - BytesWrapperSize.newBuilder().setReq(NON_UTF8_BYTE_STRING).build().toByteString(); - try { - StringWrapperSize.PARSER.parseFrom(serialized); - fail("Expected InvalidProtocolBufferException for non UTF-8 byte string."); - } catch (InvalidProtocolBufferException exception) { - assertEquals("Protocol message had invalid UTF-8.", exception.getMessage()); - } - } - -} diff --git a/java/src/test/java/com/google/protobuf/CodedInputStreamTest.java b/java/src/test/java/com/google/protobuf/CodedInputStreamTest.java index 3f656e2..33d60d1 100644 --- a/java/src/test/java/com/google/protobuf/CodedInputStreamTest.java +++ b/java/src/test/java/com/google/protobuf/CodedInputStreamTest.java @@ -1,6 +1,6 @@ // Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ +// http://code.google.com/p/protobuf/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -30,20 +30,15 @@ package com.google.protobuf; -import protobuf_unittest.UnittestProto.BoolMessage; -import protobuf_unittest.UnittestProto.Int32Message; -import protobuf_unittest.UnittestProto.Int64Message; import protobuf_unittest.UnittestProto.TestAllTypes; import protobuf_unittest.UnittestProto.TestRecursiveMessage; import junit.framework.TestCase; import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.FilterInputStream; -import java.io.IOException; import java.io.InputStream; -import java.nio.ByteBuffer; +import java.io.IOException; /** * Unit test for {@link CodedInputStream}. @@ -90,54 +85,28 @@ public class CodedInputStreamTest extends TestCase { } } - private void assertDataConsumed(byte[] data, CodedInputStream input) - throws IOException { - assertEquals(data.length, input.getTotalBytesRead()); - assertTrue(input.isAtEnd()); - } - /** * Parses the given bytes using readRawVarint32() and readRawVarint64() and * checks that the result matches the given value. */ private void assertReadVarint(byte[] data, long value) throws Exception { CodedInputStream input = CodedInputStream.newInstance(data); - assertEquals((int) value, input.readRawVarint32()); - assertDataConsumed(data, input); + assertEquals((int)value, input.readRawVarint32()); input = CodedInputStream.newInstance(data); assertEquals(value, input.readRawVarint64()); - assertDataConsumed(data, input); - - input = CodedInputStream.newInstance(data); - assertEquals(value, input.readRawVarint64SlowPath()); - assertDataConsumed(data, input); - - input = CodedInputStream.newInstance(data); - assertTrue(input.skipField(WireFormat.WIRETYPE_VARINT)); - assertDataConsumed(data, input); + assertTrue(input.isAtEnd()); // Try different block sizes. for (int blockSize = 1; blockSize <= 16; blockSize *= 2) { input = CodedInputStream.newInstance( new SmallBlockInputStream(data, blockSize)); - assertEquals((int) value, input.readRawVarint32()); - assertDataConsumed(data, input); + assertEquals((int)value, input.readRawVarint32()); input = CodedInputStream.newInstance( new SmallBlockInputStream(data, blockSize)); assertEquals(value, input.readRawVarint64()); - assertDataConsumed(data, input); - - input = CodedInputStream.newInstance( - new SmallBlockInputStream(data, blockSize)); - assertEquals(value, input.readRawVarint64SlowPath()); - assertDataConsumed(data, input); - - input = CodedInputStream.newInstance( - new SmallBlockInputStream(data, blockSize)); - assertTrue(input.skipField(WireFormat.WIRETYPE_VARINT)); - assertDataConsumed(data, input); + assertTrue(input.isAtEnd()); } // Try reading direct from an InputStream. We want to verify that it @@ -146,7 +115,7 @@ public class CodedInputStreamTest extends TestCase { byte[] longerData = new byte[data.length + 1]; System.arraycopy(data, 0, longerData, 0, data.length); InputStream rawInput = new ByteArrayInputStream(longerData); - assertEquals((int) value, CodedInputStream.readRawVarint32(rawInput)); + assertEquals((int)value, CodedInputStream.readRawVarint32(rawInput)); assertEquals(1, rawInput.available()); } @@ -174,14 +143,6 @@ public class CodedInputStreamTest extends TestCase { assertEquals(expected.getMessage(), e.getMessage()); } - input = CodedInputStream.newInstance(data); - try { - input.readRawVarint64SlowPath(); - fail("Should have thrown an exception."); - } catch (InvalidProtocolBufferException e) { - assertEquals(expected.getMessage(), e.getMessage()); - } - // Make sure we get the same error when reading direct from an InputStream. try { CodedInputStream.readRawVarint32(new ByteArrayInputStream(data)); @@ -350,7 +311,6 @@ public class CodedInputStreamTest extends TestCase { } } - /** * Test that a bug in skipRawBytes() has been fixed: if the skip skips * exactly up to a limit, this should not break things. @@ -371,11 +331,14 @@ public class CodedInputStreamTest extends TestCase { * that buffer, this should not break things. */ public void testSkipRawBytesPastEndOfBufferWithLimit() throws Exception { + System.out.printf("testSkipRawBytesPastEndOfBufferWithLimit: E ...\n"); + byte[] rawBytes = new byte[] { 1, 2, 3, 4, 5 }; CodedInputStream input = CodedInputStream.newInstance( new SmallBlockInputStream(rawBytes, 3)); int limit = input.pushLimit(4); + System.out.printf("testSkipRawBytesPastEndOfBufferWithLimit: limit=%d\n", limit); // In order to expose the bug we need to read at least one byte to prime the // buffer inside the CodedInputStream. assertEquals(1, input.readRawByte()); @@ -384,13 +347,15 @@ public class CodedInputStreamTest extends TestCase { assertTrue(input.isAtEnd()); input.popLimit(limit); assertEquals(5, input.readRawByte()); + + System.out.printf("testSkipRawBytesPastEndOfBufferWithLimit: X ...\n"); } public void testReadHugeBlob() throws Exception { // Allocate and initialize a 1MB blob. byte[] blob = new byte[1 << 20]; for (int i = 0; i < blob.length; i++) { - blob[i] = (byte) i; + blob[i] = (byte)i; } // Make a message containing it. @@ -477,23 +442,16 @@ public class CodedInputStreamTest extends TestCase { } } - private void checkSizeLimitExceeded(InvalidProtocolBufferException e) { - assertEquals( - InvalidProtocolBufferException.sizeLimitExceeded().getMessage(), - e.getMessage()); - } - public void testSizeLimit() throws Exception { CodedInputStream input = CodedInputStream.newInstance( - new SmallBlockInputStream( - TestUtil.getAllSet().toByteString().newInput(), 16)); + TestUtil.getAllSet().toByteString().newInput()); input.setSizeLimit(16); try { TestAllTypes.parseFrom(input); fail("Should have thrown an exception!"); - } catch (InvalidProtocolBufferException expected) { - checkSizeLimitExceeded(expected); + } catch (InvalidProtocolBufferException e) { + // success. } } @@ -507,8 +465,8 @@ public class CodedInputStreamTest extends TestCase { try { input.readRawByte(); fail("Should have thrown an exception!"); - } catch (InvalidProtocolBufferException expected) { - checkSizeLimitExceeded(expected); + } catch (InvalidProtocolBufferException e) { + // success. } input.resetSizeCounter(); @@ -516,50 +474,28 @@ public class CodedInputStreamTest extends TestCase { input.readRawByte(); // No exception thrown. input.resetSizeCounter(); assertEquals(0, input.getTotalBytesRead()); - input.readRawBytes(16); - assertEquals(16, input.getTotalBytesRead()); - input.resetSizeCounter(); try { - input.readRawBytes(17); // Hits limit again. + input.readRawBytes(16); // Hits limit again. fail("Should have thrown an exception!"); - } catch (InvalidProtocolBufferException expected) { - checkSizeLimitExceeded(expected); - } - } - - public void testSizeLimitMultipleMessages() throws Exception { - byte[] bytes = new byte[256]; - for (int i = 0; i < bytes.length; i++) { - bytes[i] = (byte) i; - } - CodedInputStream input = CodedInputStream.newInstance( - new SmallBlockInputStream(bytes, 7)); - input.setSizeLimit(16); - for (int i = 0; i < 256 / 16; i++) { - byte[] message = input.readRawBytes(16); - for (int j = 0; j < message.length; j++) { - assertEquals(i * 16 + j, message[j] & 0xff); - } - assertEquals(16, input.getTotalBytesRead()); - input.resetSizeCounter(); - assertEquals(0, input.getTotalBytesRead()); + } catch (InvalidProtocolBufferException e) { + // success. } } /** - * Tests that if we readString invalid UTF-8 bytes, no exception + * Tests that if we read an string that contains invalid UTF-8, no exception * is thrown. Instead, the invalid bytes are replaced with the Unicode * "replacement character" U+FFFD. */ - public void testReadStringInvalidUtf8() throws Exception { + public void testReadInvalidUtf8() throws Exception { ByteString.Output rawOutput = ByteString.newOutput(); CodedOutputStream output = CodedOutputStream.newInstance(rawOutput); int tag = WireFormat.makeTag(1, WireFormat.WIRETYPE_LENGTH_DELIMITED); output.writeRawVarint32(tag); output.writeRawVarint32(1); - output.writeRawBytes(new byte[] { (byte) 0x80 }); + output.writeRawBytes(new byte[] { (byte)0x80 }); output.flush(); CodedInputStream input = rawOutput.toByteString().newCodedInput(); @@ -568,37 +504,13 @@ public class CodedInputStreamTest extends TestCase { assertEquals(0xfffd, text.charAt(0)); } - /** - * Tests that if we readStringRequireUtf8 invalid UTF-8 bytes, an - * InvalidProtocolBufferException is thrown. - */ - public void testReadStringRequireUtf8InvalidUtf8() throws Exception { - ByteString.Output rawOutput = ByteString.newOutput(); - CodedOutputStream output = CodedOutputStream.newInstance(rawOutput); - - int tag = WireFormat.makeTag(1, WireFormat.WIRETYPE_LENGTH_DELIMITED); - output.writeRawVarint32(tag); - output.writeRawVarint32(1); - output.writeRawBytes(new byte[] { (byte) 0x80 }); - output.flush(); - - CodedInputStream input = rawOutput.toByteString().newCodedInput(); - assertEquals(tag, input.readTag()); - try { - input.readStringRequireUtf8(); - fail("Expected invalid UTF-8 exception."); - } catch (InvalidProtocolBufferException exception) { - assertEquals("Protocol message had invalid UTF-8.", exception.getMessage()); - } - } - public void testReadFromSlice() throws Exception { byte[] bytes = bytes(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); CodedInputStream in = CodedInputStream.newInstance(bytes, 3, 5); assertEquals(0, in.getTotalBytesRead()); for (int i = 3; i < 8; i++) { assertEquals(i, in.readRawByte()); - assertEquals(i - 2, in.getTotalBytesRead()); + assertEquals(i-2, in.getTotalBytesRead()); } // eof assertEquals(0, in.readTag()); @@ -618,152 +530,4 @@ public class CodedInputStreamTest extends TestCase { } } } - - public void testReadByteArray() throws Exception { - ByteString.Output rawOutput = ByteString.newOutput(); - CodedOutputStream output = CodedOutputStream.newInstance(rawOutput); - // Zero-sized bytes field. - output.writeRawVarint32(0); - // One one-byte bytes field - output.writeRawVarint32(1); - output.writeRawBytes(new byte[] { (byte) 23 }); - // Another one-byte bytes field - output.writeRawVarint32(1); - output.writeRawBytes(new byte[] { (byte) 45 }); - // A bytes field large enough that won't fit into the 4K buffer. - final int bytesLength = 16 * 1024; - byte[] bytes = new byte[bytesLength]; - bytes[0] = (byte) 67; - bytes[bytesLength - 1] = (byte) 89; - output.writeRawVarint32(bytesLength); - output.writeRawBytes(bytes); - - output.flush(); - CodedInputStream inputStream = rawOutput.toByteString().newCodedInput(); - - byte[] result = inputStream.readByteArray(); - assertEquals(0, result.length); - result = inputStream.readByteArray(); - assertEquals(1, result.length); - assertEquals((byte) 23, result[0]); - result = inputStream.readByteArray(); - assertEquals(1, result.length); - assertEquals((byte) 45, result[0]); - result = inputStream.readByteArray(); - assertEquals(bytesLength, result.length); - assertEquals((byte) 67, result[0]); - assertEquals((byte) 89, result[bytesLength - 1]); - } - - public void testReadByteBuffer() throws Exception { - ByteString.Output rawOutput = ByteString.newOutput(); - CodedOutputStream output = CodedOutputStream.newInstance(rawOutput); - // Zero-sized bytes field. - output.writeRawVarint32(0); - // One one-byte bytes field - output.writeRawVarint32(1); - output.writeRawBytes(new byte[]{(byte) 23}); - // Another one-byte bytes field - output.writeRawVarint32(1); - output.writeRawBytes(new byte[]{(byte) 45}); - // A bytes field large enough that won't fit into the 4K buffer. - final int bytesLength = 16 * 1024; - byte[] bytes = new byte[bytesLength]; - bytes[0] = (byte) 67; - bytes[bytesLength - 1] = (byte) 89; - output.writeRawVarint32(bytesLength); - output.writeRawBytes(bytes); - - output.flush(); - CodedInputStream inputStream = rawOutput.toByteString().newCodedInput(); - - ByteBuffer result = inputStream.readByteBuffer(); - assertEquals(0, result.capacity()); - result = inputStream.readByteBuffer(); - assertEquals(1, result.capacity()); - assertEquals((byte) 23, result.get()); - result = inputStream.readByteBuffer(); - assertEquals(1, result.capacity()); - assertEquals((byte) 45, result.get()); - result = inputStream.readByteBuffer(); - assertEquals(bytesLength, result.capacity()); - assertEquals((byte) 67, result.get()); - result.position(bytesLength - 1); - assertEquals((byte) 89, result.get()); - } - - public void testReadByteBufferAliasing() throws Exception { - ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream(); - CodedOutputStream output = CodedOutputStream.newInstance(byteArrayStream); - // Zero-sized bytes field. - output.writeRawVarint32(0); - // One one-byte bytes field - output.writeRawVarint32(1); - output.writeRawBytes(new byte[]{(byte) 23}); - // Another one-byte bytes field - output.writeRawVarint32(1); - output.writeRawBytes(new byte[]{(byte) 45}); - // A bytes field large enough that won't fit into the 4K buffer. - final int bytesLength = 16 * 1024; - byte[] bytes = new byte[bytesLength]; - bytes[0] = (byte) 67; - bytes[bytesLength - 1] = (byte) 89; - output.writeRawVarint32(bytesLength); - output.writeRawBytes(bytes); - output.flush(); - byte[] data = byteArrayStream.toByteArray(); - - // Without aliasing - CodedInputStream inputStream = CodedInputStream.newInstance(data); - ByteBuffer result = inputStream.readByteBuffer(); - assertEquals(0, result.capacity()); - result = inputStream.readByteBuffer(); - assertTrue(result.array() != data); - assertEquals(1, result.capacity()); - assertEquals((byte) 23, result.get()); - result = inputStream.readByteBuffer(); - assertTrue(result.array() != data); - assertEquals(1, result.capacity()); - assertEquals((byte) 45, result.get()); - result = inputStream.readByteBuffer(); - assertTrue(result.array() != data); - assertEquals(bytesLength, result.capacity()); - assertEquals((byte) 67, result.get()); - result.position(bytesLength - 1); - assertEquals((byte) 89, result.get()); - - // Enable aliasing - inputStream = CodedInputStream.newInstance(data); - inputStream.enableAliasing(true); - result = inputStream.readByteBuffer(); - assertEquals(0, result.capacity()); - result = inputStream.readByteBuffer(); - assertTrue(result.array() == data); - assertEquals(1, result.capacity()); - assertEquals((byte) 23, result.get()); - result = inputStream.readByteBuffer(); - assertTrue(result.array() == data); - assertEquals(1, result.capacity()); - assertEquals((byte) 45, result.get()); - result = inputStream.readByteBuffer(); - assertTrue(result.array() == data); - assertEquals(bytesLength, result.capacity()); - assertEquals((byte) 67, result.get()); - result.position(bytesLength - 1); - assertEquals((byte) 89, result.get()); - } - - public void testCompatibleTypes() throws Exception { - long data = 0x100000000L; - Int64Message message = Int64Message.newBuilder().setData(data).build(); - ByteString serialized = message.toByteString(); - - // Test int64(long) is compatible with bool(boolean) - BoolMessage msg2 = BoolMessage.parseFrom(serialized); - assertTrue(msg2.getData()); - - // Test int64(long) is compatible with int32(int) - Int32Message msg3 = Int32Message.parseFrom(serialized); - assertEquals((int) data, msg3.getData()); - } } diff --git a/java/src/test/java/com/google/protobuf/CodedOutputStreamTest.java b/java/src/test/java/com/google/protobuf/CodedOutputStreamTest.java index 0785cc9..c42b485 100644 --- a/java/src/test/java/com/google/protobuf/CodedOutputStreamTest.java +++ b/java/src/test/java/com/google/protobuf/CodedOutputStreamTest.java @@ -1,6 +1,6 @@ // Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ +// http://code.google.com/p/protobuf/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -30,16 +30,14 @@ package com.google.protobuf; -import protobuf_unittest.UnittestProto.SparseEnumMessage; import protobuf_unittest.UnittestProto.TestAllTypes; import protobuf_unittest.UnittestProto.TestPackedTypes; -import protobuf_unittest.UnittestProto.TestSparseEnum; import junit.framework.TestCase; import java.io.ByteArrayOutputStream; -import java.nio.ByteBuffer; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -303,99 +301,4 @@ public class CodedOutputStreamTest extends TestCase { assertEqualBytes(TestUtil.getGoldenPackedFieldsMessage().toByteArray(), rawBytes); } - - /** Test writing a message containing a negative enum value. This used to - * fail because the size was not properly computed as a sign-extended varint. - */ - public void testWriteMessageWithNegativeEnumValue() throws Exception { - SparseEnumMessage message = SparseEnumMessage.newBuilder() - .setSparseEnum(TestSparseEnum.SPARSE_E) .build(); - assertTrue(message.getSparseEnum().getNumber() < 0); - byte[] rawBytes = message.toByteArray(); - SparseEnumMessage message2 = SparseEnumMessage.parseFrom(rawBytes); - assertEquals(TestSparseEnum.SPARSE_E, message2.getSparseEnum()); - } - - /** Test getTotalBytesWritten() */ - public void testGetTotalBytesWritten() throws Exception { - final int BUFFER_SIZE = 4 * 1024; - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(BUFFER_SIZE); - CodedOutputStream codedStream = CodedOutputStream.newInstance(outputStream); - byte[] value = "abcde".getBytes("UTF-8"); - for (int i = 0; i < 1024; ++i) { - codedStream.writeRawBytes(value, 0, value.length); - } - // Make sure we have written more bytes than the buffer could hold. This is - // to make the test complete. - assertTrue(codedStream.getTotalBytesWritten() > BUFFER_SIZE); - assertEquals(value.length * 1024, codedStream.getTotalBytesWritten()); - } - - public void testWriteToByteBuffer() throws Exception { - final int bufferSize = 16 * 1024; - ByteBuffer buffer = ByteBuffer.allocate(bufferSize); - CodedOutputStream codedStream = CodedOutputStream.newInstance(buffer); - // Write raw bytes into the ByteBuffer. - final int length1 = 5000; - for (int i = 0; i < length1; i++) { - codedStream.writeRawByte((byte) 1); - } - final int length2 = 8 * 1024; - byte[] data = new byte[length2]; - for (int i = 0; i < length2; i++) { - data[i] = (byte) 2; - } - codedStream.writeRawBytes(data); - final int length3 = bufferSize - length1 - length2; - for (int i = 0; i < length3; i++) { - codedStream.writeRawByte((byte) 3); - } - codedStream.flush(); - - // Check that data is correctly written to the ByteBuffer. - assertEquals(0, buffer.remaining()); - buffer.flip(); - for (int i = 0; i < length1; i++) { - assertEquals((byte) 1, buffer.get()); - } - for (int i = 0; i < length2; i++) { - assertEquals((byte) 2, buffer.get()); - } - for (int i = 0; i < length3; i++) { - assertEquals((byte) 3, buffer.get()); - } - } - - public void testWriteByteBuffer() throws Exception { - byte[] value = "abcde".getBytes("UTF-8"); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - CodedOutputStream codedStream = CodedOutputStream.newInstance(outputStream); - ByteBuffer byteBuffer = ByteBuffer.wrap(value, 0, 1); - // This will actually write 5 bytes into the CodedOutputStream as the - // ByteBuffer's capacity() is 5. - codedStream.writeRawBytes(byteBuffer); - // The above call shouldn't affect the ByteBuffer's state. - assertEquals(0, byteBuffer.position()); - assertEquals(1, byteBuffer.limit()); - - // The correct way to write part of an array using ByteBuffer. - codedStream.writeRawBytes(ByteBuffer.wrap(value, 2, 1).slice()); - - codedStream.flush(); - byte[] result = outputStream.toByteArray(); - assertEquals(6, result.length); - for (int i = 0; i < 5; i++) { - assertEquals(value[i], result[i]); - } - assertEquals(value[2], result[5]); - } - - public void testWriteByteArrayWithOffsets() throws Exception { - byte[] fullArray = bytes(0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88); - byte[] destination = new byte[4]; - CodedOutputStream codedStream = CodedOutputStream.newInstance(destination); - codedStream.writeByteArrayNoTag(fullArray, 2, 2); - assertEqualBytes(bytes(0x02, 0x33, 0x44, 0x00), destination); - assertEquals(3, codedStream.getTotalBytesWritten()); - } } diff --git a/java/src/test/java/com/google/protobuf/DeprecatedFieldTest.java b/java/src/test/java/com/google/protobuf/DeprecatedFieldTest.java deleted file mode 100644 index e7905f7..0000000 --- a/java/src/test/java/com/google/protobuf/DeprecatedFieldTest.java +++ /dev/null @@ -1,80 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import protobuf_unittest.UnittestProto.TestDeprecatedFields; - -import junit.framework.TestCase; - -import java.lang.reflect.AnnotatedElement; -import java.lang.reflect.Method; -/** - * Test field deprecation - * - * @author birdo@google.com (Roberto Scaramuzzi) - */ -public class DeprecatedFieldTest extends TestCase { - private String[] deprecatedGetterNames = { - "hasDeprecatedInt32", - "getDeprecatedInt32"}; - - private String[] deprecatedBuilderGetterNames = { - "hasDeprecatedInt32", - "getDeprecatedInt32", - "clearDeprecatedInt32"}; - - private String[] deprecatedBuilderSetterNames = { - "setDeprecatedInt32"}; - - public void testDeprecatedField() throws Exception { - Class<?> deprecatedFields = TestDeprecatedFields.class; - Class<?> deprecatedFieldsBuilder = TestDeprecatedFields.Builder.class; - for (String name : deprecatedGetterNames) { - Method method = deprecatedFields.getMethod(name); - assertTrue("Method " + name + " should be deprecated", - isDeprecated(method)); - } - for (String name : deprecatedBuilderGetterNames) { - Method method = deprecatedFieldsBuilder.getMethod(name); - assertTrue("Method " + name + " should be deprecated", - isDeprecated(method)); - } - for (String name : deprecatedBuilderSetterNames) { - Method method = deprecatedFieldsBuilder.getMethod(name, int.class); - assertTrue("Method " + name + " should be deprecated", - isDeprecated(method)); - } - } - - private boolean isDeprecated(AnnotatedElement annotated) { - return annotated.isAnnotationPresent(Deprecated.class); - } -} diff --git a/java/src/test/java/com/google/protobuf/DescriptorsTest.java b/java/src/test/java/com/google/protobuf/DescriptorsTest.java index 0092771..f41d070 100644 --- a/java/src/test/java/com/google/protobuf/DescriptorsTest.java +++ b/java/src/test/java/com/google/protobuf/DescriptorsTest.java @@ -1,6 +1,6 @@ // Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ +// http://code.google.com/p/protobuf/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -31,15 +31,12 @@ package com.google.protobuf; import com.google.protobuf.DescriptorProtos.DescriptorProto; -import com.google.protobuf.DescriptorProtos.EnumDescriptorProto; -import com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto; import com.google.protobuf.DescriptorProtos.FieldDescriptorProto; import com.google.protobuf.DescriptorProtos.FileDescriptorProto; import com.google.protobuf.Descriptors.DescriptorValidationException; import com.google.protobuf.Descriptors.FileDescriptor; import com.google.protobuf.Descriptors.Descriptor; import com.google.protobuf.Descriptors.FieldDescriptor; -import com.google.protobuf.Descriptors.OneofDescriptor; import com.google.protobuf.Descriptors.EnumDescriptor; import com.google.protobuf.Descriptors.EnumValueDescriptor; import com.google.protobuf.Descriptors.ServiceDescriptor; @@ -54,19 +51,15 @@ import protobuf_unittest.UnittestProto.ForeignMessage; import protobuf_unittest.UnittestProto.TestAllTypes; import protobuf_unittest.UnittestProto.TestAllExtensions; import protobuf_unittest.UnittestProto.TestExtremeDefaultValues; -import protobuf_unittest.UnittestProto.TestMultipleExtensionRanges; import protobuf_unittest.UnittestProto.TestRequired; import protobuf_unittest.UnittestProto.TestService; import protobuf_unittest.UnittestCustomOptions; -import protobuf_unittest.TestCustomOptions; - import junit.framework.TestCase; import java.util.Arrays; import java.util.Collections; -import java.util.List; /** * Unit test for {@link Descriptors}. @@ -78,7 +71,6 @@ public class DescriptorsTest extends TestCase { // Regression test for bug where referencing a FieldDescriptor.Type value // before a FieldDescriptorProto.Type value would yield a // ExceptionInInitializerError. - @SuppressWarnings("unused") private static final Object STATIC_INIT_TEST = FieldDescriptor.Type.BOOL; public void testFieldTypeEnumMapping() throws Exception { @@ -312,7 +304,6 @@ public class DescriptorsTest extends TestCase { EnumValueDescriptor value = ForeignEnum.FOREIGN_FOO.getValueDescriptor(); assertEquals(value, enumType.getValues().get(0)); assertEquals("FOREIGN_FOO", value.getName()); - assertEquals("FOREIGN_FOO", value.toString()); assertEquals(4, value.getNumber()); assertEquals(value, enumType.findValueByName("FOREIGN_FOO")); assertEquals(value, enumType.findValueByNumber(4)); @@ -329,6 +320,7 @@ public class DescriptorsTest extends TestCase { assertEquals("protobuf_unittest.TestService", service.getFullName()); assertEquals(UnittestProto.getDescriptor(), service.getFile()); + assertEquals(2, service.getMethods().size()); MethodDescriptor fooMethod = service.getMethods().get(0); assertEquals("Foo", fooMethod.getName()); @@ -355,12 +347,8 @@ public class DescriptorsTest extends TestCase { public void testCustomOptions() throws Exception { - // Get the descriptor indirectly from a dependent proto class. This is to - // ensure that when a proto class is loaded, custom options defined in its - // dependencies are also properly initialized. Descriptor descriptor = - TestCustomOptions.TestMessageWithCustomOptionsContainer.getDescriptor() - .findFieldByName("field").getMessageType(); + UnittestCustomOptions.TestMessageWithCustomOptions.getDescriptor(); assertTrue( descriptor.getOptions().hasExtension(UnittestCustomOptions.messageOpt1)); @@ -437,7 +425,7 @@ public class DescriptorsTest extends TestCase { UnittestEnormousDescriptor.getDescriptor() .toProto().getSerializedSize() > 65536); } - + /** * Tests that the DescriptorValidationException works as intended. */ @@ -456,7 +444,7 @@ public class DescriptorsTest extends TestCase { .build()) .build(); try { - Descriptors.FileDescriptor.buildFrom(fileDescriptorProto, + Descriptors.FileDescriptor.buildFrom(fileDescriptorProto, new FileDescriptor[0]); fail("DescriptorValidationException expected"); } catch (DescriptorValidationException e) { @@ -468,268 +456,4 @@ public class DescriptorsTest extends TestCase { assertTrue(e.getCause().getMessage().indexOf("invalid") != -1); } } - - /** - * Tests the translate/crosslink for an example where a message field's name - * and type name are the same. - */ - public void testDescriptorComplexCrosslink() throws Exception { - FileDescriptorProto fileDescriptorProto = FileDescriptorProto.newBuilder() - .setName("foo.proto") - .addMessageType(DescriptorProto.newBuilder() - .setName("Foo") - .addField(FieldDescriptorProto.newBuilder() - .setLabel(FieldDescriptorProto.Label.LABEL_OPTIONAL) - .setType(FieldDescriptorProto.Type.TYPE_INT32) - .setName("foo") - .setNumber(1) - .build()) - .build()) - .addMessageType(DescriptorProto.newBuilder() - .setName("Bar") - .addField(FieldDescriptorProto.newBuilder() - .setLabel(FieldDescriptorProto.Label.LABEL_OPTIONAL) - .setTypeName("Foo") - .setName("Foo") - .setNumber(1) - .build()) - .build()) - .build(); - // translate and crosslink - FileDescriptor file = - Descriptors.FileDescriptor.buildFrom(fileDescriptorProto, - new FileDescriptor[0]); - // verify resulting descriptors - assertNotNull(file); - List<Descriptor> msglist = file.getMessageTypes(); - assertNotNull(msglist); - assertTrue(msglist.size() == 2); - boolean barFound = false; - for (Descriptor desc : msglist) { - if (desc.getName().equals("Bar")) { - barFound = true; - assertNotNull(desc.getFields()); - List<FieldDescriptor> fieldlist = desc.getFields(); - assertNotNull(fieldlist); - assertTrue(fieldlist.size() == 1); - assertTrue(fieldlist.get(0).getType() == FieldDescriptor.Type.MESSAGE); - assertTrue(fieldlist.get(0).getMessageType().getName().equals("Foo")); - } - } - assertTrue(barFound); - } - - public void testDependencyOrder() throws Exception { - FileDescriptorProto fooProto = FileDescriptorProto.newBuilder() - .setName("foo.proto").build(); - FileDescriptorProto barProto = FileDescriptorProto.newBuilder() - .setName("bar.proto") - .addDependency("foo.proto") - .build(); - FileDescriptorProto bazProto = FileDescriptorProto.newBuilder() - .setName("baz.proto") - .addDependency("foo.proto") - .addDependency("bar.proto") - .addPublicDependency(0) - .addPublicDependency(1) - .build(); - FileDescriptor fooFile = Descriptors.FileDescriptor.buildFrom(fooProto, - new FileDescriptor[0]); - FileDescriptor barFile = Descriptors.FileDescriptor.buildFrom(barProto, - new FileDescriptor[] {fooFile}); - - // Items in the FileDescriptor array can be in any order. - Descriptors.FileDescriptor.buildFrom(bazProto, - new FileDescriptor[] {fooFile, barFile}); - Descriptors.FileDescriptor.buildFrom(bazProto, - new FileDescriptor[] {barFile, fooFile}); - } - - public void testInvalidPublicDependency() throws Exception { - FileDescriptorProto fooProto = FileDescriptorProto.newBuilder() - .setName("foo.proto").build(); - FileDescriptorProto barProto = FileDescriptorProto.newBuilder() - .setName("boo.proto") - .addDependency("foo.proto") - .addPublicDependency(1) // Error, should be 0. - .build(); - FileDescriptor fooFile = Descriptors.FileDescriptor.buildFrom(fooProto, - new FileDescriptor[0]); - try { - Descriptors.FileDescriptor.buildFrom(barProto, - new FileDescriptor[] {fooFile}); - fail("DescriptorValidationException expected"); - } catch (DescriptorValidationException e) { - assertTrue( - e.getMessage().indexOf("Invalid public dependency index.") != -1); - } - } - - public void testHiddenDependency() throws Exception { - FileDescriptorProto barProto = FileDescriptorProto.newBuilder() - .setName("bar.proto") - .addMessageType(DescriptorProto.newBuilder().setName("Bar")) - .build(); - FileDescriptorProto forwardProto = FileDescriptorProto.newBuilder() - .setName("forward.proto") - .addDependency("bar.proto") - .build(); - FileDescriptorProto fooProto = FileDescriptorProto.newBuilder() - .setName("foo.proto") - .addDependency("forward.proto") - .addMessageType(DescriptorProto.newBuilder() - .setName("Foo") - .addField(FieldDescriptorProto.newBuilder() - .setLabel(FieldDescriptorProto.Label.LABEL_OPTIONAL) - .setTypeName("Bar") - .setName("bar") - .setNumber(1))) - .build(); - FileDescriptor barFile = Descriptors.FileDescriptor.buildFrom( - barProto, new FileDescriptor[0]); - FileDescriptor forwardFile = Descriptors.FileDescriptor.buildFrom( - forwardProto, new FileDescriptor[] {barFile}); - - try { - Descriptors.FileDescriptor.buildFrom( - fooProto, new FileDescriptor[] {forwardFile}); - fail("DescriptorValidationException expected"); - } catch (DescriptorValidationException e) { - assertTrue(e.getMessage().indexOf("Bar") != -1); - assertTrue(e.getMessage().indexOf("is not defined") != -1); - } - } - - public void testPublicDependency() throws Exception { - FileDescriptorProto barProto = FileDescriptorProto.newBuilder() - .setName("bar.proto") - .addMessageType(DescriptorProto.newBuilder().setName("Bar")) - .build(); - FileDescriptorProto forwardProto = FileDescriptorProto.newBuilder() - .setName("forward.proto") - .addDependency("bar.proto") - .addPublicDependency(0) - .build(); - FileDescriptorProto fooProto = FileDescriptorProto.newBuilder() - .setName("foo.proto") - .addDependency("forward.proto") - .addMessageType(DescriptorProto.newBuilder() - .setName("Foo") - .addField(FieldDescriptorProto.newBuilder() - .setLabel(FieldDescriptorProto.Label.LABEL_OPTIONAL) - .setTypeName("Bar") - .setName("bar") - .setNumber(1))) - .build(); - FileDescriptor barFile = Descriptors.FileDescriptor.buildFrom( - barProto, new FileDescriptor[0]); - FileDescriptor forwardFile = Descriptors.FileDescriptor.buildFrom( - forwardProto, new FileDescriptor[]{barFile}); - Descriptors.FileDescriptor.buildFrom( - fooProto, new FileDescriptor[] {forwardFile}); - } - - /** - * Tests the translate/crosslink for an example with a more complex namespace - * referencing. - */ - public void testComplexNamespacePublicDependency() throws Exception { - FileDescriptorProto fooProto = FileDescriptorProto.newBuilder() - .setName("bar.proto") - .setPackage("a.b.c.d.bar.shared") - .addEnumType(EnumDescriptorProto.newBuilder() - .setName("MyEnum") - .addValue(EnumValueDescriptorProto.newBuilder() - .setName("BLAH") - .setNumber(1))) - .build(); - FileDescriptorProto barProto = FileDescriptorProto.newBuilder() - .setName("foo.proto") - .addDependency("bar.proto") - .setPackage("a.b.c.d.foo.shared") - .addMessageType(DescriptorProto.newBuilder() - .setName("MyMessage") - .addField(FieldDescriptorProto.newBuilder() - .setLabel(FieldDescriptorProto.Label.LABEL_REPEATED) - .setTypeName("bar.shared.MyEnum") - .setName("MyField") - .setNumber(1))) - .build(); - // translate and crosslink - FileDescriptor fooFile = Descriptors.FileDescriptor.buildFrom( - fooProto, new FileDescriptor[0]); - FileDescriptor barFile = Descriptors.FileDescriptor.buildFrom( - barProto, new FileDescriptor[]{fooFile}); - // verify resulting descriptors - assertNotNull(barFile); - List<Descriptor> msglist = barFile.getMessageTypes(); - assertNotNull(msglist); - assertTrue(msglist.size() == 1); - Descriptor desc = msglist.get(0); - if (desc.getName().equals("MyMessage")) { - assertNotNull(desc.getFields()); - List<FieldDescriptor> fieldlist = desc.getFields(); - assertNotNull(fieldlist); - assertTrue(fieldlist.size() == 1); - FieldDescriptor field = fieldlist.get(0); - assertTrue(field.getType() == FieldDescriptor.Type.ENUM); - assertTrue(field.getEnumType().getName().equals("MyEnum")); - assertTrue(field.getEnumType().getFile().getName().equals("bar.proto")); - assertTrue(field.getEnumType().getFile().getPackage().equals( - "a.b.c.d.bar.shared")); - } - } - - public void testOneofDescriptor() throws Exception { - Descriptor messageType = TestAllTypes.getDescriptor(); - FieldDescriptor field = - messageType.findFieldByName("oneof_nested_message"); - OneofDescriptor oneofDescriptor = field.getContainingOneof(); - assertNotNull(oneofDescriptor); - assertSame(oneofDescriptor, messageType.getOneofs().get(0)); - assertEquals("oneof_field", oneofDescriptor.getName()); - - assertEquals(4, oneofDescriptor.getFieldCount()); - assertSame(oneofDescriptor.getField(1), field); - } - - public void testMessageDescriptorExtensions() throws Exception { - assertFalse(TestAllTypes.getDescriptor().isExtendable()); - assertTrue(TestAllExtensions.getDescriptor().isExtendable()); - assertTrue(TestMultipleExtensionRanges.getDescriptor().isExtendable()); - - assertFalse(TestAllTypes.getDescriptor().isExtensionNumber(3)); - assertTrue(TestAllExtensions.getDescriptor().isExtensionNumber(3)); - assertTrue(TestMultipleExtensionRanges.getDescriptor().isExtensionNumber(42)); - assertFalse(TestMultipleExtensionRanges.getDescriptor().isExtensionNumber(43)); - assertFalse(TestMultipleExtensionRanges.getDescriptor().isExtensionNumber(4142)); - assertTrue(TestMultipleExtensionRanges.getDescriptor().isExtensionNumber(4143)); - } - - public void testPackedEnumField() throws Exception { - FileDescriptorProto fileDescriptorProto = FileDescriptorProto.newBuilder() - .setName("foo.proto") - .addEnumType(EnumDescriptorProto.newBuilder() - .setName("Enum") - .addValue(EnumValueDescriptorProto.newBuilder() - .setName("FOO") - .setNumber(1) - .build()) - .build()) - .addMessageType(DescriptorProto.newBuilder() - .setName("Message") - .addField(FieldDescriptorProto.newBuilder() - .setName("foo") - .setTypeName("Enum") - .setNumber(1) - .setLabel(FieldDescriptorProto.Label.LABEL_REPEATED) - .setOptions(DescriptorProtos.FieldOptions.newBuilder() - .setPacked(true) - .build()) - .build()) - .build()) - .build(); - Descriptors.FileDescriptor.buildFrom( - fileDescriptorProto, new FileDescriptor[0]); - } } diff --git a/java/src/test/java/com/google/protobuf/DynamicMessageTest.java b/java/src/test/java/com/google/protobuf/DynamicMessageTest.java index 55144e7..aabccda 100644 --- a/java/src/test/java/com/google/protobuf/DynamicMessageTest.java +++ b/java/src/test/java/com/google/protobuf/DynamicMessageTest.java @@ -1,6 +1,6 @@ // Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ +// http://code.google.com/p/protobuf/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -30,13 +30,8 @@ package com.google.protobuf; -import com.google.protobuf.Descriptors.EnumDescriptor; -import com.google.protobuf.Descriptors.FieldDescriptor; -import com.google.protobuf.Descriptors.OneofDescriptor; - -import protobuf_unittest.UnittestProto.TestAllExtensions; import protobuf_unittest.UnittestProto.TestAllTypes; -import protobuf_unittest.UnittestProto.TestEmptyMessage; +import protobuf_unittest.UnittestProto.TestAllExtensions; import protobuf_unittest.UnittestProto.TestPackedTypes; import junit.framework.TestCase; @@ -66,44 +61,28 @@ public class DynamicMessageTest extends TestCase { reflectionTester.assertAllFieldsSetViaReflection(message); } - public void testSettersAfterBuild() throws Exception { + public void testDoubleBuildError() throws Exception { Message.Builder builder = DynamicMessage.newBuilder(TestAllTypes.getDescriptor()); - Message firstMessage = builder.build(); - // double build() builder.build(); - // clear() after build() - builder.clear(); - // setters after build() - reflectionTester.setAllFieldsViaReflection(builder); - Message message = builder.build(); - reflectionTester.assertAllFieldsSetViaReflection(message); - // repeated setters after build() - reflectionTester.modifyRepeatedFieldsViaReflection(builder); - message = builder.build(); - reflectionTester.assertRepeatedFieldsModifiedViaReflection(message); - // firstMessage shouldn't have been modified. - reflectionTester.assertClearViaReflection(firstMessage); + try { + builder.build(); + fail("Should have thrown exception."); + } catch (IllegalStateException e) { + // Success. + } } - public void testUnknownFields() throws Exception { + public void testClearAfterBuildError() throws Exception { Message.Builder builder = - DynamicMessage.newBuilder(TestEmptyMessage.getDescriptor()); - builder.setUnknownFields(UnknownFieldSet.newBuilder() - .addField(1, UnknownFieldSet.Field.newBuilder().addVarint(1).build()) - .addField(2, UnknownFieldSet.Field.newBuilder().addFixed32(1).build()) - .build()); - Message message = builder.build(); - assertEquals(2, message.getUnknownFields().asMap().size()); - // clone() with unknown fields - Message.Builder newBuilder = builder.clone(); - assertEquals(2, newBuilder.getUnknownFields().asMap().size()); - // clear() with unknown fields - newBuilder.clear(); - assertTrue(newBuilder.getUnknownFields().asMap().isEmpty()); - // serialize/parse with unknown fields - newBuilder.mergeFrom(message.toByteString()); - assertEquals(2, newBuilder.getUnknownFields().asMap().size()); + DynamicMessage.newBuilder(TestAllTypes.getDescriptor()); + builder.build(); + try { + builder.clear(); + fail("Should have thrown exception."); + } catch (IllegalStateException e) { + // Success. + } } public void testDynamicMessageSettersRejectNull() throws Exception { @@ -188,23 +167,6 @@ public class DynamicMessageTest extends TestCase { Message message2 = DynamicMessage.parseFrom(TestAllTypes.getDescriptor(), rawBytes); reflectionTester.assertAllFieldsSetViaReflection(message2); - - // Test Parser interface. - Message message3 = message2.getParserForType().parseFrom(rawBytes); - reflectionTester.assertAllFieldsSetViaReflection(message3); - } - - public void testDynamicMessageExtensionParsing() throws Exception { - ByteString rawBytes = TestUtil.getAllExtensionsSet().toByteString(); - Message message = DynamicMessage.parseFrom( - TestAllExtensions.getDescriptor(), rawBytes, - TestUtil.getExtensionRegistry()); - extensionsReflectionTester.assertAllFieldsSetViaReflection(message); - - // Test Parser interface. - Message message2 = message.getParserForType().parseFrom( - rawBytes, TestUtil.getExtensionRegistry()); - extensionsReflectionTester.assertAllFieldsSetViaReflection(message2); } public void testDynamicMessagePackedSerialization() throws Exception { @@ -232,10 +194,6 @@ public class DynamicMessageTest extends TestCase { Message message2 = DynamicMessage.parseFrom(TestPackedTypes.getDescriptor(), rawBytes); packedReflectionTester.assertPackedFieldsSetViaReflection(message2); - - // Test Parser interface. - Message message3 = message2.getParserForType().parseFrom(rawBytes); - packedReflectionTester.assertPackedFieldsSetViaReflection(message3); } public void testDynamicMessageCopy() throws Exception { @@ -245,19 +203,6 @@ public class DynamicMessageTest extends TestCase { DynamicMessage copy = DynamicMessage.newBuilder(message).build(); reflectionTester.assertAllFieldsSetViaReflection(copy); - - // Test oneof behavior - FieldDescriptor bytesField = - TestAllTypes.getDescriptor().findFieldByName("oneof_bytes"); - FieldDescriptor uint32Field = - TestAllTypes.getDescriptor().findFieldByName("oneof_uint32"); - assertTrue(copy.hasField(bytesField)); - assertFalse(copy.hasField(uint32Field)); - DynamicMessage copy2 = - DynamicMessage.newBuilder(message).setField(uint32Field, 123).build(); - assertFalse(copy2.hasField(bytesField)); - assertTrue(copy2.hasField(uint32Field)); - assertEquals(123, copy2.getField(uint32Field)); } public void testToBuilder() throws Exception { @@ -278,49 +223,4 @@ public class DynamicMessageTest extends TestCase { assertEquals(Arrays.asList(unknownFieldVal), derived.getUnknownFields().getField(unknownFieldNum).getVarintList()); } - - public void testDynamicOneofMessage() throws Exception { - DynamicMessage.Builder builder = - DynamicMessage.newBuilder(TestAllTypes.getDescriptor()); - OneofDescriptor oneof = TestAllTypes.getDescriptor().getOneofs().get(0); - assertFalse(builder.hasOneof(oneof)); - assertSame(null, builder.getOneofFieldDescriptor(oneof)); - - reflectionTester.setAllFieldsViaReflection(builder); - assertTrue(builder.hasOneof(oneof)); - FieldDescriptor field = oneof.getField(3); - assertSame(field, builder.getOneofFieldDescriptor(oneof)); - - DynamicMessage message = builder.buildPartial(); - assertTrue(message.hasOneof(oneof)); - - DynamicMessage.Builder mergedBuilder = - DynamicMessage.newBuilder(TestAllTypes.getDescriptor()); - FieldDescriptor mergedField = oneof.getField(0); - mergedBuilder.setField(mergedField, 123); - assertTrue(mergedBuilder.hasField(mergedField)); - mergedBuilder.mergeFrom(message); - assertTrue(mergedBuilder.hasField(field)); - assertFalse(mergedBuilder.hasField(mergedField)); - - builder.clearOneof(oneof); - assertSame(null, builder.getOneofFieldDescriptor(oneof)); - message = builder.build(); - assertSame(null, message.getOneofFieldDescriptor(oneof)); - } - - // Regression test for a bug that makes setField() not work for repeated - // enum fields. - public void testSettersForRepeatedEnumField() throws Exception { - DynamicMessage.Builder builder = - DynamicMessage.newBuilder(TestAllTypes.getDescriptor()); - FieldDescriptor repeatedEnumField = - TestAllTypes.getDescriptor().findFieldByName( - "repeated_nested_enum"); - EnumDescriptor enumDescriptor = TestAllTypes.NestedEnum.getDescriptor(); - builder.setField(repeatedEnumField, enumDescriptor.getValues()); - DynamicMessage message = builder.build(); - assertEquals( - enumDescriptor.getValues(), message.getField(repeatedEnumField)); - } } diff --git a/java/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java b/java/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java deleted file mode 100644 index a92ba37..0000000 --- a/java/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java +++ /dev/null @@ -1,48 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -/** - * A prerun for a test suite that allows running the full protocol buffer - * tests in a mode that disables the optimization for not using - * {@link RepeatedFieldBuilder} and {@link SingleFieldBuilder} until they are - * requested. This allows us to run all the tests through both code paths - * and ensures that both code paths produce identical results. - * - * @author jonp@google.com (Jon Perlow) - */ -public class ForceFieldBuildersPreRun implements Runnable { - - //@Override (Java 1.6 override semantics, but we must support 1.5) - public void run() { - GeneratedMessage.enableAlwaysUseFieldBuildersForTesting(); - } -} diff --git a/java/src/test/java/com/google/protobuf/GeneratedMessageTest.java b/java/src/test/java/com/google/protobuf/GeneratedMessageTest.java index 0b3482c..73c71f3 100644 --- a/java/src/test/java/com/google/protobuf/GeneratedMessageTest.java +++ b/java/src/test/java/com/google/protobuf/GeneratedMessageTest.java @@ -1,6 +1,6 @@ // Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ +// http://code.google.com/p/protobuf/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -30,51 +30,26 @@ package com.google.protobuf; -import com.google.protobuf.Descriptors.Descriptor; -import com.google.protobuf.Descriptors.FieldDescriptor; -import com.google.protobuf.UnittestLite.TestAllExtensionsLite; -import com.google.protobuf.test.UnittestImport; -import protobuf_unittest.EnumWithNoOuter; -import protobuf_unittest.MessageWithNoOuter; -import protobuf_unittest.MultipleFilesTestProto; -import protobuf_unittest.NestedExtension.MyNestedExtension; -import protobuf_unittest.NestedExtensionLite.MyNestedExtensionLite; -import protobuf_unittest.NonNestedExtension; -import protobuf_unittest.NonNestedExtension.MessageToBeExtended; -import protobuf_unittest.NonNestedExtension.MyNonNestedExtension; -import protobuf_unittest.NonNestedExtensionLite; -import protobuf_unittest.NonNestedExtensionLite.MessageLiteToBeExtended; -import protobuf_unittest.NonNestedExtensionLite.MyNonNestedExtensionLite; -import protobuf_unittest.OuterClassNameTest2OuterClass; -import protobuf_unittest.OuterClassNameTest3OuterClass; -import protobuf_unittest.OuterClassNameTestOuterClass; -import protobuf_unittest.ServiceWithNoOuter; import protobuf_unittest.UnittestOptimizeFor.TestOptimizedForSize; import protobuf_unittest.UnittestOptimizeFor.TestOptionalOptimizedForSize; import protobuf_unittest.UnittestOptimizeFor.TestRequiredOptimizedForSize; import protobuf_unittest.UnittestProto; -import protobuf_unittest.UnittestProto.ForeignEnum; import protobuf_unittest.UnittestProto.ForeignMessage; -import protobuf_unittest.UnittestProto.ForeignMessageOrBuilder; -import protobuf_unittest.UnittestProto.TestAllExtensions; +import protobuf_unittest.UnittestProto.ForeignEnum; import protobuf_unittest.UnittestProto.TestAllTypes; -import protobuf_unittest.UnittestProto.TestAllTypes.NestedMessage; -import protobuf_unittest.UnittestProto.TestAllTypesOrBuilder; +import protobuf_unittest.UnittestProto.TestAllExtensions; import protobuf_unittest.UnittestProto.TestExtremeDefaultValues; -import protobuf_unittest.UnittestProto.TestOneof2; import protobuf_unittest.UnittestProto.TestPackedTypes; import protobuf_unittest.UnittestProto.TestUnpackedTypes; +import protobuf_unittest.MultipleFilesTestProto; +import protobuf_unittest.MessageWithNoOuter; +import protobuf_unittest.EnumWithNoOuter; +import protobuf_unittest.ServiceWithNoOuter; +import com.google.protobuf.UnittestLite; +import com.google.protobuf.UnittestLite.TestAllExtensionsLite; import junit.framework.TestCase; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; import java.util.Arrays; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; /** * Unit test for generated messages and generated code. See also @@ -93,138 +68,32 @@ public class GeneratedMessageTest extends TestCase { TestAllTypes.newBuilder().getDefaultInstanceForType()); } - public void testMessageOrBuilder() throws Exception { + public void testAccessors() throws Exception { TestAllTypes.Builder builder = TestAllTypes.newBuilder(); TestUtil.setAllFields(builder); TestAllTypes message = builder.build(); TestUtil.assertAllFieldsSet(message); } - public void testUsingBuilderMultipleTimes() throws Exception { - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - // primitive field scalar and repeated - builder.setOptionalSfixed64(100); - builder.addRepeatedInt32(100); - // enum field scalar and repeated - builder.setOptionalImportEnum(UnittestImport.ImportEnum.IMPORT_BAR); - builder.addRepeatedImportEnum(UnittestImport.ImportEnum.IMPORT_BAR); - // proto field scalar and repeated - builder.setOptionalForeignMessage(ForeignMessage.newBuilder().setC(1)); - builder.addRepeatedForeignMessage(ForeignMessage.newBuilder().setC(1)); - - TestAllTypes value1 = builder.build(); - - assertEquals(100, value1.getOptionalSfixed64()); - assertEquals(100, value1.getRepeatedInt32(0)); - assertEquals(UnittestImport.ImportEnum.IMPORT_BAR, - value1.getOptionalImportEnum()); - assertEquals(UnittestImport.ImportEnum.IMPORT_BAR, - value1.getRepeatedImportEnum(0)); - assertEquals(1, value1.getOptionalForeignMessage().getC()); - assertEquals(1, value1.getRepeatedForeignMessage(0).getC()); - - // Make sure that builder didn't update previously created values - builder.setOptionalSfixed64(200); - builder.setRepeatedInt32(0, 200); - builder.setOptionalImportEnum(UnittestImport.ImportEnum.IMPORT_FOO); - builder.setRepeatedImportEnum(0, UnittestImport.ImportEnum.IMPORT_FOO); - builder.setOptionalForeignMessage(ForeignMessage.newBuilder().setC(2)); - builder.setRepeatedForeignMessage(0, ForeignMessage.newBuilder().setC(2)); - - TestAllTypes value2 = builder.build(); - - // Make sure value1 didn't change. - assertEquals(100, value1.getOptionalSfixed64()); - assertEquals(100, value1.getRepeatedInt32(0)); - assertEquals(UnittestImport.ImportEnum.IMPORT_BAR, - value1.getOptionalImportEnum()); - assertEquals(UnittestImport.ImportEnum.IMPORT_BAR, - value1.getRepeatedImportEnum(0)); - assertEquals(1, value1.getOptionalForeignMessage().getC()); - assertEquals(1, value1.getRepeatedForeignMessage(0).getC()); - - // Make sure value2 is correct - assertEquals(200, value2.getOptionalSfixed64()); - assertEquals(200, value2.getRepeatedInt32(0)); - assertEquals(UnittestImport.ImportEnum.IMPORT_FOO, - value2.getOptionalImportEnum()); - assertEquals(UnittestImport.ImportEnum.IMPORT_FOO, - value2.getRepeatedImportEnum(0)); - assertEquals(2, value2.getOptionalForeignMessage().getC()); - assertEquals(2, value2.getRepeatedForeignMessage(0).getC()); - } - - public void testProtosShareRepeatedArraysIfDidntChange() throws Exception { + public void testDoubleBuildError() throws Exception { TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - builder.addRepeatedInt32(100); - builder.addRepeatedImportEnum(UnittestImport.ImportEnum.IMPORT_BAR); - builder.addRepeatedForeignMessage(ForeignMessage.getDefaultInstance()); - - TestAllTypes value1 = builder.build(); - TestAllTypes value2 = value1.toBuilder().build(); - - assertSame(value1.getRepeatedInt32List(), value2.getRepeatedInt32List()); - assertSame(value1.getRepeatedImportEnumList(), - value2.getRepeatedImportEnumList()); - assertSame(value1.getRepeatedForeignMessageList(), - value2.getRepeatedForeignMessageList()); + builder.build(); + try { + builder.build(); + fail("Should have thrown exception."); + } catch (IllegalStateException e) { + // Success. + } } - public void testRepeatedArraysAreImmutable() throws Exception { + public void testClearAfterBuildError() throws Exception { TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - builder.addRepeatedInt32(100); - builder.addRepeatedImportEnum(UnittestImport.ImportEnum.IMPORT_BAR); - builder.addRepeatedForeignMessage(ForeignMessage.getDefaultInstance()); - assertIsUnmodifiable(builder.getRepeatedInt32List()); - assertIsUnmodifiable(builder.getRepeatedImportEnumList()); - assertIsUnmodifiable(builder.getRepeatedForeignMessageList()); - assertIsUnmodifiable(builder.getRepeatedFloatList()); - - - TestAllTypes value = builder.build(); - assertIsUnmodifiable(value.getRepeatedInt32List()); - assertIsUnmodifiable(value.getRepeatedImportEnumList()); - assertIsUnmodifiable(value.getRepeatedForeignMessageList()); - assertIsUnmodifiable(value.getRepeatedFloatList()); - } - - public void testParsedMessagesAreImmutable() throws Exception { - TestAllTypes value = TestAllTypes.PARSER.parseFrom( - TestUtil.getAllSet().toByteString()); - assertIsUnmodifiable(value.getRepeatedInt32List()); - assertIsUnmodifiable(value.getRepeatedInt64List()); - assertIsUnmodifiable(value.getRepeatedUint32List()); - assertIsUnmodifiable(value.getRepeatedUint64List()); - assertIsUnmodifiable(value.getRepeatedSint32List()); - assertIsUnmodifiable(value.getRepeatedSint64List()); - assertIsUnmodifiable(value.getRepeatedFixed32List()); - assertIsUnmodifiable(value.getRepeatedFixed64List()); - assertIsUnmodifiable(value.getRepeatedSfixed32List()); - assertIsUnmodifiable(value.getRepeatedSfixed64List()); - assertIsUnmodifiable(value.getRepeatedFloatList()); - assertIsUnmodifiable(value.getRepeatedDoubleList()); - assertIsUnmodifiable(value.getRepeatedBoolList()); - assertIsUnmodifiable(value.getRepeatedStringList()); - assertIsUnmodifiable(value.getRepeatedBytesList()); - assertIsUnmodifiable(value.getRepeatedGroupList()); - assertIsUnmodifiable(value.getRepeatedNestedMessageList()); - assertIsUnmodifiable(value.getRepeatedForeignMessageList()); - assertIsUnmodifiable(value.getRepeatedImportMessageList()); - assertIsUnmodifiable(value.getRepeatedNestedEnumList()); - assertIsUnmodifiable(value.getRepeatedForeignEnumList()); - assertIsUnmodifiable(value.getRepeatedImportEnumList()); - } - - private void assertIsUnmodifiable(List<?> list) { - if (list == Collections.emptyList()) { - // OKAY -- Need to check this b/c EmptyList allows you to call clear. - } else { - try { - list.clear(); - fail("List wasn't immutable"); - } catch (UnsupportedOperationException e) { - // good - } + builder.build(); + try { + builder.clear(); + fail("Should have thrown exception."); + } catch (IllegalStateException e) { + // Success. } } @@ -404,44 +273,6 @@ public class GeneratedMessageTest extends TestCase { // We expect this exception. } } - - public void testRepeatedAppendIterateOnlyOnce() throws Exception { - // Create a Iterable that can only be iterated once. - Iterable<String> stringIterable = new Iterable<String>() { - private boolean called = false; - @Override - public Iterator<String> iterator() { - if (called) { - throw new IllegalStateException(); - } - called = true; - return Arrays.asList("one", "two", "three").iterator(); - } - }; - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - builder.addAllRepeatedString(stringIterable); - assertEquals(3, builder.getRepeatedStringCount()); - assertEquals("one", builder.getRepeatedString(0)); - assertEquals("two", builder.getRepeatedString(1)); - assertEquals("three", builder.getRepeatedString(2)); - - try { - builder.addAllRepeatedString(stringIterable); - fail("Exception was not thrown"); - } catch (IllegalStateException e) { - // We expect this exception. - } - } - - public void testMergeFromOtherRejectsNull() throws Exception { - try { - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - builder.mergeFrom((TestAllTypes) null); - fail("Exception was not thrown"); - } catch (NullPointerException e) { - // We expect this exception. - } - } public void testSettingForeignMessageUsingBuilder() throws Exception { TestAllTypes message = TestAllTypes.newBuilder() @@ -483,22 +314,11 @@ public class GeneratedMessageTest extends TestCase { assertEquals(Float.POSITIVE_INFINITY, message.getInfFloat()); assertEquals(Float.NEGATIVE_INFINITY, message.getNegInfFloat()); assertTrue(Float.isNaN(message.getNanFloat())); - assertEquals("? ? ?? ?? ??? ??/ ??-", message.getCppTrigraph()); - } - - public void testClear() throws Exception { - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - TestUtil.assertClear(builder); - TestUtil.setAllFields(builder); - builder.clear(); - TestUtil.assertClear(builder); } public void testReflectionGetters() throws Exception { TestAllTypes.Builder builder = TestAllTypes.newBuilder(); TestUtil.setAllFields(builder); - reflectionTester.assertAllFieldsSetViaReflection(builder); - TestAllTypes message = builder.build(); reflectionTester.assertAllFieldsSetViaReflection(message); } @@ -506,8 +326,6 @@ public class GeneratedMessageTest extends TestCase { public void testReflectionSetters() throws Exception { TestAllTypes.Builder builder = TestAllTypes.newBuilder(); reflectionTester.setAllFieldsViaReflection(builder); - TestUtil.assertAllFieldsSet(builder); - TestAllTypes message = builder.build(); TestUtil.assertAllFieldsSet(message); } @@ -521,8 +339,6 @@ public class GeneratedMessageTest extends TestCase { TestAllTypes.Builder builder = TestAllTypes.newBuilder(); reflectionTester.setAllFieldsViaReflection(builder); reflectionTester.modifyRepeatedFieldsViaReflection(builder); - TestUtil.assertRepeatedFieldsModified(builder); - TestAllTypes message = builder.build(); TestUtil.assertRepeatedFieldsModified(message); } @@ -539,34 +355,6 @@ public class GeneratedMessageTest extends TestCase { TestAllTypes.newBuilder().build()); } - public void testReflectionGetOneof() throws Exception { - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - reflectionTester.setAllFieldsViaReflection(builder); - Descriptors.OneofDescriptor oneof = - TestAllTypes.getDescriptor().getOneofs().get(0); - Descriptors.FieldDescriptor field = - TestAllTypes.getDescriptor().findFieldByName("oneof_bytes"); - assertSame(field, builder.getOneofFieldDescriptor(oneof)); - - TestAllTypes message = builder.build(); - assertSame(field, message.getOneofFieldDescriptor(oneof)); - } - - public void testReflectionClearOneof() throws Exception { - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - reflectionTester.setAllFieldsViaReflection(builder); - Descriptors.OneofDescriptor oneof = - TestAllTypes.getDescriptor().getOneofs().get(0); - Descriptors.FieldDescriptor field = - TestAllTypes.getDescriptor().findFieldByName("oneof_bytes"); - - assertTrue(builder.hasOneof(oneof)); - assertTrue(builder.hasField(field)); - builder.clearOneof(oneof); - assertFalse(builder.hasOneof(oneof)); - assertFalse(builder.hasField(field)); - } - public void testEnumInterface() throws Exception { assertTrue(TestAllTypes.getDefaultInstance().getDefaultNestedEnum() instanceof ProtocolMessageEnum); @@ -603,7 +391,7 @@ public class GeneratedMessageTest extends TestCase { new TestUtil.ReflectionTester(TestAllExtensions.getDescriptor(), TestUtil.getExtensionRegistry()); - public void testExtensionMessageOrBuilder() throws Exception { + public void testExtensionAccessors() throws Exception { TestAllExtensions.Builder builder = TestAllExtensions.newBuilder(); TestUtil.setAllExtensions(builder); TestAllExtensions message = builder.build(); @@ -626,8 +414,6 @@ public class GeneratedMessageTest extends TestCase { public void testExtensionReflectionGetters() throws Exception { TestAllExtensions.Builder builder = TestAllExtensions.newBuilder(); TestUtil.setAllExtensions(builder); - extensionsReflectionTester.assertAllFieldsSetViaReflection(builder); - TestAllExtensions message = builder.build(); extensionsReflectionTester.assertAllFieldsSetViaReflection(message); } @@ -635,8 +421,6 @@ public class GeneratedMessageTest extends TestCase { public void testExtensionReflectionSetters() throws Exception { TestAllExtensions.Builder builder = TestAllExtensions.newBuilder(); extensionsReflectionTester.setAllFieldsViaReflection(builder); - TestUtil.assertAllExtensionsSet(builder); - TestAllExtensions message = builder.build(); TestUtil.assertAllExtensionsSet(message); } @@ -650,8 +434,6 @@ public class GeneratedMessageTest extends TestCase { TestAllExtensions.Builder builder = TestAllExtensions.newBuilder(); extensionsReflectionTester.setAllFieldsViaReflection(builder); extensionsReflectionTester.modifyRepeatedFieldsViaReflection(builder); - TestUtil.assertRepeatedExtensionsModified(builder); - TestAllExtensions message = builder.build(); TestUtil.assertRepeatedExtensionsModified(message); } @@ -709,11 +491,9 @@ public class GeneratedMessageTest extends TestCase { // lite fields directly since they are implemented exactly the same as // regular fields. - public void testLiteExtensionMessageOrBuilder() throws Exception { + public void testLiteExtensionAccessors() throws Exception { TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.newBuilder(); TestUtil.setAllExtensions(builder); - TestUtil.assertAllExtensionsSet(builder); - TestAllExtensionsLite message = builder.build(); TestUtil.assertAllExtensionsSet(message); } @@ -722,8 +502,6 @@ public class GeneratedMessageTest extends TestCase { TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.newBuilder(); TestUtil.setAllExtensions(builder); TestUtil.modifyRepeatedExtensions(builder); - TestUtil.assertRepeatedExtensionsModified(builder); - TestAllExtensionsLite message = builder.build(); TestUtil.assertRepeatedExtensionsModified(message); } @@ -768,15 +546,6 @@ public class GeneratedMessageTest extends TestCase { // ================================================================= // multiple_files_test - // Test that custom options of an file level enum are properly initialized. - // This test needs to be put before any other access to MultipleFilesTestProto - // or messages defined in multiple_files_test.proto because the class loading - // order affects initialization process of custom options. - public void testEnumValueOptionsInMultipleFilesMode() throws Exception { - assertEquals(12345, EnumWithNoOuter.FOO.getValueDescriptor().getOptions() - .getExtension(MultipleFilesTestProto.enumValueOption).intValue()); - } - public void testMultipleFilesOption() throws Exception { // We mostly just want to check that things compile. MessageWithNoOuter message = @@ -840,7 +609,6 @@ public class GeneratedMessageTest extends TestCase { TestAllTypes.Builder builder = TestAllTypes.newBuilder(); TestUtil.setAllFields(builder); TestAllTypes message = builder.build(); - TestUtil.assertAllFieldsSet(message); TestUtil.assertAllFieldsSet(message.toBuilder().build()); } @@ -875,641 +643,7 @@ public class GeneratedMessageTest extends TestCase { UnittestProto.TestRecursiveMessage message = UnittestProto.TestRecursiveMessage.getDefaultInstance(); assertTrue(message != null); - assertNotNull(message.getA()); + assertTrue(message.getA() != null); assertTrue(message.getA() == message); } - - public void testSerialize() throws Exception { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - TestUtil.setAllFields(builder); - TestAllTypes expected = builder.build(); - ObjectOutputStream out = new ObjectOutputStream(baos); - try { - out.writeObject(expected); - } finally { - out.close(); - } - ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); - ObjectInputStream in = new ObjectInputStream(bais); - TestAllTypes actual = (TestAllTypes) in.readObject(); - assertEquals(expected, actual); - } - - public void testSerializePartial() throws Exception { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - TestAllTypes expected = builder.buildPartial(); - ObjectOutputStream out = new ObjectOutputStream(baos); - try { - out.writeObject(expected); - } finally { - out.close(); - } - ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); - ObjectInputStream in = new ObjectInputStream(bais); - TestAllTypes actual = (TestAllTypes) in.readObject(); - assertEquals(expected, actual); - } - - public void testEnumValues() { - assertEquals( - TestAllTypes.NestedEnum.BAR.getNumber(), - TestAllTypes.NestedEnum.BAR_VALUE); - assertEquals( - TestAllTypes.NestedEnum.BAZ.getNumber(), - TestAllTypes.NestedEnum.BAZ_VALUE); - assertEquals( - TestAllTypes.NestedEnum.FOO.getNumber(), - TestAllTypes.NestedEnum.FOO_VALUE); - } - - public void testNonNestedExtensionInitialization() { - assertTrue(NonNestedExtension.nonNestedExtension - .getMessageDefaultInstance() instanceof MyNonNestedExtension); - assertEquals("nonNestedExtension", - NonNestedExtension.nonNestedExtension.getDescriptor().getName()); - } - - public void testNestedExtensionInitialization() { - assertTrue(MyNestedExtension.recursiveExtension.getMessageDefaultInstance() - instanceof MessageToBeExtended); - assertEquals("recursiveExtension", - MyNestedExtension.recursiveExtension.getDescriptor().getName()); - } - - public void testNonNestedExtensionLiteInitialization() { - assertTrue(NonNestedExtensionLite.nonNestedExtensionLite - .getMessageDefaultInstance() instanceof MyNonNestedExtensionLite); - } - - public void testNestedExtensionLiteInitialization() { - assertTrue(MyNestedExtensionLite.recursiveExtensionLite - .getMessageDefaultInstance() instanceof MessageLiteToBeExtended); - } - - public void testInvalidations() throws Exception { - GeneratedMessage.enableAlwaysUseFieldBuildersForTesting(); - TestAllTypes.NestedMessage nestedMessage1 = - TestAllTypes.NestedMessage.newBuilder().build(); - TestAllTypes.NestedMessage nestedMessage2 = - TestAllTypes.NestedMessage.newBuilder().build(); - - // Set all three flavors (enum, primitive, message and singular/repeated) - // and verify no invalidations fired - TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent(); - - TestAllTypes.Builder builder = (TestAllTypes.Builder) - ((GeneratedMessage) TestAllTypes.getDefaultInstance()). - newBuilderForType(mockParent); - builder.setOptionalInt32(1); - builder.setOptionalNestedEnum(TestAllTypes.NestedEnum.BAR); - builder.setOptionalNestedMessage(nestedMessage1); - builder.addRepeatedInt32(1); - builder.addRepeatedNestedEnum(TestAllTypes.NestedEnum.BAR); - builder.addRepeatedNestedMessage(nestedMessage1); - assertEquals(0, mockParent.getInvalidationCount()); - - // Now tell it we want changes and make sure it's only fired once - // And do this for each flavor - - // primitive single - builder.buildPartial(); - builder.setOptionalInt32(2); - builder.setOptionalInt32(3); - assertEquals(1, mockParent.getInvalidationCount()); - - // enum single - builder.buildPartial(); - builder.setOptionalNestedEnum(TestAllTypes.NestedEnum.BAZ); - builder.setOptionalNestedEnum(TestAllTypes.NestedEnum.BAR); - assertEquals(2, mockParent.getInvalidationCount()); - - // message single - builder.buildPartial(); - builder.setOptionalNestedMessage(nestedMessage2); - builder.setOptionalNestedMessage(nestedMessage1); - assertEquals(3, mockParent.getInvalidationCount()); - - // primitive repeated - builder.buildPartial(); - builder.addRepeatedInt32(2); - builder.addRepeatedInt32(3); - assertEquals(4, mockParent.getInvalidationCount()); - - // enum repeated - builder.buildPartial(); - builder.addRepeatedNestedEnum(TestAllTypes.NestedEnum.BAZ); - builder.addRepeatedNestedEnum(TestAllTypes.NestedEnum.BAZ); - assertEquals(5, mockParent.getInvalidationCount()); - - // message repeated - builder.buildPartial(); - builder.addRepeatedNestedMessage(nestedMessage2); - builder.addRepeatedNestedMessage(nestedMessage1); - assertEquals(6, mockParent.getInvalidationCount()); - - } - - public void testInvalidations_Extensions() throws Exception { - TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent(); - - TestAllExtensions.Builder builder = (TestAllExtensions.Builder) - ((GeneratedMessage) TestAllExtensions.getDefaultInstance()). - newBuilderForType(mockParent); - - builder.addExtension(UnittestProto.repeatedInt32Extension, 1); - builder.setExtension(UnittestProto.repeatedInt32Extension, 0, 2); - builder.clearExtension(UnittestProto.repeatedInt32Extension); - assertEquals(0, mockParent.getInvalidationCount()); - - // Now tell it we want changes and make sure it's only fired once - builder.buildPartial(); - builder.addExtension(UnittestProto.repeatedInt32Extension, 2); - builder.addExtension(UnittestProto.repeatedInt32Extension, 3); - assertEquals(1, mockParent.getInvalidationCount()); - - builder.buildPartial(); - builder.setExtension(UnittestProto.repeatedInt32Extension, 0, 4); - builder.setExtension(UnittestProto.repeatedInt32Extension, 1, 5); - assertEquals(2, mockParent.getInvalidationCount()); - - builder.buildPartial(); - builder.clearExtension(UnittestProto.repeatedInt32Extension); - builder.clearExtension(UnittestProto.repeatedInt32Extension); - assertEquals(3, mockParent.getInvalidationCount()); - } - - public void testBaseMessageOrBuilder() { - // Mostly just makes sure the base interface exists and has some methods. - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - TestAllTypes message = builder.buildPartial(); - TestAllTypesOrBuilder builderAsInterface = (TestAllTypesOrBuilder) builder; - TestAllTypesOrBuilder messageAsInterface = (TestAllTypesOrBuilder) message; - - assertEquals( - messageAsInterface.getDefaultBool(), - messageAsInterface.getDefaultBool()); - assertEquals( - messageAsInterface.getOptionalDouble(), - messageAsInterface.getOptionalDouble()); - } - - public void testMessageOrBuilderGetters() { - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - - // single fields - assertSame(ForeignMessage.getDefaultInstance(), - builder.getOptionalForeignMessageOrBuilder()); - ForeignMessage.Builder subBuilder = - builder.getOptionalForeignMessageBuilder(); - assertSame(subBuilder, builder.getOptionalForeignMessageOrBuilder()); - - // repeated fields - ForeignMessage m0 = ForeignMessage.newBuilder().buildPartial(); - ForeignMessage m1 = ForeignMessage.newBuilder().buildPartial(); - ForeignMessage m2 = ForeignMessage.newBuilder().buildPartial(); - builder.addRepeatedForeignMessage(m0); - builder.addRepeatedForeignMessage(m1); - builder.addRepeatedForeignMessage(m2); - assertSame(m0, builder.getRepeatedForeignMessageOrBuilder(0)); - assertSame(m1, builder.getRepeatedForeignMessageOrBuilder(1)); - assertSame(m2, builder.getRepeatedForeignMessageOrBuilder(2)); - ForeignMessage.Builder b0 = builder.getRepeatedForeignMessageBuilder(0); - ForeignMessage.Builder b1 = builder.getRepeatedForeignMessageBuilder(1); - assertSame(b0, builder.getRepeatedForeignMessageOrBuilder(0)); - assertSame(b1, builder.getRepeatedForeignMessageOrBuilder(1)); - assertSame(m2, builder.getRepeatedForeignMessageOrBuilder(2)); - - List<? extends ForeignMessageOrBuilder> messageOrBuilderList = - builder.getRepeatedForeignMessageOrBuilderList(); - assertSame(b0, messageOrBuilderList.get(0)); - assertSame(b1, messageOrBuilderList.get(1)); - assertSame(m2, messageOrBuilderList.get(2)); - } - - public void testGetFieldBuilder() { - Descriptor descriptor = TestAllTypes.getDescriptor(); - - FieldDescriptor fieldDescriptor = - descriptor.findFieldByName("optional_nested_message"); - FieldDescriptor foreignFieldDescriptor = - descriptor.findFieldByName("optional_foreign_message"); - FieldDescriptor importFieldDescriptor = - descriptor.findFieldByName("optional_import_message"); - - // Mutate the message with new field builder - // Mutate nested message - TestAllTypes.Builder builder1 = TestAllTypes.newBuilder(); - Message.Builder fieldBuilder1 = builder1.newBuilderForField(fieldDescriptor) - .mergeFrom((Message) builder1.getField(fieldDescriptor)); - FieldDescriptor subFieldDescriptor1 = - fieldBuilder1.getDescriptorForType().findFieldByName("bb"); - fieldBuilder1.setField(subFieldDescriptor1, 1); - builder1.setField(fieldDescriptor, fieldBuilder1.build()); - - // Mutate foreign message - Message.Builder foreignFieldBuilder1 = builder1.newBuilderForField( - foreignFieldDescriptor) - .mergeFrom((Message) builder1.getField(foreignFieldDescriptor)); - FieldDescriptor subForeignFieldDescriptor1 = - foreignFieldBuilder1.getDescriptorForType().findFieldByName("c"); - foreignFieldBuilder1.setField(subForeignFieldDescriptor1, 2); - builder1.setField(foreignFieldDescriptor, foreignFieldBuilder1.build()); - - // Mutate import message - Message.Builder importFieldBuilder1 = builder1.newBuilderForField( - importFieldDescriptor) - .mergeFrom((Message) builder1.getField(importFieldDescriptor)); - FieldDescriptor subImportFieldDescriptor1 = - importFieldBuilder1.getDescriptorForType().findFieldByName("d"); - importFieldBuilder1.setField(subImportFieldDescriptor1, 3); - builder1.setField(importFieldDescriptor, importFieldBuilder1.build()); - - Message newMessage1 = builder1.build(); - - // Mutate the message with existing field builder - // Mutate nested message - TestAllTypes.Builder builder2 = TestAllTypes.newBuilder(); - Message.Builder fieldBuilder2 = builder2.getFieldBuilder(fieldDescriptor); - FieldDescriptor subFieldDescriptor2 = - fieldBuilder2.getDescriptorForType().findFieldByName("bb"); - fieldBuilder2.setField(subFieldDescriptor2, 1); - builder2.setField(fieldDescriptor, fieldBuilder2.build()); - - // Mutate foreign message - Message.Builder foreignFieldBuilder2 = builder2.newBuilderForField( - foreignFieldDescriptor) - .mergeFrom((Message) builder2.getField(foreignFieldDescriptor)); - FieldDescriptor subForeignFieldDescriptor2 = - foreignFieldBuilder2.getDescriptorForType().findFieldByName("c"); - foreignFieldBuilder2.setField(subForeignFieldDescriptor2, 2); - builder2.setField(foreignFieldDescriptor, foreignFieldBuilder2.build()); - - // Mutate import message - Message.Builder importFieldBuilder2 = builder2.newBuilderForField( - importFieldDescriptor) - .mergeFrom((Message) builder2.getField(importFieldDescriptor)); - FieldDescriptor subImportFieldDescriptor2 = - importFieldBuilder2.getDescriptorForType().findFieldByName("d"); - importFieldBuilder2.setField(subImportFieldDescriptor2, 3); - builder2.setField(importFieldDescriptor, importFieldBuilder2.build()); - - Message newMessage2 = builder2.build(); - - // These two messages should be equal. - assertEquals(newMessage1, newMessage2); - } - - public void testGetFieldBuilderWithInitializedValue() { - Descriptor descriptor = TestAllTypes.getDescriptor(); - FieldDescriptor fieldDescriptor = - descriptor.findFieldByName("optional_nested_message"); - - // Before setting field, builder is initialized by default value. - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - NestedMessage.Builder fieldBuilder = - (NestedMessage.Builder) builder.getFieldBuilder(fieldDescriptor); - assertEquals(0, fieldBuilder.getBb()); - - // Setting field value with new field builder instance. - builder = TestAllTypes.newBuilder(); - NestedMessage.Builder newFieldBuilder = - builder.getOptionalNestedMessageBuilder(); - newFieldBuilder.setBb(2); - // Then get the field builder instance by getFieldBuilder(). - fieldBuilder = - (NestedMessage.Builder) builder.getFieldBuilder(fieldDescriptor); - // It should contain new value. - assertEquals(2, fieldBuilder.getBb()); - // These two builder should be equal. - assertSame(fieldBuilder, newFieldBuilder); - } - - public void testGetFieldBuilderNotSupportedException() { - Descriptor descriptor = TestAllTypes.getDescriptor(); - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - try { - builder.getFieldBuilder(descriptor.findFieldByName("optional_int32")); - fail("Exception was not thrown"); - } catch (UnsupportedOperationException e) { - // We expect this exception. - } - try { - builder.getFieldBuilder( - descriptor.findFieldByName("optional_nested_enum")); - fail("Exception was not thrown"); - } catch (UnsupportedOperationException e) { - // We expect this exception. - } - try { - builder.getFieldBuilder(descriptor.findFieldByName("repeated_int32")); - fail("Exception was not thrown"); - } catch (UnsupportedOperationException e) { - // We expect this exception. - } - try { - builder.getFieldBuilder( - descriptor.findFieldByName("repeated_nested_enum")); - fail("Exception was not thrown"); - } catch (UnsupportedOperationException e) { - // We expect this exception. - } - try { - builder.getFieldBuilder( - descriptor.findFieldByName("repeated_nested_message")); - fail("Exception was not thrown"); - } catch (UnsupportedOperationException e) { - // We expect this exception. - } - } - - // Test that when the default outer class name conflicts with another type - // defined in the proto the compiler will append a suffix to avoid the - // conflict. - public void testConflictingOuterClassName() { - // We just need to make sure we can refer to the outer class with the - // expected name. There is nothing else to test. - OuterClassNameTestOuterClass.OuterClassNameTest message = - OuterClassNameTestOuterClass.OuterClassNameTest.newBuilder().build(); - assertTrue(message.getDescriptorForType() == - OuterClassNameTestOuterClass.OuterClassNameTest.getDescriptor()); - - OuterClassNameTest2OuterClass.TestMessage2.NestedMessage.OuterClassNameTest2 - message2 = OuterClassNameTest2OuterClass.TestMessage2.NestedMessage - .OuterClassNameTest2.newBuilder().build(); - assertEquals(0, message2.getSerializedSize()); - - OuterClassNameTest3OuterClass.TestMessage3.NestedMessage.OuterClassNameTest3 - enumValue = OuterClassNameTest3OuterClass.TestMessage3.NestedMessage - .OuterClassNameTest3.DUMMY_VALUE; - assertEquals(1, enumValue.getNumber()); - } - - // ================================================================= - // oneof generated code test - public void testOneofEnumCase() throws Exception { - TestOneof2 message = TestOneof2.newBuilder() - .setFooInt(123).setFooString("foo").setFooCord("bar").build(); - TestUtil.assertAtMostOneFieldSetOneof(message); - } - - public void testClearOneof() throws Exception { - TestOneof2.Builder builder = TestOneof2.newBuilder().setFooInt(123); - assertEquals(TestOneof2.FooCase.FOO_INT, builder.getFooCase()); - builder.clearFoo(); - assertEquals(TestOneof2.FooCase.FOO_NOT_SET, builder.getFooCase()); - } - - public void testSetOneofClearsOthers() throws Exception { - TestOneof2.Builder builder = TestOneof2.newBuilder(); - TestOneof2 message = - builder.setFooInt(123).setFooString("foo").buildPartial(); - assertTrue(message.hasFooString()); - TestUtil.assertAtMostOneFieldSetOneof(message); - - message = builder.setFooCord("bar").buildPartial(); - assertTrue(message.hasFooCord()); - TestUtil.assertAtMostOneFieldSetOneof(message); - - message = builder.setFooStringPiece("baz").buildPartial(); - assertTrue(message.hasFooStringPiece()); - TestUtil.assertAtMostOneFieldSetOneof(message); - - message = builder.setFooBytes(TestUtil.toBytes("qux")).buildPartial(); - assertTrue(message.hasFooBytes()); - TestUtil.assertAtMostOneFieldSetOneof(message); - - message = builder.setFooEnum(TestOneof2.NestedEnum.FOO).buildPartial(); - assertTrue(message.hasFooEnum()); - TestUtil.assertAtMostOneFieldSetOneof(message); - - message = builder.setFooMessage( - TestOneof2.NestedMessage.newBuilder().setQuxInt(234).build()).buildPartial(); - assertTrue(message.hasFooMessage()); - TestUtil.assertAtMostOneFieldSetOneof(message); - - message = builder.setFooInt(123).buildPartial(); - assertTrue(message.hasFooInt()); - TestUtil.assertAtMostOneFieldSetOneof(message); - } - - public void testOneofTypes() throws Exception { - // Primitive - { - TestOneof2.Builder builder = TestOneof2.newBuilder(); - assertEquals(builder.getFooInt(), 0); - assertFalse(builder.hasFooInt()); - assertTrue(builder.setFooInt(123).hasFooInt()); - assertEquals(builder.getFooInt(), 123); - TestOneof2 message = builder.buildPartial(); - assertTrue(message.hasFooInt()); - assertEquals(message.getFooInt(), 123); - - assertFalse(builder.clearFooInt().hasFooInt()); - TestOneof2 message2 = builder.build(); - assertFalse(message2.hasFooInt()); - assertEquals(message2.getFooInt(), 0); - } - - // Enum - { - TestOneof2.Builder builder = TestOneof2.newBuilder(); - assertEquals(builder.getFooEnum(), TestOneof2.NestedEnum.FOO); - assertTrue(builder.setFooEnum(TestOneof2.NestedEnum.BAR).hasFooEnum()); - assertEquals(builder.getFooEnum(), TestOneof2.NestedEnum.BAR); - TestOneof2 message = builder.buildPartial(); - assertTrue(message.hasFooEnum()); - assertEquals(message.getFooEnum(), TestOneof2.NestedEnum.BAR); - - assertFalse(builder.clearFooEnum().hasFooEnum()); - TestOneof2 message2 = builder.build(); - assertFalse(message2.hasFooEnum()); - assertEquals(message2.getFooEnum(), TestOneof2.NestedEnum.FOO); - } - - // String - { - TestOneof2.Builder builder = TestOneof2.newBuilder(); - assertEquals(builder.getFooString(), ""); - builder.setFooString("foo"); - assertTrue(builder.hasFooString()); - assertEquals(builder.getFooString(), "foo"); - TestOneof2 message = builder.buildPartial(); - assertTrue(message.hasFooString()); - assertEquals(message.getFooString(), "foo"); - assertEquals(message.getFooStringBytes(), TestUtil.toBytes("foo")); - - assertFalse(builder.clearFooString().hasFooString()); - TestOneof2 message2 = builder.buildPartial(); - assertFalse(message2.hasFooString()); - assertEquals(message2.getFooString(), ""); - assertEquals(message2.getFooStringBytes(), TestUtil.toBytes("")); - - // Get method should not change the oneof value. - builder.setFooInt(123); - assertEquals(builder.getFooString(), ""); - assertEquals(builder.getFooStringBytes(), TestUtil.toBytes("")); - assertEquals(123, builder.getFooInt()); - - message = builder.build(); - assertEquals(message.getFooString(), ""); - assertEquals(message.getFooStringBytes(), TestUtil.toBytes("")); - assertEquals(123, message.getFooInt()); - } - - // Cord - { - TestOneof2.Builder builder = TestOneof2.newBuilder(); - assertEquals(builder.getFooCord(), ""); - builder.setFooCord("foo"); - assertTrue(builder.hasFooCord()); - assertEquals(builder.getFooCord(), "foo"); - TestOneof2 message = builder.buildPartial(); - assertTrue(message.hasFooCord()); - assertEquals(message.getFooCord(), "foo"); - assertEquals(message.getFooCordBytes(), TestUtil.toBytes("foo")); - - assertFalse(builder.clearFooCord().hasFooCord()); - TestOneof2 message2 = builder.build(); - assertFalse(message2.hasFooCord()); - assertEquals(message2.getFooCord(), ""); - assertEquals(message2.getFooCordBytes(), TestUtil.toBytes("")); - } - - // StringPiece - { - TestOneof2.Builder builder = TestOneof2.newBuilder(); - assertEquals(builder.getFooStringPiece(), ""); - builder.setFooStringPiece("foo"); - assertTrue(builder.hasFooStringPiece()); - assertEquals(builder.getFooStringPiece(), "foo"); - TestOneof2 message = builder.buildPartial(); - assertTrue(message.hasFooStringPiece()); - assertEquals(message.getFooStringPiece(), "foo"); - assertEquals(message.getFooStringPieceBytes(), TestUtil.toBytes("foo")); - - assertFalse(builder.clearFooStringPiece().hasFooStringPiece()); - TestOneof2 message2 = builder.build(); - assertFalse(message2.hasFooStringPiece()); - assertEquals(message2.getFooStringPiece(), ""); - assertEquals(message2.getFooStringPieceBytes(), TestUtil.toBytes("")); - } - - // Message - { - // set - TestOneof2.Builder builder = TestOneof2.newBuilder(); - assertEquals(builder.getFooMessage().getQuxInt(), 0); - builder.setFooMessage( - TestOneof2.NestedMessage.newBuilder().setQuxInt(234).build()); - assertTrue(builder.hasFooMessage()); - assertEquals(builder.getFooMessage().getQuxInt(), 234); - TestOneof2 message = builder.buildPartial(); - assertTrue(message.hasFooMessage()); - assertEquals(message.getFooMessage().getQuxInt(), 234); - - // clear - assertFalse(builder.clearFooMessage().hasFooString()); - message = builder.build(); - assertFalse(message.hasFooMessage()); - assertEquals(message.getFooMessage().getQuxInt(), 0); - - // nested builder - builder = TestOneof2.newBuilder(); - assertSame(builder.getFooMessageOrBuilder(), - TestOneof2.NestedMessage.getDefaultInstance()); - assertFalse(builder.hasFooMessage()); - builder.getFooMessageBuilder().setQuxInt(123); - assertTrue(builder.hasFooMessage()); - assertEquals(builder.getFooMessage().getQuxInt(), 123); - message = builder.build(); - assertTrue(message.hasFooMessage()); - assertEquals(message.getFooMessage().getQuxInt(), 123); - } - - // LazyMessage is tested in LazyMessageLiteTest.java - } - - public void testOneofMerge() throws Exception { - // Primitive Type - { - TestOneof2.Builder builder = TestOneof2.newBuilder(); - TestOneof2 message = builder.setFooInt(123).build(); - TestOneof2 message2 = TestOneof2.newBuilder().mergeFrom(message).build(); - assertTrue(message2.hasFooInt()); - assertEquals(message2.getFooInt(), 123); - } - - // String - { - TestOneof2.Builder builder = TestOneof2.newBuilder(); - TestOneof2 message = builder.setFooString("foo").build(); - TestOneof2 message2 = TestOneof2.newBuilder().mergeFrom(message).build(); - assertTrue(message2.hasFooString()); - assertEquals(message2.getFooString(), "foo"); - } - - // Enum - { - TestOneof2.Builder builder = TestOneof2.newBuilder(); - TestOneof2 message = builder.setFooEnum(TestOneof2.NestedEnum.BAR).build(); - TestOneof2 message2 = TestOneof2.newBuilder().mergeFrom(message).build(); - assertTrue(message2.hasFooEnum()); - assertEquals(message2.getFooEnum(), TestOneof2.NestedEnum.BAR); - } - - // Message - { - TestOneof2.Builder builder = TestOneof2.newBuilder(); - TestOneof2 message = builder.setFooMessage( - TestOneof2.NestedMessage.newBuilder().setQuxInt(234).build()).build(); - TestOneof2 message2 = TestOneof2.newBuilder().mergeFrom(message).build(); - assertTrue(message2.hasFooMessage()); - assertEquals(message2.getFooMessage().getQuxInt(), 234); - } - } - - public void testOneofSerialization() throws Exception { - // Primitive Type - { - TestOneof2.Builder builder = TestOneof2.newBuilder(); - TestOneof2 message = builder.setFooInt(123).build(); - ByteString serialized = message.toByteString(); - TestOneof2 message2 = TestOneof2.parseFrom(serialized); - assertTrue(message2.hasFooInt()); - assertEquals(message2.getFooInt(), 123); - } - - // String - { - TestOneof2.Builder builder = TestOneof2.newBuilder(); - TestOneof2 message = builder.setFooString("foo").build(); - ByteString serialized = message.toByteString(); - TestOneof2 message2 = TestOneof2.parseFrom(serialized); - assertTrue(message2.hasFooString()); - assertEquals(message2.getFooString(), "foo"); - } - - // Enum - { - TestOneof2.Builder builder = TestOneof2.newBuilder(); - TestOneof2 message = builder.setFooEnum(TestOneof2.NestedEnum.BAR).build(); - ByteString serialized = message.toByteString(); - TestOneof2 message2 = TestOneof2.parseFrom(serialized); - assertTrue(message2.hasFooEnum()); - assertEquals(message2.getFooEnum(), TestOneof2.NestedEnum.BAR); - } - - // Message - { - TestOneof2.Builder builder = TestOneof2.newBuilder(); - TestOneof2 message = builder.setFooMessage( - TestOneof2.NestedMessage.newBuilder().setQuxInt(234).build()).build(); - ByteString serialized = message.toByteString(); - TestOneof2 message2 = TestOneof2.parseFrom(serialized); - assertTrue(message2.hasFooMessage()); - assertEquals(message2.getFooMessage().getQuxInt(), 234); - } - } } diff --git a/java/src/test/java/com/google/protobuf/IsValidUtf8Test.java b/java/src/test/java/com/google/protobuf/IsValidUtf8Test.java deleted file mode 100644 index 89b6451..0000000 --- a/java/src/test/java/com/google/protobuf/IsValidUtf8Test.java +++ /dev/null @@ -1,180 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import com.google.protobuf.IsValidUtf8TestUtil.Shard; - -import junit.framework.TestCase; - -import java.io.UnsupportedEncodingException; - -/** - * Tests cases for {@link ByteString#isValidUtf8()}. This includes three - * brute force tests that actually test every permutation of one byte, two byte, - * and three byte sequences to ensure that the method produces the right result - * for every possible byte encoding where "right" means it's consistent with - * java's UTF-8 string encoding/decoding such that the method returns true for - * any sequence that will round trip when converted to a String and then back to - * bytes and will return false for any sequence that will not round trip. - * See also {@link IsValidUtf8FourByteTest}. It also includes some - * other more targeted tests. - * - * @author jonp@google.com (Jon Perlow) - * @author martinrb@google.com (Martin Buchholz) - */ -public class IsValidUtf8Test extends TestCase { - - /** - * Tests that round tripping of all two byte permutations work. - */ - public void testIsValidUtf8_1Byte() throws UnsupportedEncodingException { - IsValidUtf8TestUtil.testBytes(1, - IsValidUtf8TestUtil.EXPECTED_ONE_BYTE_ROUNDTRIPPABLE_COUNT); - } - - /** - * Tests that round tripping of all two byte permutations work. - */ - public void testIsValidUtf8_2Bytes() throws UnsupportedEncodingException { - IsValidUtf8TestUtil.testBytes(2, - IsValidUtf8TestUtil.EXPECTED_TWO_BYTE_ROUNDTRIPPABLE_COUNT); - } - - /** - * Tests that round tripping of all three byte permutations work. - */ - public void testIsValidUtf8_3Bytes() throws UnsupportedEncodingException { - IsValidUtf8TestUtil.testBytes(3, - IsValidUtf8TestUtil.EXPECTED_THREE_BYTE_ROUNDTRIPPABLE_COUNT); - } - - /** - * Tests that round tripping of a sample of four byte permutations work. - * All permutations are prohibitively expensive to test for automated runs; - * {@link IsValidUtf8FourByteTest} is used for full coverage. This method - * tests specific four-byte cases. - */ - public void testIsValidUtf8_4BytesSamples() - throws UnsupportedEncodingException { - // Valid 4 byte. - assertValidUtf8(0xF0, 0xA4, 0xAD, 0xA2); - - // Bad trailing bytes - assertInvalidUtf8(0xF0, 0xA4, 0xAD, 0x7F); - assertInvalidUtf8(0xF0, 0xA4, 0xAD, 0xC0); - - // Special cases for byte2 - assertInvalidUtf8(0xF0, 0x8F, 0xAD, 0xA2); - assertInvalidUtf8(0xF4, 0x90, 0xAD, 0xA2); - } - - /** - * Tests some hard-coded test cases. - */ - public void testSomeSequences() { - // Empty - assertTrue(asBytes("").isValidUtf8()); - - // One-byte characters, including control characters - assertTrue(asBytes("\u0000abc\u007f").isValidUtf8()); - - // Two-byte characters - assertTrue(asBytes("\u00a2\u00a2").isValidUtf8()); - - // Three-byte characters - assertTrue(asBytes("\u020ac\u020ac").isValidUtf8()); - - // Four-byte characters - assertTrue(asBytes("\u024B62\u024B62").isValidUtf8()); - - // Mixed string - assertTrue( - asBytes("a\u020ac\u00a2b\\u024B62u020acc\u00a2de\u024B62") - .isValidUtf8()); - - // Not a valid string - assertInvalidUtf8(-1, 0, -1, 0); - } - - private byte[] toByteArray(int... bytes) { - byte[] realBytes = new byte[bytes.length]; - for (int i = 0; i < bytes.length; i++) { - realBytes[i] = (byte) bytes[i]; - } - return realBytes; - } - - private ByteString toByteString(int... bytes) { - return ByteString.copyFrom(toByteArray(bytes)); - } - - private void assertValidUtf8(int[] bytes, boolean not) { - byte[] realBytes = toByteArray(bytes); - assertTrue(not ^ Utf8.isValidUtf8(realBytes)); - assertTrue(not ^ Utf8.isValidUtf8(realBytes, 0, bytes.length)); - ByteString lit = ByteString.copyFrom(realBytes); - ByteString sub = lit.substring(0, bytes.length); - assertTrue(not ^ lit.isValidUtf8()); - assertTrue(not ^ sub.isValidUtf8()); - ByteString[] ropes = { - RopeByteString.newInstanceForTest(ByteString.EMPTY, lit), - RopeByteString.newInstanceForTest(ByteString.EMPTY, sub), - RopeByteString.newInstanceForTest(lit, ByteString.EMPTY), - RopeByteString.newInstanceForTest(sub, ByteString.EMPTY), - RopeByteString.newInstanceForTest(sub, lit) - }; - for (ByteString rope : ropes) { - assertTrue(not ^ rope.isValidUtf8()); - } - } - - private void assertValidUtf8(int... bytes) { - assertValidUtf8(bytes, false); - } - - private void assertInvalidUtf8(int... bytes) { - assertValidUtf8(bytes, true); - } - - private static ByteString asBytes(String s) { - return ByteString.copyFromUtf8(s); - } - - public void testShardsHaveExpectedRoundTrippables() { - // A sanity check. - int actual = 0; - for (Shard shard : IsValidUtf8TestUtil.FOUR_BYTE_SHARDS) { - actual += shard.expected; - } - assertEquals(IsValidUtf8TestUtil.EXPECTED_FOUR_BYTE_ROUNDTRIPPABLE_COUNT, - actual); - } -} diff --git a/java/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java b/java/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java deleted file mode 100644 index f41595e..0000000 --- a/java/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java +++ /dev/null @@ -1,421 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import static junit.framework.Assert.*; - -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; -import java.util.logging.Logger; -import java.nio.charset.CharsetDecoder; -import java.nio.charset.Charset; -import java.nio.charset.CodingErrorAction; -import java.nio.charset.CharsetEncoder; -import java.nio.charset.CoderResult; -import java.nio.ByteBuffer; -import java.nio.CharBuffer; - -/** - * Shared testing code for {@link IsValidUtf8Test} and - * {@link IsValidUtf8FourByteTest}. - * - * @author jonp@google.com (Jon Perlow) - * @author martinrb@google.com (Martin Buchholz) - */ -class IsValidUtf8TestUtil { - private static Logger logger = Logger.getLogger( - IsValidUtf8TestUtil.class.getName()); - - // 128 - [chars 0x0000 to 0x007f] - static long ONE_BYTE_ROUNDTRIPPABLE_CHARACTERS = 0x007f - 0x0000 + 1; - - // 128 - static long EXPECTED_ONE_BYTE_ROUNDTRIPPABLE_COUNT = - ONE_BYTE_ROUNDTRIPPABLE_CHARACTERS; - - // 1920 [chars 0x0080 to 0x07FF] - static long TWO_BYTE_ROUNDTRIPPABLE_CHARACTERS = 0x07FF - 0x0080 + 1; - - // 18,304 - static long EXPECTED_TWO_BYTE_ROUNDTRIPPABLE_COUNT = - // Both bytes are one byte characters - (long) Math.pow(EXPECTED_ONE_BYTE_ROUNDTRIPPABLE_COUNT, 2) + - // The possible number of two byte characters - TWO_BYTE_ROUNDTRIPPABLE_CHARACTERS; - - // 2048 - static long THREE_BYTE_SURROGATES = 2 * 1024; - - // 61,440 [chars 0x0800 to 0xFFFF, minus surrogates] - static long THREE_BYTE_ROUNDTRIPPABLE_CHARACTERS = - 0xFFFF - 0x0800 + 1 - THREE_BYTE_SURROGATES; - - // 2,650,112 - static long EXPECTED_THREE_BYTE_ROUNDTRIPPABLE_COUNT = - // All one byte characters - (long) Math.pow(EXPECTED_ONE_BYTE_ROUNDTRIPPABLE_COUNT, 3) + - // One two byte character and a one byte character - 2 * TWO_BYTE_ROUNDTRIPPABLE_CHARACTERS * - ONE_BYTE_ROUNDTRIPPABLE_CHARACTERS + - // Three byte characters - THREE_BYTE_ROUNDTRIPPABLE_CHARACTERS; - - // 1,048,576 [chars 0x10000L to 0x10FFFF] - static long FOUR_BYTE_ROUNDTRIPPABLE_CHARACTERS = 0x10FFFF - 0x10000L + 1; - - // 289,571,839 - static long EXPECTED_FOUR_BYTE_ROUNDTRIPPABLE_COUNT = - // All one byte characters - (long) Math.pow(EXPECTED_ONE_BYTE_ROUNDTRIPPABLE_COUNT, 4) + - // One and three byte characters - 2 * THREE_BYTE_ROUNDTRIPPABLE_CHARACTERS * - ONE_BYTE_ROUNDTRIPPABLE_CHARACTERS + - // Two two byte characters - TWO_BYTE_ROUNDTRIPPABLE_CHARACTERS * TWO_BYTE_ROUNDTRIPPABLE_CHARACTERS + - // Permutations of one and two byte characters - 3 * TWO_BYTE_ROUNDTRIPPABLE_CHARACTERS * - ONE_BYTE_ROUNDTRIPPABLE_CHARACTERS * - ONE_BYTE_ROUNDTRIPPABLE_CHARACTERS + - // Four byte characters - FOUR_BYTE_ROUNDTRIPPABLE_CHARACTERS; - - static class Shard { - final long index; - final long start; - final long lim; - final long expected; - - - public Shard(long index, long start, long lim, long expected) { - assertTrue(start < lim); - this.index = index; - this.start = start; - this.lim = lim; - this.expected = expected; - } - } - - static final long[] FOUR_BYTE_SHARDS_EXPECTED_ROUNTRIPPABLES = - generateFourByteShardsExpectedRunnables(); - - private static long[] generateFourByteShardsExpectedRunnables() { - long[] expected = new long[128]; - - // 0-63 are all 5300224 - for (int i = 0; i <= 63; i++) { - expected[i] = 5300224; - } - - // 97-111 are all 2342912 - for (int i = 97; i <= 111; i++) { - expected[i] = 2342912; - } - - // 113-117 are all 1048576 - for (int i = 113; i <= 117; i++) { - expected[i] = 1048576; - } - - // One offs - expected[112] = 786432; - expected[118] = 786432; - expected[119] = 1048576; - expected[120] = 458752; - expected[121] = 524288; - expected[122] = 65536; - - // Anything not assigned was the default 0. - return expected; - } - - static final List<Shard> FOUR_BYTE_SHARDS = generateFourByteShards( - 128, FOUR_BYTE_SHARDS_EXPECTED_ROUNTRIPPABLES); - - - private static List<Shard> generateFourByteShards( - int numShards, long[] expected) { - assertEquals(numShards, expected.length); - List<Shard> shards = new ArrayList<Shard>(numShards); - long LIM = 1L << 32; - long increment = LIM / numShards; - assertTrue(LIM % numShards == 0); - for (int i = 0; i < numShards; i++) { - shards.add(new Shard(i, - increment * i, - increment * (i + 1), - expected[i])); - } - return shards; - } - - /** - * Helper to run the loop to test all the permutations for the number of bytes - * specified. - * - * @param numBytes the number of bytes in the byte array - * @param expectedCount the expected number of roundtrippable permutations - */ - static void testBytes(int numBytes, long expectedCount) - throws UnsupportedEncodingException { - testBytes(numBytes, expectedCount, 0, -1); - } - - /** - * Helper to run the loop to test all the permutations for the number of bytes - * specified. This overload is useful for debugging to get the loop to start - * at a certain character. - * - * @param numBytes the number of bytes in the byte array - * @param expectedCount the expected number of roundtrippable permutations - * @param start the starting bytes encoded as a long as big-endian - * @param lim the limit of bytes to process encoded as a long as big-endian, - * or -1 to mean the max limit for numBytes - */ - static void testBytes(int numBytes, long expectedCount, long start, long lim) - throws UnsupportedEncodingException { - Random rnd = new Random(); - byte[] bytes = new byte[numBytes]; - - if (lim == -1) { - lim = 1L << (numBytes * 8); - } - long count = 0; - long countRoundTripped = 0; - for (long byteChar = start; byteChar < lim; byteChar++) { - long tmpByteChar = byteChar; - for (int i = 0; i < numBytes; i++) { - bytes[bytes.length - i - 1] = (byte) tmpByteChar; - tmpByteChar = tmpByteChar >> 8; - } - ByteString bs = ByteString.copyFrom(bytes); - boolean isRoundTrippable = bs.isValidUtf8(); - String s = new String(bytes, "UTF-8"); - byte[] bytesReencoded = s.getBytes("UTF-8"); - boolean bytesEqual = Arrays.equals(bytes, bytesReencoded); - - if (bytesEqual != isRoundTrippable) { - outputFailure(byteChar, bytes, bytesReencoded); - } - - // Check agreement with static Utf8 methods. - assertEquals(isRoundTrippable, Utf8.isValidUtf8(bytes)); - assertEquals(isRoundTrippable, Utf8.isValidUtf8(bytes, 0, numBytes)); - - // Test partial sequences. - // Partition numBytes into three segments (not necessarily non-empty). - int i = rnd.nextInt(numBytes); - int j = rnd.nextInt(numBytes); - if (j < i) { - int tmp = i; i = j; j = tmp; - } - int state1 = Utf8.partialIsValidUtf8(Utf8.COMPLETE, bytes, 0, i); - int state2 = Utf8.partialIsValidUtf8(state1, bytes, i, j); - int state3 = Utf8.partialIsValidUtf8(state2, bytes, j, numBytes); - if (isRoundTrippable != (state3 == Utf8.COMPLETE)) { - System.out.printf("state=%04x %04x %04x i=%d j=%d%n", - state1, state2, state3, i, j); - outputFailure(byteChar, bytes, bytesReencoded); - } - assertEquals(isRoundTrippable, (state3 == Utf8.COMPLETE)); - - // Test ropes built out of small partial sequences - ByteString rope = RopeByteString.newInstanceForTest( - bs.substring(0, i), - RopeByteString.newInstanceForTest( - bs.substring(i, j), - bs.substring(j, numBytes))); - assertSame(RopeByteString.class, rope.getClass()); - - ByteString[] byteStrings = { bs, bs.substring(0, numBytes), rope }; - for (ByteString x : byteStrings) { - assertEquals(isRoundTrippable, - x.isValidUtf8()); - assertEquals(state3, - x.partialIsValidUtf8(Utf8.COMPLETE, 0, numBytes)); - - assertEquals(state1, - x.partialIsValidUtf8(Utf8.COMPLETE, 0, i)); - assertEquals(state1, - x.substring(0, i).partialIsValidUtf8(Utf8.COMPLETE, 0, i)); - assertEquals(state2, - x.partialIsValidUtf8(state1, i, j - i)); - assertEquals(state2, - x.substring(i, j).partialIsValidUtf8(state1, 0, j - i)); - assertEquals(state3, - x.partialIsValidUtf8(state2, j, numBytes - j)); - assertEquals(state3, - x.substring(j, numBytes) - .partialIsValidUtf8(state2, 0, numBytes - j)); - } - - // ByteString reduplication should not affect its UTF-8 validity. - ByteString ropeADope = - RopeByteString.newInstanceForTest(bs, bs.substring(0, numBytes)); - assertEquals(isRoundTrippable, ropeADope.isValidUtf8()); - - if (isRoundTrippable) { - countRoundTripped++; - } - count++; - if (byteChar != 0 && byteChar % 1000000L == 0) { - logger.info("Processed " + (byteChar / 1000000L) + - " million characters"); - } - } - logger.info("Round tripped " + countRoundTripped + " of " + count); - assertEquals(expectedCount, countRoundTripped); - } - - /** - * Variation of {@link #testBytes} that does less allocation using the - * low-level encoders/decoders directly. Checked in because it's useful for - * debugging when trying to process bytes faster, but since it doesn't use the - * actual String class, it's possible for incompatibilities to develop - * (although unlikely). - * - * @param numBytes the number of bytes in the byte array - * @param expectedCount the expected number of roundtrippable permutations - * @param start the starting bytes encoded as a long as big-endian - * @param lim the limit of bytes to process encoded as a long as big-endian, - * or -1 to mean the max limit for numBytes - */ - void testBytesUsingByteBuffers( - int numBytes, long expectedCount, long start, long lim) - throws UnsupportedEncodingException { - CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder() - .onMalformedInput(CodingErrorAction.REPLACE) - .onUnmappableCharacter(CodingErrorAction.REPLACE); - CharsetEncoder encoder = Charset.forName("UTF-8").newEncoder() - .onMalformedInput(CodingErrorAction.REPLACE) - .onUnmappableCharacter(CodingErrorAction.REPLACE); - byte[] bytes = new byte[numBytes]; - int maxChars = (int) (decoder.maxCharsPerByte() * numBytes) + 1; - char[] charsDecoded = - new char[(int) (decoder.maxCharsPerByte() * numBytes) + 1]; - int maxBytes = (int) (encoder.maxBytesPerChar() * maxChars) + 1; - byte[] bytesReencoded = new byte[maxBytes]; - - ByteBuffer bb = ByteBuffer.wrap(bytes); - CharBuffer cb = CharBuffer.wrap(charsDecoded); - ByteBuffer bbReencoded = ByteBuffer.wrap(bytesReencoded); - if (lim == -1) { - lim = 1L << (numBytes * 8); - } - long count = 0; - long countRoundTripped = 0; - for (long byteChar = start; byteChar < lim; byteChar++) { - bb.rewind(); - bb.limit(bytes.length); - cb.rewind(); - cb.limit(charsDecoded.length); - bbReencoded.rewind(); - bbReencoded.limit(bytesReencoded.length); - encoder.reset(); - decoder.reset(); - long tmpByteChar = byteChar; - for (int i = 0; i < bytes.length; i++) { - bytes[bytes.length - i - 1] = (byte) tmpByteChar; - tmpByteChar = tmpByteChar >> 8; - } - boolean isRoundTrippable = ByteString.copyFrom(bytes).isValidUtf8(); - CoderResult result = decoder.decode(bb, cb, true); - assertFalse(result.isError()); - result = decoder.flush(cb); - assertFalse(result.isError()); - - int charLen = cb.position(); - cb.rewind(); - cb.limit(charLen); - result = encoder.encode(cb, bbReencoded, true); - assertFalse(result.isError()); - result = encoder.flush(bbReencoded); - assertFalse(result.isError()); - - boolean bytesEqual = true; - int bytesLen = bbReencoded.position(); - if (bytesLen != numBytes) { - bytesEqual = false; - } else { - for (int i = 0; i < numBytes; i++) { - if (bytes[i] != bytesReencoded[i]) { - bytesEqual = false; - break; - } - } - } - if (bytesEqual != isRoundTrippable) { - outputFailure(byteChar, bytes, bytesReencoded, bytesLen); - } - - count++; - if (isRoundTrippable) { - countRoundTripped++; - } - if (byteChar != 0 && byteChar % 1000000 == 0) { - logger.info("Processed " + (byteChar / 1000000) + - " million characters"); - } - } - logger.info("Round tripped " + countRoundTripped + " of " + count); - assertEquals(expectedCount, countRoundTripped); - } - - private static void outputFailure(long byteChar, byte[] bytes, byte[] after) { - outputFailure(byteChar, bytes, after, after.length); - } - - private static void outputFailure(long byteChar, byte[] bytes, byte[] after, - int len) { - fail("Failure: (" + Long.toHexString(byteChar) + ") " + - toHexString(bytes) + " => " + toHexString(after, len)); - } - - private static String toHexString(byte[] b) { - return toHexString(b, b.length); - } - - private static String toHexString(byte[] b, int len) { - StringBuilder s = new StringBuilder(); - s.append("\""); - for (int i = 0; i < len; i++) { - if (i > 0) { - s.append(" "); - } - s.append(String.format("%02x", b[i] & 0xFF)); - } - s.append("\""); - return s.toString(); - } - -} diff --git a/java/src/test/java/com/google/protobuf/LazyFieldLiteTest.java b/java/src/test/java/com/google/protobuf/LazyFieldLiteTest.java deleted file mode 100644 index e67c6d2..0000000 --- a/java/src/test/java/com/google/protobuf/LazyFieldLiteTest.java +++ /dev/null @@ -1,134 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import protobuf_unittest.UnittestProto.TestAllExtensions; -import protobuf_unittest.UnittestProto.TestAllTypes; - -import java.io.IOException; -import junit.framework.TestCase; - -/** - * Unit test for {@link LazyFieldLite}. - * - * @author xiangl@google.com (Xiang Li) - */ -public class LazyFieldLiteTest extends TestCase { - - public void testGetValue() { - MessageLite message = TestUtil.getAllSet(); - LazyFieldLite lazyField = createLazyFieldLiteFromMessage(message); - assertEquals(message, lazyField.getValue(TestAllTypes.getDefaultInstance())); - changeValue(lazyField); - assertNotEqual(message, lazyField.getValue(TestAllTypes.getDefaultInstance())); - } - - public void testGetValueEx() throws Exception { - TestAllExtensions message = TestUtil.getAllExtensionsSet(); - LazyFieldLite lazyField = createLazyFieldLiteFromMessage(message); - assertEquals(message, lazyField.getValue(TestAllExtensions.getDefaultInstance())); - changeValue(lazyField); - assertNotEqual(message, lazyField.getValue(TestAllExtensions.getDefaultInstance())); - } - - public void testSetValue() { - MessageLite message = TestUtil.getAllSet(); - LazyFieldLite lazyField = createLazyFieldLiteFromMessage(message); - changeValue(lazyField); - assertNotEqual(message, lazyField.getValue(TestAllTypes.getDefaultInstance())); - message = lazyField.getValue(TestAllTypes.getDefaultInstance()); - changeValue(lazyField); - assertEquals(message, lazyField.getValue(TestAllTypes.getDefaultInstance())); - } - - public void testSetValueEx() throws Exception { - TestAllExtensions message = TestUtil.getAllExtensionsSet(); - LazyFieldLite lazyField = createLazyFieldLiteFromMessage(message); - changeValue(lazyField); - assertNotEqual(message, lazyField.getValue(TestAllExtensions.getDefaultInstance())); - MessageLite value = lazyField.getValue(TestAllExtensions.getDefaultInstance()); - changeValue(lazyField); - assertEquals(value, lazyField.getValue(TestAllExtensions.getDefaultInstance())); - } - - public void testGetSerializedSize() { - MessageLite message = TestUtil.getAllSet(); - LazyFieldLite lazyField = createLazyFieldLiteFromMessage(message); - assertEquals(message.getSerializedSize(), lazyField.getSerializedSize()); - changeValue(lazyField); - assertNotEqual(message.getSerializedSize(), lazyField.getSerializedSize()); - } - - public void testGetSerializedSizeEx() throws Exception { - TestAllExtensions message = TestUtil.getAllExtensionsSet(); - LazyFieldLite lazyField = createLazyFieldLiteFromMessage(message); - assertEquals(message.getSerializedSize(), lazyField.getSerializedSize()); - changeValue(lazyField); - assertNotEqual(message.getSerializedSize(), lazyField.getSerializedSize()); - } - - public void testGetByteString() { - MessageLite message = TestUtil.getAllSet(); - LazyFieldLite lazyField = createLazyFieldLiteFromMessage(message); - assertEquals(message.toByteString(), lazyField.toByteString()); - changeValue(lazyField); - assertNotEqual(message.toByteString(), lazyField.toByteString()); - } - - public void testGetByteStringEx() throws Exception { - TestAllExtensions message = TestUtil.getAllExtensionsSet(); - LazyFieldLite lazyField = createLazyFieldLiteFromMessage(message); - assertEquals(message.toByteString(), lazyField.toByteString()); - changeValue(lazyField); - assertNotEqual(message.toByteString(), lazyField.toByteString()); - } - - - // Help methods. - - private LazyFieldLite createLazyFieldLiteFromMessage(MessageLite message) { - ByteString bytes = message.toByteString(); - return new LazyFieldLite(TestUtil.getExtensionRegistry(), bytes); - } - - private void changeValue(LazyFieldLite lazyField) { - TestAllTypes.Builder builder = TestUtil.getAllSet().toBuilder(); - builder.addRepeatedBool(true); - MessageLite newMessage = builder.build(); - lazyField.setValue(newMessage); - } - - private void assertNotEqual(Object unexpected, Object actual) { - assertFalse(unexpected == actual - || (unexpected != null && unexpected.equals(actual))); - } - -} diff --git a/java/src/test/java/com/google/protobuf/LazyFieldTest.java b/java/src/test/java/com/google/protobuf/LazyFieldTest.java deleted file mode 100644 index 2b90006..0000000 --- a/java/src/test/java/com/google/protobuf/LazyFieldTest.java +++ /dev/null @@ -1,121 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import protobuf_unittest.UnittestProto.TestAllExtensions; -import protobuf_unittest.UnittestProto.TestAllTypes; - -import java.io.IOException; -import junit.framework.TestCase; - -/** - * Unit test for {@link LazyField}. - * - * @author xiangl@google.com (Xiang Li) - */ -public class LazyFieldTest extends TestCase { - public void testHashCode() { - MessageLite message = TestUtil.getAllSet(); - LazyField lazyField = - createLazyFieldFromMessage(message); - assertEquals(message.hashCode(), lazyField.hashCode()); - lazyField.getValue(); - assertEquals(message.hashCode(), lazyField.hashCode()); - changeValue(lazyField); - // make sure two messages have different hash code - assertNotEqual(message.hashCode(), lazyField.hashCode()); - } - - public void testHashCodeEx() throws Exception { - TestAllExtensions message = TestUtil.getAllExtensionsSet(); - LazyField lazyField = createLazyFieldFromMessage(message); - assertEquals(message.hashCode(), lazyField.hashCode()); - lazyField.getValue(); - assertEquals(message.hashCode(), lazyField.hashCode()); - changeValue(lazyField); - // make sure two messages have different hash code - assertNotEqual(message.hashCode(), lazyField.hashCode()); - } - - public void testGetValue() { - MessageLite message = TestUtil.getAllSet(); - LazyField lazyField = createLazyFieldFromMessage(message); - assertEquals(message, lazyField.getValue()); - changeValue(lazyField); - assertNotEqual(message, lazyField.getValue()); - } - - public void testGetValueEx() throws Exception { - TestAllExtensions message = TestUtil.getAllExtensionsSet(); - LazyField lazyField = createLazyFieldFromMessage(message); - assertEquals(message, lazyField.getValue()); - changeValue(lazyField); - assertNotEqual(message, lazyField.getValue()); - } - - public void testEqualsObject() { - MessageLite message = TestUtil.getAllSet(); - LazyField lazyField = createLazyFieldFromMessage(message); - assertTrue(lazyField.equals(message)); - changeValue(lazyField); - assertFalse(lazyField.equals(message)); - assertFalse(message.equals(lazyField.getValue())); - } - - public void testEqualsObjectEx() throws Exception { - TestAllExtensions message = TestUtil.getAllExtensionsSet(); - LazyField lazyField = createLazyFieldFromMessage(message); - assertTrue(lazyField.equals(message)); - changeValue(lazyField); - assertFalse(lazyField.equals(message)); - assertFalse(message.equals(lazyField.getValue())); - } - - // Help methods. - - private LazyField createLazyFieldFromMessage(MessageLite message) { - ByteString bytes = message.toByteString(); - return new LazyField(message.getDefaultInstanceForType(), - TestUtil.getExtensionRegistry(), bytes); - } - - private void changeValue(LazyField lazyField) { - TestAllTypes.Builder builder = TestUtil.getAllSet().toBuilder(); - builder.addRepeatedBool(true); - MessageLite newMessage = builder.build(); - lazyField.setValue(newMessage); - } - - private void assertNotEqual(Object unexpected, Object actual) { - assertFalse(unexpected == actual - || (unexpected != null && unexpected.equals(actual))); - } -} diff --git a/java/src/test/java/com/google/protobuf/LazyMessageLiteTest.java b/java/src/test/java/com/google/protobuf/LazyMessageLiteTest.java deleted file mode 100644 index 00e3a84..0000000 --- a/java/src/test/java/com/google/protobuf/LazyMessageLiteTest.java +++ /dev/null @@ -1,319 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import protobuf_unittest.LazyFieldsLite.LazyInnerMessageLite; -import protobuf_unittest.LazyFieldsLite.LazyMessageLite; -import protobuf_unittest.LazyFieldsLite.LazyNestedInnerMessageLite; - -import junit.framework.TestCase; - -import org.easymock.classextension.EasyMock; - -import java.util.ArrayList; - -/** - * Unit test for messages with lazy fields. - * - * @author niwasaki@google.com (Naoki Iwasaki) - */ -public class LazyMessageLiteTest extends TestCase { - - private Parser<LazyInnerMessageLite> originalLazyInnerMessageLiteParser; - - @Override - protected void setUp() throws Exception { - super.setUp(); - - originalLazyInnerMessageLiteParser = LazyInnerMessageLite.PARSER; - } - - @Override - protected void tearDown() throws Exception { - LazyInnerMessageLite.PARSER = originalLazyInnerMessageLiteParser; - - super.tearDown(); - } - - public void testSetValues() { - LazyNestedInnerMessageLite nested = LazyNestedInnerMessageLite.newBuilder() - .setNum(3) - .build(); - LazyInnerMessageLite inner = LazyInnerMessageLite.newBuilder() - .setNum(2) - .setNested(nested) - .build(); - LazyMessageLite outer = LazyMessageLite.newBuilder() - .setNum(1) - .setInner(inner) - .setOneofNum(123) - .setOneofInner(inner) - .build(); - - assertEquals(1, outer.getNum()); - assertEquals(421, outer.getNumWithDefault()); - - assertEquals(2, outer.getInner().getNum()); - assertEquals(42, outer.getInner().getNumWithDefault()); - - assertEquals(3, outer.getInner().getNested().getNum()); - assertEquals(4, outer.getInner().getNested().getNumWithDefault()); - - assertFalse(outer.hasOneofNum()); - assertTrue(outer.hasOneofInner()); - - assertEquals(2, outer.getOneofInner().getNum()); - assertEquals(42, outer.getOneofInner().getNumWithDefault()); - assertEquals(3, outer.getOneofInner().getNested().getNum()); - assertEquals(4, outer.getOneofInner().getNested().getNumWithDefault()); - } - - public void testSetRepeatedValues() { - LazyMessageLite outer = LazyMessageLite.newBuilder() - .setNum(1) - .addRepeatedInner(LazyInnerMessageLite.newBuilder().setNum(119)) - .addRepeatedInner(LazyInnerMessageLite.newBuilder().setNum(122)) - .build(); - - assertEquals(1, outer.getNum()); - assertEquals(2, outer.getRepeatedInnerCount()); - assertEquals(119, outer.getRepeatedInner(0).getNum()); - assertEquals(122, outer.getRepeatedInner(1).getNum()); - } - - public void testAddAll() { - ArrayList<LazyInnerMessageLite> inners = new ArrayList<LazyInnerMessageLite>(); - int count = 4; - for (int i = 0; i < count; i++) { - LazyInnerMessageLite inner = LazyInnerMessageLite.newBuilder() - .setNum(i) - .build(); - inners.add(inner); - } - - LazyMessageLite outer = LazyMessageLite.newBuilder() - .addAllRepeatedInner(inners) - .build(); - assertEquals(count, outer.getRepeatedInnerCount()); - for (int i = 0; i < count; i++) { - assertEquals(i, outer.getRepeatedInner(i).getNum()); - } - } - - public void testGetDefaultValues() { - LazyMessageLite outer = LazyMessageLite.newBuilder() - .build(); - - assertEquals(0, outer.getNum()); - assertEquals(421, outer.getNumWithDefault()); - - assertEquals(0, outer.getInner().getNum()); - assertEquals(42, outer.getInner().getNumWithDefault()); - - assertEquals(0, outer.getInner().getNested().getNum()); - assertEquals(4, outer.getInner().getNested().getNumWithDefault()); - - assertEquals(0, outer.getOneofNum()); - - assertEquals(0, outer.getOneofInner().getNum()); - assertEquals(42, outer.getOneofInner().getNumWithDefault()); - assertEquals(0, outer.getOneofInner().getNested().getNum()); - assertEquals(4, outer.getOneofInner().getNested().getNumWithDefault()); - } - - public void testClearValues() { - LazyInnerMessageLite inner = LazyInnerMessageLite.newBuilder() - .setNum(115) - .build(); - - LazyMessageLite.Builder outerBuilder = LazyMessageLite.newBuilder(); - - assertEquals(0, outerBuilder.build().getNum()); - - - // Set/Clear num - outerBuilder.setNum(100); - - assertEquals(100, outerBuilder.build().getNum()); - assertEquals(421, outerBuilder.build().getNumWithDefault()); - assertFalse(outerBuilder.build().hasInner()); - - outerBuilder.clearNum(); - - assertEquals(0, outerBuilder.build().getNum()); - assertEquals(421, outerBuilder.build().getNumWithDefault()); - assertFalse(outerBuilder.build().hasInner()); - - - // Set/Clear all - outerBuilder.setNum(100) - .setInner(inner) - .addRepeatedInner(LazyInnerMessageLite.newBuilder().setNum(119)) - .addRepeatedInner(LazyInnerMessageLite.newBuilder().setNum(122)) - .setOneofInner(LazyInnerMessageLite.newBuilder().setNum(123)); - - LazyMessageLite outer = outerBuilder.build(); - assertEquals(100, outer.getNum()); - assertEquals(421, outer.getNumWithDefault()); - assertTrue(outer.hasInner()); - assertEquals(115, outer.getInner().getNum()); - assertEquals(2, outer.getRepeatedInnerCount()); - assertEquals(119, outer.getRepeatedInner(0).getNum()); - assertEquals(122, outer.getRepeatedInner(1).getNum()); - assertTrue(outer.hasOneofInner()); - assertEquals(123, outer.getOneofInner().getNum()); - - outerBuilder.clear(); - - outer = outerBuilder.build(); - - assertEquals(0, outer.getNum()); - assertEquals(421, outer.getNumWithDefault()); - assertFalse(outer.hasInner()); - assertEquals(0, outer.getRepeatedInnerCount()); - assertFalse(outer.hasOneofInner()); - assertEquals(0, outer.getOneofInner().getNum()); - } - - public void testMergeValues() { - LazyMessageLite outerBase = LazyMessageLite.newBuilder() - .setNumWithDefault(122) - .build(); - - LazyInnerMessageLite innerMerging = LazyInnerMessageLite.newBuilder() - .setNum(115) - .build(); - LazyMessageLite outerMerging = LazyMessageLite.newBuilder() - .setNum(119) - .setInner(innerMerging) - .setOneofInner(innerMerging) - .build(); - - LazyMessageLite merged = LazyMessageLite - .newBuilder(outerBase) - .mergeFrom(outerMerging) - .build(); - assertEquals(119, merged.getNum()); - assertEquals(122, merged.getNumWithDefault()); - assertEquals(115, merged.getInner().getNum()); - assertEquals(42, merged.getInner().getNumWithDefault()); - assertEquals(115, merged.getOneofInner().getNum()); - assertEquals(42, merged.getOneofInner().getNumWithDefault()); - } - - public void testMergeDefaultValues() { - LazyInnerMessageLite innerBase = LazyInnerMessageLite.newBuilder() - .setNum(115) - .build(); - LazyMessageLite outerBase = LazyMessageLite.newBuilder() - .setNum(119) - .setNumWithDefault(122) - .setInner(innerBase) - .setOneofInner(innerBase) - .build(); - - LazyMessageLite outerMerging = LazyMessageLite.newBuilder() - .build(); - - LazyMessageLite merged = LazyMessageLite - .newBuilder(outerBase) - .mergeFrom(outerMerging) - .build(); - // Merging default-instance shouldn't overwrite values in the base message. - assertEquals(119, merged.getNum()); - assertEquals(122, merged.getNumWithDefault()); - assertEquals(115, merged.getInner().getNum()); - assertEquals(42, merged.getInner().getNumWithDefault()); - assertEquals(115, merged.getOneofInner().getNum()); - assertEquals(42, merged.getOneofInner().getNumWithDefault()); - } - - public void testSerialize() throws InvalidProtocolBufferException { - LazyNestedInnerMessageLite nested = LazyNestedInnerMessageLite.newBuilder() - .setNum(3) - .build(); - LazyInnerMessageLite inner = LazyInnerMessageLite.newBuilder() - .setNum(2) - .setNested(nested) - .build(); - LazyMessageLite outer = LazyMessageLite.newBuilder() - .setNum(1) - .setInner(inner) - .setOneofInner(inner) - .build(); - - ByteString bytes = outer.toByteString(); - assertEquals(bytes.size(), outer.getSerializedSize()); - - LazyMessageLite deserialized = LazyMessageLite.parseFrom(bytes); - - assertEquals(1, deserialized.getNum()); - assertEquals(421, deserialized.getNumWithDefault()); - - assertEquals(2, deserialized.getInner().getNum()); - assertEquals(42, deserialized.getInner().getNumWithDefault()); - - assertEquals(3, deserialized.getInner().getNested().getNum()); - assertEquals(4, deserialized.getInner().getNested().getNumWithDefault()); - - assertEquals(2, deserialized.getOneofInner().getNum()); - assertEquals(42, deserialized.getOneofInner().getNumWithDefault()); - assertEquals(3, deserialized.getOneofInner().getNested().getNum()); - assertEquals(4, deserialized.getOneofInner().getNested().getNumWithDefault()); - - assertEquals(bytes, deserialized.toByteString()); - } - - public void testLaziness() throws InvalidProtocolBufferException { - LazyInnerMessageLite inner = LazyInnerMessageLite.newBuilder() - .setNum(2) - .build(); - LazyMessageLite outer = LazyMessageLite.newBuilder() - .setNum(1) - .setInner(inner) - .setOneofInner(inner) - .build(); - ByteString bytes = outer.toByteString(); - - - // The parser for inner / oneofInner message shouldn't be used if - // getInner / getOneofInner is not called. - LazyInnerMessageLite.PARSER = EasyMock.createStrictMock(Parser.class); - - EasyMock.replay(LazyInnerMessageLite.PARSER); - - LazyMessageLite deserialized = LazyMessageLite.parseFrom(bytes); - assertEquals(1, deserialized.getNum()); - assertEquals(421, deserialized.getNumWithDefault()); - - EasyMock.verify(LazyInnerMessageLite.PARSER); - } -} diff --git a/java/src/test/java/com/google/protobuf/LazyStringArrayListTest.java b/java/src/test/java/com/google/protobuf/LazyStringArrayListTest.java deleted file mode 100644 index f3012b9..0000000 --- a/java/src/test/java/com/google/protobuf/LazyStringArrayListTest.java +++ /dev/null @@ -1,174 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import junit.framework.TestCase; - -import java.util.ArrayList; -import java.util.List; - -/** - * Tests for {@link LazyStringArrayList}. - * - * @author jonp@google.com (Jon Perlow) - */ -public class LazyStringArrayListTest extends TestCase { - - private static String STRING_A = "A"; - private static String STRING_B = "B"; - private static String STRING_C = "C"; - - private static ByteString BYTE_STRING_A = ByteString.copyFromUtf8("A"); - private static ByteString BYTE_STRING_B = ByteString.copyFromUtf8("B"); - private static ByteString BYTE_STRING_C = ByteString.copyFromUtf8("C"); - - public void testJustStrings() { - LazyStringArrayList list = new LazyStringArrayList(); - list.add(STRING_A); - list.add(STRING_B); - list.add(STRING_C); - - assertEquals(3, list.size()); - assertSame(STRING_A, list.get(0)); - assertSame(STRING_B, list.get(1)); - assertSame(STRING_C, list.get(2)); - - list.set(1, STRING_C); - assertSame(STRING_C, list.get(1)); - - list.remove(1); - assertSame(STRING_A, list.get(0)); - assertSame(STRING_C, list.get(1)); - - List<ByteString> byteStringList = list.asByteStringList(); - assertEquals(BYTE_STRING_A, byteStringList.get(0)); - assertEquals(BYTE_STRING_C, byteStringList.get(1)); - - // Underlying list should be transformed. - assertSame(byteStringList.get(0), list.getByteString(0)); - assertSame(byteStringList.get(1), list.getByteString(1)); - } - - public void testJustByteString() { - LazyStringArrayList list = new LazyStringArrayList(); - list.add(BYTE_STRING_A); - list.add(BYTE_STRING_B); - list.add(BYTE_STRING_C); - - assertEquals(3, list.size()); - assertSame(BYTE_STRING_A, list.getByteString(0)); - assertSame(BYTE_STRING_B, list.getByteString(1)); - assertSame(BYTE_STRING_C, list.getByteString(2)); - - list.remove(1); - assertSame(BYTE_STRING_A, list.getByteString(0)); - assertSame(BYTE_STRING_C, list.getByteString(1)); - - List<ByteString> byteStringList = list.asByteStringList(); - assertSame(BYTE_STRING_A, byteStringList.get(0)); - assertSame(BYTE_STRING_C, byteStringList.get(1)); - } - - public void testConversionBackAndForth() { - LazyStringArrayList list = new LazyStringArrayList(); - list.add(STRING_A); - list.add(BYTE_STRING_B); - list.add(BYTE_STRING_C); - - // String a should be the same because it was originally a string - assertSame(STRING_A, list.get(0)); - - // String b and c should be different because the string has to be computed - // from the ByteString - String bPrime = list.get(1); - assertNotSame(STRING_B, bPrime); - assertEquals(STRING_B, bPrime); - String cPrime = list.get(2); - assertNotSame(STRING_C, cPrime); - assertEquals(STRING_C, cPrime); - - // String c and c should stay the same once cached. - assertSame(bPrime, list.get(1)); - assertSame(cPrime, list.get(2)); - - // ByteString needs to be computed from string for both a and b - ByteString aPrimeByteString = list.getByteString(0); - assertEquals(BYTE_STRING_A, aPrimeByteString); - ByteString bPrimeByteString = list.getByteString(1); - assertNotSame(BYTE_STRING_B, bPrimeByteString); - assertEquals(BYTE_STRING_B, list.getByteString(1)); - - // Once cached, ByteString should stay cached. - assertSame(aPrimeByteString, list.getByteString(0)); - assertSame(bPrimeByteString, list.getByteString(1)); - } - - public void testCopyConstructorCopiesByReference() { - LazyStringArrayList list1 = new LazyStringArrayList(); - list1.add(STRING_A); - list1.add(BYTE_STRING_B); - list1.add(BYTE_STRING_C); - - LazyStringArrayList list2 = new LazyStringArrayList(list1); - assertEquals(3, list2.size()); - assertSame(STRING_A, list2.get(0)); - assertSame(BYTE_STRING_B, list2.getByteString(1)); - assertSame(BYTE_STRING_C, list2.getByteString(2)); - } - - public void testListCopyConstructor() { - List<String> list1 = new ArrayList<String>(); - list1.add(STRING_A); - list1.add(STRING_B); - list1.add(STRING_C); - - LazyStringArrayList list2 = new LazyStringArrayList(list1); - assertEquals(3, list2.size()); - assertSame(STRING_A, list2.get(0)); - assertSame(STRING_B, list2.get(1)); - assertSame(STRING_C, list2.get(2)); - } - - public void testAddAllCopiesByReferenceIfPossible() { - LazyStringArrayList list1 = new LazyStringArrayList(); - list1.add(STRING_A); - list1.add(BYTE_STRING_B); - list1.add(BYTE_STRING_C); - - LazyStringArrayList list2 = new LazyStringArrayList(); - list2.addAll(list1); - - assertEquals(3, list2.size()); - assertSame(STRING_A, list2.get(0)); - assertSame(BYTE_STRING_B, list2.getByteString(1)); - assertSame(BYTE_STRING_C, list2.getByteString(2)); - } -} diff --git a/java/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java b/java/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java deleted file mode 100644 index acd1800..0000000 --- a/java/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java +++ /dev/null @@ -1,143 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - - -import protobuf_unittest.UnittestProto; - -import junit.framework.TestCase; - -import java.io.IOException; - -/** - * Tests to make sure the lazy conversion of UTF8-encoded byte arrays to - * strings works correctly. - * - * @author jonp@google.com (Jon Perlow) - */ -public class LazyStringEndToEndTest extends TestCase { - - private static ByteString TEST_ALL_TYPES_SERIALIZED_WITH_ILLEGAL_UTF8 = - ByteString.copyFrom(new byte[] { - 114, 4, -1, 0, -1, 0, -30, 2, 4, -1, - 0, -1, 0, -30, 2, 4, -1, 0, -1, 0, }); - - private ByteString encodedTestAllTypes; - - @Override - protected void setUp() throws Exception { - super.setUp(); - this.encodedTestAllTypes = UnittestProto.TestAllTypes.newBuilder() - .setOptionalString("foo") - .addRepeatedString("bar") - .addRepeatedString("baz") - .build() - .toByteString(); - } - - /** - * Tests that an invalid UTF8 string will roundtrip through a parse - * and serialization. - */ - public void testParseAndSerialize() throws InvalidProtocolBufferException { - UnittestProto.TestAllTypes tV2 = UnittestProto.TestAllTypes.parseFrom( - TEST_ALL_TYPES_SERIALIZED_WITH_ILLEGAL_UTF8); - ByteString bytes = tV2.toByteString(); - assertEquals(TEST_ALL_TYPES_SERIALIZED_WITH_ILLEGAL_UTF8, bytes); - - tV2.getOptionalString(); - bytes = tV2.toByteString(); - assertEquals(TEST_ALL_TYPES_SERIALIZED_WITH_ILLEGAL_UTF8, bytes); - } - - public void testParseAndWrite() throws IOException { - UnittestProto.TestAllTypes tV2 = UnittestProto.TestAllTypes.parseFrom( - TEST_ALL_TYPES_SERIALIZED_WITH_ILLEGAL_UTF8); - byte[] sink = new byte[TEST_ALL_TYPES_SERIALIZED_WITH_ILLEGAL_UTF8.size()]; - CodedOutputStream outputStream = CodedOutputStream.newInstance(sink); - tV2.writeTo(outputStream); - outputStream.flush(); - assertEquals( - TEST_ALL_TYPES_SERIALIZED_WITH_ILLEGAL_UTF8, - ByteString.copyFrom(sink)); - } - - public void testCaching() { - String a = "a"; - String b = "b"; - String c = "c"; - UnittestProto.TestAllTypes proto = UnittestProto.TestAllTypes.newBuilder() - .setOptionalString(a) - .addRepeatedString(b) - .addRepeatedString(c) - .build(); - - // String should be the one we passed it. - assertSame(a, proto.getOptionalString()); - assertSame(b, proto.getRepeatedString(0)); - assertSame(c, proto.getRepeatedString(1)); - - - // There's no way to directly observe that the ByteString is cached - // correctly on serialization, but we can observe that it had to recompute - // the string after serialization. - proto.toByteString(); - String aPrime = proto.getOptionalString(); - assertNotSame(a, aPrime); - assertEquals(a, aPrime); - String bPrime = proto.getRepeatedString(0); - assertNotSame(b, bPrime); - assertEquals(b, bPrime); - String cPrime = proto.getRepeatedString(1); - assertNotSame(c, cPrime); - assertEquals(c, cPrime); - - // And now the string should stay cached. - assertSame(aPrime, proto.getOptionalString()); - assertSame(bPrime, proto.getRepeatedString(0)); - assertSame(cPrime, proto.getRepeatedString(1)); - } - - public void testNoStringCachingIfOnlyBytesAccessed() throws Exception { - UnittestProto.TestAllTypes proto = - UnittestProto.TestAllTypes.parseFrom(encodedTestAllTypes); - ByteString optional = proto.getOptionalStringBytes(); - assertSame(optional, proto.getOptionalStringBytes()); - assertSame(optional, proto.toBuilder().getOptionalStringBytes()); - - ByteString repeated0 = proto.getRepeatedStringBytes(0); - ByteString repeated1 = proto.getRepeatedStringBytes(1); - assertSame(repeated0, proto.getRepeatedStringBytes(0)); - assertSame(repeated1, proto.getRepeatedStringBytes(1)); - assertSame(repeated0, proto.toBuilder().getRepeatedStringBytes(0)); - assertSame(repeated1, proto.toBuilder().getRepeatedStringBytes(1)); - } -} diff --git a/java/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java b/java/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java deleted file mode 100644 index 94f4fcf..0000000 --- a/java/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java +++ /dev/null @@ -1,85 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.Bar; -import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.BarPrime; -import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.Foo; - -import junit.framework.TestCase; - -/** - * Test generate equal and hash methods for the lite runtime. - * - * @author pbogle@google.com Phil Bogle - */ -public class LiteEqualsAndHashTest extends TestCase { - - public void testEquals() throws Exception { - // Since the generated equals and hashCode methods for lite messages are a - // mostly complete subset of those for regular messages, we can mostly assume - // that the generated methods are already thoroughly tested by the regular tests. - - // This test mostly just verifies is that a proto with - // optimize_for = LITE_RUNTIME and java_generates_equals_and_hash_compiles - // correctly when linked only against the lite library. - - // We do however do some basic testing to make sure that equals is actually - // overriden to test for value equality rather than simple object equality. - - // Check that two identical objs are equal. - Foo foo1a = Foo.newBuilder() - .setValue(1) - .addBar(Bar.newBuilder().setName("foo1")) - .build(); - Foo foo1b = Foo.newBuilder() - .setValue(1) - .addBar(Bar.newBuilder().setName("foo1")) - .build(); - Foo foo2 = Foo.newBuilder() - .setValue(1) - .addBar(Bar.newBuilder().setName("foo2")) - .build(); - - // Check that equals is doing value rather than object equality. - assertEquals(foo1a, foo1b); - assertEquals(foo1a.hashCode(), foo1b.hashCode()); - - // Check that a diffeent object is not equal. - assertFalse(foo1a.equals(foo2)); - - // Check that two objects which have different types but the same field values are not - // considered to be equal. - Bar bar = Bar.newBuilder().setName("bar").build(); - BarPrime barPrime = BarPrime.newBuilder().setName("bar").build(); - assertFalse(bar.equals(barPrime)); - } -} diff --git a/java/src/test/java/com/google/protobuf/LiteTest.java b/java/src/test/java/com/google/protobuf/LiteTest.java index 8bb30ad..728bad9 100644 --- a/java/src/test/java/com/google/protobuf/LiteTest.java +++ b/java/src/test/java/com/google/protobuf/LiteTest.java @@ -1,6 +1,6 @@ // Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ +// http://code.google.com/p/protobuf/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -37,11 +37,6 @@ import com.google.protobuf.UnittestLite.TestNestedExtensionLite; import junit.framework.TestCase; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; - /** * Test lite runtime. * @@ -118,31 +113,4 @@ public class LiteTest extends TestCase { assertEquals(7, message2.getExtension( UnittestLite.optionalNestedMessageExtensionLite).getBb()); } - - public void testSerialize() throws Exception { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - TestAllTypesLite expected = - TestAllTypesLite.newBuilder() - .setOptionalInt32(123) - .addRepeatedString("hello") - .setOptionalNestedMessage( - TestAllTypesLite.NestedMessage.newBuilder().setBb(7)) - .build(); - ObjectOutputStream out = new ObjectOutputStream(baos); - try { - out.writeObject(expected); - } finally { - out.close(); - } - ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); - ObjectInputStream in = new ObjectInputStream(bais); - TestAllTypesLite actual = (TestAllTypesLite) in.readObject(); - assertEquals(expected.getOptionalInt32(), actual.getOptionalInt32()); - assertEquals(expected.getRepeatedStringCount(), - actual.getRepeatedStringCount()); - assertEquals(expected.getRepeatedString(0), - actual.getRepeatedString(0)); - assertEquals(expected.getOptionalNestedMessage().getBb(), - actual.getOptionalNestedMessage().getBb()); - } } diff --git a/java/src/test/java/com/google/protobuf/LiteralByteStringTest.java b/java/src/test/java/com/google/protobuf/LiteralByteStringTest.java deleted file mode 100644 index 475f7ff..0000000 --- a/java/src/test/java/com/google/protobuf/LiteralByteStringTest.java +++ /dev/null @@ -1,396 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import junit.framework.TestCase; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.nio.ByteBuffer; -import java.util.Arrays; -import java.util.List; -import java.util.NoSuchElementException; - -/** - * Test {@link LiteralByteString} by setting up a reference string in {@link #setUp()}. - * This class is designed to be extended for testing extensions of {@link LiteralByteString} - * such as {@link BoundedByteString}, see {@link BoundedByteStringTest}. - * - * @author carlanton@google.com (Carl Haverl) - */ -public class LiteralByteStringTest extends TestCase { - protected static final String UTF_8 = "UTF-8"; - - protected String classUnderTest; - protected byte[] referenceBytes; - protected ByteString stringUnderTest; - protected int expectedHashCode; - - @Override - protected void setUp() throws Exception { - classUnderTest = "LiteralByteString"; - referenceBytes = ByteStringTest.getTestBytes(1234, 11337766L); - stringUnderTest = ByteString.copyFrom(referenceBytes); - expectedHashCode = 331161852; - } - - public void testExpectedType() { - String actualClassName = getActualClassName(stringUnderTest); - assertEquals(classUnderTest + " should match type exactly", classUnderTest, actualClassName); - } - - protected String getActualClassName(Object object) { - String actualClassName = object.getClass().getName(); - actualClassName = actualClassName.substring(actualClassName.lastIndexOf('.') + 1); - return actualClassName; - } - - public void testByteAt() { - boolean stillEqual = true; - for (int i = 0; stillEqual && i < referenceBytes.length; ++i) { - stillEqual = (referenceBytes[i] == stringUnderTest.byteAt(i)); - } - assertTrue(classUnderTest + " must capture the right bytes", stillEqual); - } - - public void testByteIterator() { - boolean stillEqual = true; - ByteString.ByteIterator iter = stringUnderTest.iterator(); - for (int i = 0; stillEqual && i < referenceBytes.length; ++i) { - stillEqual = (iter.hasNext() && referenceBytes[i] == iter.nextByte()); - } - assertTrue(classUnderTest + " must capture the right bytes", stillEqual); - assertFalse(classUnderTest + " must have exhausted the itertor", iter.hasNext()); - - try { - iter.nextByte(); - fail("Should have thrown an exception."); - } catch (NoSuchElementException e) { - // This is success - } - } - - public void testByteIterable() { - boolean stillEqual = true; - int j = 0; - for (byte quantum : stringUnderTest) { - stillEqual = (referenceBytes[j] == quantum); - ++j; - } - assertTrue(classUnderTest + " must capture the right bytes as Bytes", stillEqual); - assertEquals(classUnderTest + " iterable character count", referenceBytes.length, j); - } - - public void testSize() { - assertEquals(classUnderTest + " must have the expected size", referenceBytes.length, - stringUnderTest.size()); - } - - public void testGetTreeDepth() { - assertEquals(classUnderTest + " must have depth 0", 0, stringUnderTest.getTreeDepth()); - } - - public void testIsBalanced() { - assertTrue(classUnderTest + " is technically balanced", stringUnderTest.isBalanced()); - } - - public void testCopyTo_ByteArrayOffsetLength() { - int destinationOffset = 50; - int length = 100; - byte[] destination = new byte[destinationOffset + length]; - int sourceOffset = 213; - stringUnderTest.copyTo(destination, sourceOffset, destinationOffset, length); - boolean stillEqual = true; - for (int i = 0; stillEqual && i < length; ++i) { - stillEqual = referenceBytes[i + sourceOffset] == destination[i + destinationOffset]; - } - assertTrue(classUnderTest + ".copyTo(4 arg) must give the expected bytes", stillEqual); - } - - public void testCopyTo_ByteArrayOffsetLengthErrors() { - int destinationOffset = 50; - int length = 100; - byte[] destination = new byte[destinationOffset + length]; - - try { - // Copy one too many bytes - stringUnderTest.copyTo(destination, stringUnderTest.size() + 1 - length, - destinationOffset, length); - fail("Should have thrown an exception when copying too many bytes of a " - + classUnderTest); - } catch (IndexOutOfBoundsException expected) { - // This is success - } - - try { - // Copy with illegal negative sourceOffset - stringUnderTest.copyTo(destination, -1, destinationOffset, length); - fail("Should have thrown an exception when given a negative sourceOffset in " - + classUnderTest); - } catch (IndexOutOfBoundsException expected) { - // This is success - } - - try { - // Copy with illegal negative destinationOffset - stringUnderTest.copyTo(destination, 0, -1, length); - fail("Should have thrown an exception when given a negative destinationOffset in " - + classUnderTest); - } catch (IndexOutOfBoundsException expected) { - // This is success - } - - try { - // Copy with illegal negative size - stringUnderTest.copyTo(destination, 0, 0, -1); - fail("Should have thrown an exception when given a negative size in " - + classUnderTest); - } catch (IndexOutOfBoundsException expected) { - // This is success - } - - try { - // Copy with illegal too-large sourceOffset - stringUnderTest.copyTo(destination, 2 * stringUnderTest.size(), 0, length); - fail("Should have thrown an exception when the destinationOffset is too large in " - + classUnderTest); - } catch (IndexOutOfBoundsException expected) { - // This is success - } - - try { - // Copy with illegal too-large destinationOffset - stringUnderTest.copyTo(destination, 0, 2 * destination.length, length); - fail("Should have thrown an exception when the destinationOffset is too large in " - + classUnderTest); - } catch (IndexOutOfBoundsException expected) { - // This is success - } - } - - public void testCopyTo_ByteBuffer() { - ByteBuffer myBuffer = ByteBuffer.allocate(referenceBytes.length); - stringUnderTest.copyTo(myBuffer); - assertTrue(classUnderTest + ".copyTo(ByteBuffer) must give back the same bytes", - Arrays.equals(referenceBytes, myBuffer.array())); - } - - public void testAsReadOnlyByteBuffer() { - ByteBuffer byteBuffer = stringUnderTest.asReadOnlyByteBuffer(); - byte[] roundTripBytes = new byte[referenceBytes.length]; - assertTrue(byteBuffer.remaining() == referenceBytes.length); - assertTrue(byteBuffer.isReadOnly()); - byteBuffer.get(roundTripBytes); - assertTrue(classUnderTest + ".asReadOnlyByteBuffer() must give back the same bytes", - Arrays.equals(referenceBytes, roundTripBytes)); - } - - public void testAsReadOnlyByteBufferList() { - List<ByteBuffer> byteBuffers = stringUnderTest.asReadOnlyByteBufferList(); - int bytesSeen = 0; - byte[] roundTripBytes = new byte[referenceBytes.length]; - for (ByteBuffer byteBuffer : byteBuffers) { - int thisLength = byteBuffer.remaining(); - assertTrue(byteBuffer.isReadOnly()); - assertTrue(bytesSeen + thisLength <= referenceBytes.length); - byteBuffer.get(roundTripBytes, bytesSeen, thisLength); - bytesSeen += thisLength; - } - assertTrue(bytesSeen == referenceBytes.length); - assertTrue(classUnderTest + ".asReadOnlyByteBufferTest() must give back the same bytes", - Arrays.equals(referenceBytes, roundTripBytes)); - } - - public void testToByteArray() { - byte[] roundTripBytes = stringUnderTest.toByteArray(); - assertTrue(classUnderTest + ".toByteArray() must give back the same bytes", - Arrays.equals(referenceBytes, roundTripBytes)); - } - - public void testWriteTo() throws IOException { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - stringUnderTest.writeTo(bos); - byte[] roundTripBytes = bos.toByteArray(); - assertTrue(classUnderTest + ".writeTo() must give back the same bytes", - Arrays.equals(referenceBytes, roundTripBytes)); - } - - public void testWriteTo_mutating() throws IOException { - OutputStream os = new OutputStream() { - @Override - public void write(byte[] b, int off, int len) { - for (int x = 0; x < len; ++x) { - b[off + x] = (byte) 0; - } - } - - @Override - public void write(int b) { - // Purposefully left blank. - } - }; - - stringUnderTest.writeTo(os); - byte[] newBytes = stringUnderTest.toByteArray(); - assertTrue(classUnderTest + ".writeTo() must not grant access to underlying array", - Arrays.equals(referenceBytes, newBytes)); - } - - public void testNewOutput() throws IOException { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ByteString.Output output = ByteString.newOutput(); - stringUnderTest.writeTo(output); - assertEquals("Output Size returns correct result", - output.size(), stringUnderTest.size()); - output.writeTo(bos); - assertTrue("Output.writeTo() must give back the same bytes", - Arrays.equals(referenceBytes, bos.toByteArray())); - - // write the output stream to itself! This should cause it to double - output.writeTo(output); - assertEquals("Writing an output stream to itself is successful", - stringUnderTest.concat(stringUnderTest), output.toByteString()); - - output.reset(); - assertEquals("Output.reset() resets the output", 0, output.size()); - assertEquals("Output.reset() resets the output", - ByteString.EMPTY, output.toByteString()); - - } - - public void testToString() throws UnsupportedEncodingException { - String testString = "I love unicode \u1234\u5678 characters"; - LiteralByteString unicode = new LiteralByteString(testString.getBytes(UTF_8)); - String roundTripString = unicode.toString(UTF_8); - assertEquals(classUnderTest + " unicode must match", testString, roundTripString); - } - - public void testEquals() { - assertEquals(classUnderTest + " must not equal null", false, stringUnderTest.equals(null)); - assertEquals(classUnderTest + " must equal self", stringUnderTest, stringUnderTest); - assertFalse(classUnderTest + " must not equal the empty string", - stringUnderTest.equals(ByteString.EMPTY)); - assertEquals(classUnderTest + " empty strings must be equal", - new LiteralByteString(new byte[]{}), stringUnderTest.substring(55, 55)); - assertEquals(classUnderTest + " must equal another string with the same value", - stringUnderTest, new LiteralByteString(referenceBytes)); - - byte[] mungedBytes = new byte[referenceBytes.length]; - System.arraycopy(referenceBytes, 0, mungedBytes, 0, referenceBytes.length); - mungedBytes[mungedBytes.length - 5] ^= 0xFF; - assertFalse(classUnderTest + " must not equal every string with the same length", - stringUnderTest.equals(new LiteralByteString(mungedBytes))); - } - - public void testHashCode() { - int hash = stringUnderTest.hashCode(); - assertEquals(classUnderTest + " must have expected hashCode", expectedHashCode, hash); - } - - public void testPeekCachedHashCode() { - assertEquals(classUnderTest + ".peekCachedHashCode() should return zero at first", 0, - stringUnderTest.peekCachedHashCode()); - stringUnderTest.hashCode(); - assertEquals(classUnderTest + ".peekCachedHashCode should return zero at first", - expectedHashCode, stringUnderTest.peekCachedHashCode()); - } - - public void testPartialHash() { - // partialHash() is more strenuously tested elsewhere by testing hashes of substrings. - // This test would fail if the expected hash were 1. It's not. - int hash = stringUnderTest.partialHash(stringUnderTest.size(), 0, stringUnderTest.size()); - assertEquals(classUnderTest + ".partialHash() must yield expected hashCode", - expectedHashCode, hash); - } - - public void testNewInput() throws IOException { - InputStream input = stringUnderTest.newInput(); - assertEquals("InputStream.available() returns correct value", - stringUnderTest.size(), input.available()); - boolean stillEqual = true; - for (byte referenceByte : referenceBytes) { - int expectedInt = (referenceByte & 0xFF); - stillEqual = (expectedInt == input.read()); - } - assertEquals("InputStream.available() returns correct value", - 0, input.available()); - assertTrue(classUnderTest + " must give the same bytes from the InputStream", stillEqual); - assertEquals(classUnderTest + " InputStream must now be exhausted", -1, input.read()); - } - - public void testNewInput_skip() throws IOException { - InputStream input = stringUnderTest.newInput(); - int stringSize = stringUnderTest.size(); - int nearEndIndex = stringSize * 2 / 3; - long skipped1 = input.skip(nearEndIndex); - assertEquals("InputStream.skip()", skipped1, nearEndIndex); - assertEquals("InputStream.available()", - stringSize - skipped1, input.available()); - assertTrue("InputStream.mark() is available", input.markSupported()); - input.mark(0); - assertEquals("InputStream.skip(), read()", - stringUnderTest.byteAt(nearEndIndex) & 0xFF, input.read()); - assertEquals("InputStream.available()", - stringSize - skipped1 - 1, input.available()); - long skipped2 = input.skip(stringSize); - assertEquals("InputStream.skip() incomplete", - skipped2, stringSize - skipped1 - 1); - assertEquals("InputStream.skip(), no more input", 0, input.available()); - assertEquals("InputStream.skip(), no more input", -1, input.read()); - input.reset(); - assertEquals("InputStream.reset() succeded", - stringSize - skipped1, input.available()); - assertEquals("InputStream.reset(), read()", - stringUnderTest.byteAt(nearEndIndex) & 0xFF, input.read()); - } - - public void testNewCodedInput() throws IOException { - CodedInputStream cis = stringUnderTest.newCodedInput(); - byte[] roundTripBytes = cis.readRawBytes(referenceBytes.length); - assertTrue(classUnderTest + " must give the same bytes back from the CodedInputStream", - Arrays.equals(referenceBytes, roundTripBytes)); - assertTrue(classUnderTest + " CodedInputStream must now be exhausted", cis.isAtEnd()); - } - - /** - * Make sure we keep things simple when concatenating with empty. See also - * {@link ByteStringTest#testConcat_empty()}. - */ - public void testConcat_empty() { - assertSame(classUnderTest + " concatenated with empty must give " + classUnderTest, - stringUnderTest.concat(ByteString.EMPTY), stringUnderTest); - assertSame("empty concatenated with " + classUnderTest + " must give " + classUnderTest, - ByteString.EMPTY.concat(stringUnderTest), stringUnderTest); - } -} diff --git a/java/src/test/java/com/google/protobuf/MessageTest.java b/java/src/test/java/com/google/protobuf/MessageTest.java index abcd3a1..c2f47eb 100644 --- a/java/src/test/java/com/google/protobuf/MessageTest.java +++ b/java/src/test/java/com/google/protobuf/MessageTest.java @@ -1,6 +1,6 @@ // Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ +// http://code.google.com/p/protobuf/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -38,8 +38,6 @@ import protobuf_unittest.UnittestProto.ForeignMessage; import junit.framework.TestCase; -import java.util.List; - /** * Misc. unit tests for message operations that apply to both generated * and dynamic messages. @@ -312,42 +310,4 @@ public class MessageTest extends TestCase { assertEquals("Message missing required fields: a, b, c", e.getMessage()); } } - - /** Test reading unset repeated message from DynamicMessage. */ - public void testDynamicRepeatedMessageNull() throws Exception { - Descriptors.Descriptor descriptor = TestRequired.getDescriptor(); - DynamicMessage result = - DynamicMessage.newBuilder(TestAllTypes.getDescriptor()) - .mergeFrom(DynamicMessage.newBuilder(MERGE_SOURCE).build()) - .build(); - - assertTrue(result.getField(result.getDescriptorForType() - .findFieldByName("repeated_foreign_message")) instanceof List<?>); - assertEquals(result.getRepeatedFieldCount(result.getDescriptorForType() - .findFieldByName("repeated_foreign_message")), 0); - } - - /** Test reading repeated message from DynamicMessage. */ - public void testDynamicRepeatedMessageNotNull() throws Exception { - - TestAllTypes REPEATED_NESTED = - TestAllTypes.newBuilder() - .setOptionalInt32(1) - .setOptionalString("foo") - .setOptionalForeignMessage(ForeignMessage.getDefaultInstance()) - .addRepeatedString("bar") - .addRepeatedForeignMessage(ForeignMessage.getDefaultInstance()) - .addRepeatedForeignMessage(ForeignMessage.getDefaultInstance()) - .build(); - Descriptors.Descriptor descriptor = TestRequired.getDescriptor(); - DynamicMessage result = - DynamicMessage.newBuilder(TestAllTypes.getDescriptor()) - .mergeFrom(DynamicMessage.newBuilder(REPEATED_NESTED).build()) - .build(); - - assertTrue(result.getField(result.getDescriptorForType() - .findFieldByName("repeated_foreign_message")) instanceof List<?>); - assertEquals(result.getRepeatedFieldCount(result.getDescriptorForType() - .findFieldByName("repeated_foreign_message")), 2); - } } diff --git a/java/src/test/java/com/google/protobuf/NanoTest.java b/java/src/test/java/com/google/protobuf/NanoTest.java index 4c3b416..e831c52 100644 --- a/java/src/test/java/com/google/protobuf/NanoTest.java +++ b/java/src/test/java/com/google/protobuf/NanoTest.java @@ -49,7 +49,6 @@ import com.google.protobuf.nano.NanoHasOuterClass.TestAllTypesNanoHas; import com.google.protobuf.nano.NanoOuterClass; import com.google.protobuf.nano.NanoOuterClass.TestAllTypesNano; import com.google.protobuf.nano.NanoReferenceTypes; -import com.google.protobuf.nano.NanoReferenceTypesCompat; import com.google.protobuf.nano.NanoRepeatedPackables; import com.google.protobuf.nano.PackedExtensions; import com.google.protobuf.nano.RepeatedExtensions; @@ -2319,42 +2318,6 @@ public class NanoTest extends TestCase { } } - public void testDifferentStringLengthsNano() throws Exception { - // Test string serialization roundtrip using strings of the following lengths, - // with ASCII and Unicode characters requiring different UTF-8 byte counts per - // char, hence causing the length delimiter varint to sometimes require more - // bytes for the Unicode strings than the ASCII string of the same length. - int[] lengths = new int[] { - 0, - 1, - (1 << 4) - 1, // 1 byte for ASCII and Unicode - (1 << 7) - 1, // 1 byte for ASCII, 2 bytes for Unicode - (1 << 11) - 1, // 2 bytes for ASCII and Unicode - (1 << 14) - 1, // 2 bytes for ASCII, 3 bytes for Unicode - (1 << 17) - 1, // 3 bytes for ASCII and Unicode - }; - for (int i : lengths) { - testEncodingOfString('q', i); // 1 byte per char - testEncodingOfString('\u07FF', i); // 2 bytes per char - testEncodingOfString('\u0981', i); // 3 bytes per char - } - } - - private void testEncodingOfString(char c, int length) throws InvalidProtocolBufferNanoException { - TestAllTypesNano testAllTypesNano = new TestAllTypesNano(); - final String fullString = fullString(c, length); - testAllTypesNano.optionalString = fullString; - final TestAllTypesNano resultNano = new TestAllTypesNano(); - MessageNano.mergeFrom(resultNano, MessageNano.toByteArray(testAllTypesNano)); - assertEquals(fullString, resultNano.optionalString); - } - - private String fullString(char c, int length) { - char[] result = new char[length]; - Arrays.fill(result, c); - return new String(result); - } - public void testNanoWithHasParseFrom() throws Exception { TestAllTypesNanoHas msg = null; // Test false on creation, after clear and upon empty parse. @@ -2817,58 +2780,24 @@ public class NanoTest extends TestCase { RepeatedExtensions.RepeatedGroup group2 = new RepeatedExtensions.RepeatedGroup(); group2.a = 32; RepeatedExtensions.RepeatedGroup[] groups = {group1, group2}; - assertFalse(message.hasExtension(RepeatedExtensions.repeatedInt32)); message.setExtension(RepeatedExtensions.repeatedInt32, int32s); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedInt32)); - assertFalse(message.hasExtension(RepeatedExtensions.repeatedUint32)); message.setExtension(RepeatedExtensions.repeatedUint32, uint32s); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedUint32)); message.setExtension(RepeatedExtensions.repeatedSint32, sint32s); - assertFalse(message.hasExtension(RepeatedExtensions.repeatedInt64)); message.setExtension(RepeatedExtensions.repeatedInt64, int64s); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedInt64)); - assertFalse(message.hasExtension(RepeatedExtensions.repeatedUint64)); message.setExtension(RepeatedExtensions.repeatedUint64, uint64s); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedUint64)); - assertFalse(message.hasExtension(RepeatedExtensions.repeatedSint64)); message.setExtension(RepeatedExtensions.repeatedSint64, sint64s); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedSint64)); - assertFalse(message.hasExtension(RepeatedExtensions.repeatedFixed32)); message.setExtension(RepeatedExtensions.repeatedFixed32, fixed32s); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedFixed32)); - assertFalse(message.hasExtension(RepeatedExtensions.repeatedSfixed32)); message.setExtension(RepeatedExtensions.repeatedSfixed32, sfixed32s); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedSfixed32)); - assertFalse(message.hasExtension(RepeatedExtensions.repeatedFixed64)); message.setExtension(RepeatedExtensions.repeatedFixed64, fixed64s); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedFixed64)); - assertFalse(message.hasExtension(RepeatedExtensions.repeatedSfixed64)); message.setExtension(RepeatedExtensions.repeatedSfixed64, sfixed64s); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedSfixed64)); - assertFalse(message.hasExtension(RepeatedExtensions.repeatedBool)); message.setExtension(RepeatedExtensions.repeatedBool, bools); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedBool)); - assertFalse(message.hasExtension(RepeatedExtensions.repeatedFloat)); message.setExtension(RepeatedExtensions.repeatedFloat, floats); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedFloat)); - assertFalse(message.hasExtension(RepeatedExtensions.repeatedDouble)); message.setExtension(RepeatedExtensions.repeatedDouble, doubles); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedDouble)); - assertFalse(message.hasExtension(RepeatedExtensions.repeatedEnum)); message.setExtension(RepeatedExtensions.repeatedEnum, enums); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedEnum)); - assertFalse(message.hasExtension(RepeatedExtensions.repeatedString)); message.setExtension(RepeatedExtensions.repeatedString, strings); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedString)); - assertFalse(message.hasExtension(RepeatedExtensions.repeatedBytes)); message.setExtension(RepeatedExtensions.repeatedBytes, bytess); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedBytes)); - assertFalse(message.hasExtension(RepeatedExtensions.repeatedMessage)); message.setExtension(RepeatedExtensions.repeatedMessage, messages); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedMessage)); - assertFalse(message.hasExtension(RepeatedExtensions.repeatedGroup)); message.setExtension(RepeatedExtensions.repeatedGroup, groups); - assertTrue(message.hasExtension(RepeatedExtensions.repeatedGroup)); byte[] data = MessageNano.toByteArray(message); message = Extensions.ExtendableMessage.parseFrom(data); @@ -2932,26 +2861,10 @@ public class NanoTest extends TestCase { assertEquals(group1.a, deserializedRepeatedGroup[0].a); assertEquals(group2.a, deserializedRepeatedGroup[1].a); - message = Extensions.ExtendableMessage.parseFrom(data); - assertEquals(5, message.field); - // Test hasExtension using PackedExtensions. - assertTrue(message.hasExtension(PackedExtensions.packedInt32)); - assertTrue(message.hasExtension(PackedExtensions.packedUint32)); - assertTrue(message.hasExtension(PackedExtensions.packedSint32)); - assertTrue(message.hasExtension(PackedExtensions.packedInt64)); - assertTrue(message.hasExtension(PackedExtensions.packedUint64)); - assertTrue(message.hasExtension(PackedExtensions.packedSint64)); - assertTrue(message.hasExtension(PackedExtensions.packedFixed32)); - assertTrue(message.hasExtension(PackedExtensions.packedSfixed32)); - assertTrue(message.hasExtension(PackedExtensions.packedFixed64)); - assertTrue(message.hasExtension(PackedExtensions.packedSfixed64)); - assertTrue(message.hasExtension(PackedExtensions.packedBool)); - assertTrue(message.hasExtension(PackedExtensions.packedFloat)); - assertTrue(message.hasExtension(PackedExtensions.packedDouble)); - assertTrue(message.hasExtension(PackedExtensions.packedEnum)); - // Test reading back using PackedExtensions: the arrays should be equal, even the fields // are non-packed. + message = Extensions.ExtendableMessage.parseFrom(data); + assertEquals(5, message.field); assertTrue(Arrays.equals(int32s, message.getExtension(PackedExtensions.packedInt32))); assertTrue(Arrays.equals(uint32s, message.getExtension(PackedExtensions.packedUint32))); assertTrue(Arrays.equals(sint32s, message.getExtension(PackedExtensions.packedSint32))); @@ -3000,28 +2913,19 @@ public class NanoTest extends TestCase { assertTrue(Arrays.equals(floats, message.getExtension(RepeatedExtensions.repeatedFloat))); assertTrue(Arrays.equals(doubles, message.getExtension(RepeatedExtensions.repeatedDouble))); assertTrue(Arrays.equals(enums, message.getExtension(RepeatedExtensions.repeatedEnum))); - - // Clone the message and ensure it's still equal. - Extensions.ExtendableMessage clone = message.clone(); - assertEquals(clone, message); } public void testNullExtensions() throws Exception { // Check that clearing the extension on an empty message is a no-op. Extensions.ExtendableMessage message = new Extensions.ExtendableMessage(); - assertFalse(message.hasExtension(SingularExtensions.someMessage)); message.setExtension(SingularExtensions.someMessage, null); - assertFalse(message.hasExtension(SingularExtensions.someMessage)); assertEquals(0, MessageNano.toByteArray(message).length); // Check that the message is empty after setting and clearing an extension. AnotherMessage another = new AnotherMessage(); - assertFalse(message.hasExtension(SingularExtensions.someMessage)); message.setExtension(SingularExtensions.someMessage, another); - assertTrue(message.hasExtension(SingularExtensions.someMessage)); assertTrue(MessageNano.toByteArray(message).length > 0); message.setExtension(SingularExtensions.someMessage, null); - assertFalse(message.hasExtension(SingularExtensions.someMessage)); assertEquals(0, MessageNano.toByteArray(message).length); } @@ -3253,9 +3157,6 @@ public class NanoTest extends TestCase { TestAllTypesNano a = createMessageForHashCodeEqualsTest(); TestAllTypesNano aEquivalent = createMessageForHashCodeEqualsTest(); - assertTrue(MessageNano.messageNanoEquals(a, aEquivalent)); - assertFalse(MessageNano.messageNanoEquals(a, new TestAllTypesNano())); - // Null and empty array for repeated fields equality: TestAllTypesNano b = createMessageForHashCodeEqualsTest(); b.repeatedBool = null; @@ -3794,11 +3695,6 @@ public class NanoTest extends TestCase { assertTrue(Arrays.equals(new boolean[] {false, true, false, true}, nonPacked.bools)); } - public void testRepeatedFieldInitializedInReftypesCompatMode() { - NanoReferenceTypesCompat.TestAllTypesNano proto = new NanoReferenceTypesCompat.TestAllTypesNano(); - assertNotNull(proto.repeatedString); - } - private void assertRepeatedPackablesEqual( NanoRepeatedPackables.NonPacked nonPacked, NanoRepeatedPackables.Packed packed) { // Not using MessageNano.equals() -- that belongs to a separate test. @@ -3818,22 +3714,6 @@ public class NanoTest extends TestCase { assertTrue(Arrays.equals(nonPacked.enums, packed.enums)); } - public void testClone() throws Exception { - // A simple message. - AnotherMessage anotherMessage = new AnotherMessage(); - anotherMessage.string = "Hello"; - anotherMessage.value = true; - anotherMessage.integers = new int[] { 1, 2, 3 }; - - AnotherMessage clone = anotherMessage.clone(); - assertEquals(clone, anotherMessage); - - // Verify it was a deep clone - changes to the clone shouldn't affect the - // original. - clone.integers[1] = 100; - assertFalse(clone.equals(anotherMessage)); - } - private void assertHasWireData(MessageNano message, boolean expected) { byte[] bytes = MessageNano.toByteArray(message); int wireLength = bytes.length; diff --git a/java/src/test/java/com/google/protobuf/NestedBuildersTest.java b/java/src/test/java/com/google/protobuf/NestedBuildersTest.java deleted file mode 100644 index 2365312..0000000 --- a/java/src/test/java/com/google/protobuf/NestedBuildersTest.java +++ /dev/null @@ -1,185 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import protobuf_unittest.Vehicle; -import protobuf_unittest.Wheel; - -import junit.framework.TestCase; - -import java.util.List; -import java.util.ArrayList; - -/** - * Test cases that exercise end-to-end use cases involving - * {@link SingleFieldBuilder} and {@link RepeatedFieldBuilder}. - * - * @author jonp@google.com (Jon Perlow) - */ -public class NestedBuildersTest extends TestCase { - - public void testMessagesAndBuilders() { - Vehicle.Builder vehicleBuilder = Vehicle.newBuilder(); - vehicleBuilder.addWheelBuilder() - .setRadius(4) - .setWidth(1); - vehicleBuilder.addWheelBuilder() - .setRadius(4) - .setWidth(2); - vehicleBuilder.addWheelBuilder() - .setRadius(4) - .setWidth(3); - vehicleBuilder.addWheelBuilder() - .setRadius(4) - .setWidth(4); - vehicleBuilder.getEngineBuilder() - .setLiters(10); - - Vehicle vehicle = vehicleBuilder.build(); - assertEquals(4, vehicle.getWheelCount()); - for (int i = 0; i < 4; i++) { - Wheel wheel = vehicle.getWheel(i); - assertEquals(4, wheel.getRadius()); - assertEquals(i + 1, wheel.getWidth()); - } - assertEquals(10, vehicle.getEngine().getLiters()); - - for (int i = 0; i < 4; i++) { - vehicleBuilder.getWheelBuilder(i) - .setRadius(5) - .setWidth(i + 10); - } - vehicleBuilder.getEngineBuilder().setLiters(20); - - vehicle = vehicleBuilder.build(); - for (int i = 0; i < 4; i++) { - Wheel wheel = vehicle.getWheel(i); - assertEquals(5, wheel.getRadius()); - assertEquals(i + 10, wheel.getWidth()); - } - assertEquals(20, vehicle.getEngine().getLiters()); - assertTrue(vehicle.hasEngine()); - } - - public void testMessagesAreCached() { - Vehicle.Builder vehicleBuilder = Vehicle.newBuilder(); - vehicleBuilder.addWheelBuilder() - .setRadius(1) - .setWidth(2); - vehicleBuilder.addWheelBuilder() - .setRadius(3) - .setWidth(4); - vehicleBuilder.addWheelBuilder() - .setRadius(5) - .setWidth(6); - vehicleBuilder.addWheelBuilder() - .setRadius(7) - .setWidth(8); - - // Make sure messages are cached. - List<Wheel> wheels = new ArrayList<Wheel>(vehicleBuilder.getWheelList()); - for (int i = 0; i < wheels.size(); i++) { - assertSame(wheels.get(i), vehicleBuilder.getWheel(i)); - } - - // Now get builders and check they didn't change. - for (int i = 0; i < wheels.size(); i++) { - vehicleBuilder.getWheel(i); - } - for (int i = 0; i < wheels.size(); i++) { - assertSame(wheels.get(i), vehicleBuilder.getWheel(i)); - } - - // Change just one - vehicleBuilder.getWheelBuilder(3) - .setRadius(20).setWidth(20); - - // Now get wheels and check that only that one changed - for (int i = 0; i < wheels.size(); i++) { - if (i < 3) { - assertSame(wheels.get(i), vehicleBuilder.getWheel(i)); - } else { - assertNotSame(wheels.get(i), vehicleBuilder.getWheel(i)); - } - } - } - - public void testRemove_WithNestedBuilders() { - Vehicle.Builder vehicleBuilder = Vehicle.newBuilder(); - vehicleBuilder.addWheelBuilder() - .setRadius(1) - .setWidth(1); - vehicleBuilder.addWheelBuilder() - .setRadius(2) - .setWidth(2); - vehicleBuilder.removeWheel(0); - - assertEquals(1, vehicleBuilder.getWheelCount()); - assertEquals(2, vehicleBuilder.getWheel(0).getRadius()); - } - - public void testRemove_WithNestedMessages() { - Vehicle.Builder vehicleBuilder = Vehicle.newBuilder(); - vehicleBuilder.addWheel(Wheel.newBuilder() - .setRadius(1) - .setWidth(1)); - vehicleBuilder.addWheel(Wheel.newBuilder() - .setRadius(2) - .setWidth(2)); - vehicleBuilder.removeWheel(0); - - assertEquals(1, vehicleBuilder.getWheelCount()); - assertEquals(2, vehicleBuilder.getWheel(0).getRadius()); - } - - public void testMerge() { - Vehicle vehicle1 = Vehicle.newBuilder() - .addWheel(Wheel.newBuilder().setRadius(1).build()) - .addWheel(Wheel.newBuilder().setRadius(2).build()) - .build(); - - Vehicle vehicle2 = Vehicle.newBuilder() - .mergeFrom(vehicle1) - .build(); - // List should be the same -- no allocation - assertSame(vehicle1.getWheelList(), vehicle2.getWheelList()); - - Vehicle vehicle3 = vehicle1.toBuilder().build(); - assertSame(vehicle1.getWheelList(), vehicle3.getWheelList()); - } - - public void testGettingBuilderMarksFieldAsHaving() { - Vehicle.Builder vehicleBuilder = Vehicle.newBuilder(); - vehicleBuilder.getEngineBuilder(); - Vehicle vehicle = vehicleBuilder.buildPartial(); - assertTrue(vehicle.hasEngine()); - } -} diff --git a/java/src/test/java/com/google/protobuf/ParserTest.java b/java/src/test/java/com/google/protobuf/ParserTest.java deleted file mode 100644 index b11d8cb..0000000 --- a/java/src/test/java/com/google/protobuf/ParserTest.java +++ /dev/null @@ -1,381 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import com.google.protobuf.UnittestLite.TestAllTypesLite; -import com.google.protobuf.UnittestLite.TestPackedExtensionsLite; -import com.google.protobuf.UnittestLite.TestParsingMergeLite; -import protobuf_unittest.UnittestOptimizeFor.TestOptimizedForSize; -import protobuf_unittest.UnittestOptimizeFor.TestRequiredOptimizedForSize; -import protobuf_unittest.UnittestOptimizeFor; -import protobuf_unittest.UnittestProto.ForeignMessage; -import protobuf_unittest.UnittestProto.TestAllTypes; -import protobuf_unittest.UnittestProto.TestEmptyMessage; -import protobuf_unittest.UnittestProto.TestParsingMerge; -import protobuf_unittest.UnittestProto.TestRequired; -import protobuf_unittest.UnittestProto; - -import junit.framework.TestCase; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; - -/** - * Unit test for {@link Parser}. - * - * @author liujisi@google.com (Pherl Liu) - */ -public class ParserTest extends TestCase { - public void testGeneratedMessageParserSingleton() throws Exception { - for (int i = 0; i < 10; i++) { - assertEquals(TestAllTypes.PARSER, - TestUtil.getAllSet().getParserForType()); - } - } - - private void assertRoundTripEquals(MessageLite message, - ExtensionRegistryLite registry) - throws Exception { - final byte[] data = message.toByteArray(); - final int offset = 20; - final int length = data.length; - final int padding = 30; - Parser<? extends MessageLite> parser = message.getParserForType(); - assertMessageEquals(message, parser.parseFrom(data, registry)); - assertMessageEquals(message, parser.parseFrom( - generatePaddingArray(data, offset, padding), - offset, length, registry)); - assertMessageEquals(message, parser.parseFrom( - message.toByteString(), registry)); - assertMessageEquals(message, parser.parseFrom( - new ByteArrayInputStream(data), registry)); - assertMessageEquals(message, parser.parseFrom( - CodedInputStream.newInstance(data), registry)); - } - - @SuppressWarnings("unchecked") - private void assertRoundTripEquals(MessageLite message) throws Exception { - final byte[] data = message.toByteArray(); - final int offset = 20; - final int length = data.length; - final int padding = 30; - - Parser<MessageLite> parser = - (Parser<MessageLite>) message.getParserForType(); - assertMessageEquals(message, parser.parseFrom(data)); - assertMessageEquals(message, parser.parseFrom( - generatePaddingArray(data, offset, padding), - offset, length)); - assertMessageEquals(message, parser.parseFrom(message.toByteString())); - assertMessageEquals(message, parser.parseFrom( - new ByteArrayInputStream(data))); - assertMessageEquals(message, parser.parseFrom( - CodedInputStream.newInstance(data))); - } - - private void assertMessageEquals( - MessageLite expected, MessageLite actual) - throws Exception { - if (expected instanceof Message) { - assertEquals(expected, actual); - } else { - assertEquals(expected.toByteString(), actual.toByteString()); - } - } - - private byte[] generatePaddingArray(byte[] data, int offset, int padding) { - byte[] result = new byte[offset + data.length + padding]; - System.arraycopy(data, 0, result, offset, data.length); - return result; - } - - public void testNormalMessage() throws Exception { - assertRoundTripEquals(TestUtil.getAllSet()); - } - - - public void testParsePartial() throws Exception { - assertParsePartial(TestRequired.PARSER, - TestRequired.newBuilder().setA(1).buildPartial()); - } - - private <T extends MessageLite> void assertParsePartial( - Parser<T> parser, T partialMessage) throws Exception { - final String errorString = - "Should throw exceptions when the parsed message isn't initialized."; - - // parsePartialFrom should pass. - byte[] data = partialMessage.toByteArray(); - assertEquals(partialMessage, parser.parsePartialFrom(data)); - assertEquals(partialMessage, parser.parsePartialFrom( - partialMessage.toByteString())); - assertEquals(partialMessage, parser.parsePartialFrom( - new ByteArrayInputStream(data))); - assertEquals(partialMessage, parser.parsePartialFrom( - CodedInputStream.newInstance(data))); - - // parseFrom(ByteArray) - try { - parser.parseFrom(partialMessage.toByteArray()); - fail(errorString); - } catch (InvalidProtocolBufferException e) { - // pass. - } - - // parseFrom(ByteString) - try { - parser.parseFrom(partialMessage.toByteString()); - fail(errorString); - } catch (InvalidProtocolBufferException e) { - // pass. - } - - // parseFrom(InputStream) - try { - parser.parseFrom(new ByteArrayInputStream(partialMessage.toByteArray())); - fail(errorString); - } catch (IOException e) { - // pass. - } - - // parseFrom(CodedInputStream) - try { - parser.parseFrom(CodedInputStream.newInstance( - partialMessage.toByteArray())); - fail(errorString); - } catch (IOException e) { - // pass. - } - } - - public void testParseExtensions() throws Exception { - assertRoundTripEquals(TestUtil.getAllExtensionsSet(), - TestUtil.getExtensionRegistry()); - assertRoundTripEquals(TestUtil.getAllLiteExtensionsSet(), - TestUtil.getExtensionRegistryLite()); - } - - public void testParsePacked() throws Exception { - assertRoundTripEquals(TestUtil.getPackedSet()); - assertRoundTripEquals(TestUtil.getPackedExtensionsSet(), - TestUtil.getExtensionRegistry()); - assertRoundTripEquals(TestUtil.getLitePackedExtensionsSet(), - TestUtil.getExtensionRegistryLite()); - } - - public void testParseDelimitedTo() throws Exception { - // Write normal Message. - TestAllTypes normalMessage = TestUtil.getAllSet(); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - normalMessage.writeDelimitedTo(output); - - // Write MessageLite with packed extension fields. - TestPackedExtensionsLite packedMessage = - TestUtil.getLitePackedExtensionsSet(); - packedMessage.writeDelimitedTo(output); - - InputStream input = new ByteArrayInputStream(output.toByteArray()); - assertMessageEquals( - normalMessage, - normalMessage.getParserForType().parseDelimitedFrom(input)); - assertMessageEquals( - packedMessage, - packedMessage.getParserForType().parseDelimitedFrom( - input, TestUtil.getExtensionRegistryLite())); - } - - public void testParseUnknownFields() throws Exception { - // All fields will be treated as unknown fields in emptyMessage. - TestEmptyMessage emptyMessage = TestEmptyMessage.PARSER.parseFrom( - TestUtil.getAllSet().toByteString()); - assertEquals( - TestUtil.getAllSet().toByteString(), - emptyMessage.toByteString()); - } - - - public void testOptimizeForSize() throws Exception { - TestOptimizedForSize.Builder builder = TestOptimizedForSize.newBuilder(); - builder.setI(12).setMsg(ForeignMessage.newBuilder().setC(34).build()); - builder.setExtension(TestOptimizedForSize.testExtension, 56); - builder.setExtension(TestOptimizedForSize.testExtension2, - TestRequiredOptimizedForSize.newBuilder().setX(78).build()); - - TestOptimizedForSize message = builder.build(); - ExtensionRegistry registry = ExtensionRegistry.newInstance(); - UnittestOptimizeFor.registerAllExtensions(registry); - - assertRoundTripEquals(message, registry); - } - - /** Helper method for {@link #testParsingMerge()}.*/ - private void assertMessageMerged(TestAllTypes allTypes) - throws Exception { - assertEquals(3, allTypes.getOptionalInt32()); - assertEquals(2, allTypes.getOptionalInt64()); - assertEquals("hello", allTypes.getOptionalString()); - } - - /** Helper method for {@link #testParsingMergeLite()}.*/ - private void assertMessageMerged(TestAllTypesLite allTypes) - throws Exception { - assertEquals(3, allTypes.getOptionalInt32()); - assertEquals(2, allTypes.getOptionalInt64()); - assertEquals("hello", allTypes.getOptionalString()); - } - - public void testParsingMerge() throws Exception { - // Build messages. - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - TestAllTypes msg1 = builder.setOptionalInt32(1).build(); - builder.clear(); - TestAllTypes msg2 = builder.setOptionalInt64(2).build(); - builder.clear(); - TestAllTypes msg3 = builder.setOptionalInt32(3) - .setOptionalString("hello").build(); - - // Build groups. - TestParsingMerge.RepeatedFieldsGenerator.Group1 optionalG1 = - TestParsingMerge.RepeatedFieldsGenerator.Group1.newBuilder() - .setField1(msg1).build(); - TestParsingMerge.RepeatedFieldsGenerator.Group1 optionalG2 = - TestParsingMerge.RepeatedFieldsGenerator.Group1.newBuilder() - .setField1(msg2).build(); - TestParsingMerge.RepeatedFieldsGenerator.Group1 optionalG3 = - TestParsingMerge.RepeatedFieldsGenerator.Group1.newBuilder() - .setField1(msg3).build(); - TestParsingMerge.RepeatedFieldsGenerator.Group2 repeatedG1 = - TestParsingMerge.RepeatedFieldsGenerator.Group2.newBuilder() - .setField1(msg1).build(); - TestParsingMerge.RepeatedFieldsGenerator.Group2 repeatedG2 = - TestParsingMerge.RepeatedFieldsGenerator.Group2.newBuilder() - .setField1(msg2).build(); - TestParsingMerge.RepeatedFieldsGenerator.Group2 repeatedG3 = - TestParsingMerge.RepeatedFieldsGenerator.Group2.newBuilder() - .setField1(msg3).build(); - - // Assign and serialize RepeatedFieldsGenerator. - ByteString data = TestParsingMerge.RepeatedFieldsGenerator.newBuilder() - .addField1(msg1).addField1(msg2).addField1(msg3) - .addField2(msg1).addField2(msg2).addField2(msg3) - .addField3(msg1).addField3(msg2).addField3(msg3) - .addGroup1(optionalG1).addGroup1(optionalG2).addGroup1(optionalG3) - .addGroup2(repeatedG1).addGroup2(repeatedG2).addGroup2(repeatedG3) - .addExt1(msg1).addExt1(msg2).addExt1(msg3) - .addExt2(msg1).addExt2(msg2).addExt2(msg3) - .build().toByteString(); - - // Parse TestParsingMerge. - ExtensionRegistry registry = ExtensionRegistry.newInstance(); - UnittestProto.registerAllExtensions(registry); - TestParsingMerge parsingMerge = - TestParsingMerge.PARSER.parseFrom(data, registry); - - // Required and optional fields should be merged. - assertMessageMerged(parsingMerge.getRequiredAllTypes()); - assertMessageMerged(parsingMerge.getOptionalAllTypes()); - assertMessageMerged( - parsingMerge.getOptionalGroup().getOptionalGroupAllTypes()); - assertMessageMerged(parsingMerge.getExtension( - TestParsingMerge.optionalExt)); - - // Repeated fields should not be merged. - assertEquals(3, parsingMerge.getRepeatedAllTypesCount()); - assertEquals(3, parsingMerge.getRepeatedGroupCount()); - assertEquals(3, parsingMerge.getExtensionCount( - TestParsingMerge.repeatedExt)); - } - - public void testParsingMergeLite() throws Exception { - // Build messages. - TestAllTypesLite.Builder builder = - TestAllTypesLite.newBuilder(); - TestAllTypesLite msg1 = builder.setOptionalInt32(1).build(); - builder.clear(); - TestAllTypesLite msg2 = builder.setOptionalInt64(2).build(); - builder.clear(); - TestAllTypesLite msg3 = builder.setOptionalInt32(3) - .setOptionalString("hello").build(); - - // Build groups. - TestParsingMergeLite.RepeatedFieldsGenerator.Group1 optionalG1 = - TestParsingMergeLite.RepeatedFieldsGenerator.Group1.newBuilder() - .setField1(msg1).build(); - TestParsingMergeLite.RepeatedFieldsGenerator.Group1 optionalG2 = - TestParsingMergeLite.RepeatedFieldsGenerator.Group1.newBuilder() - .setField1(msg2).build(); - TestParsingMergeLite.RepeatedFieldsGenerator.Group1 optionalG3 = - TestParsingMergeLite.RepeatedFieldsGenerator.Group1.newBuilder() - .setField1(msg3).build(); - TestParsingMergeLite.RepeatedFieldsGenerator.Group2 repeatedG1 = - TestParsingMergeLite.RepeatedFieldsGenerator.Group2.newBuilder() - .setField1(msg1).build(); - TestParsingMergeLite.RepeatedFieldsGenerator.Group2 repeatedG2 = - TestParsingMergeLite.RepeatedFieldsGenerator.Group2.newBuilder() - .setField1(msg2).build(); - TestParsingMergeLite.RepeatedFieldsGenerator.Group2 repeatedG3 = - TestParsingMergeLite.RepeatedFieldsGenerator.Group2.newBuilder() - .setField1(msg3).build(); - - // Assign and serialize RepeatedFieldsGenerator. - ByteString data = TestParsingMergeLite.RepeatedFieldsGenerator.newBuilder() - .addField1(msg1).addField1(msg2).addField1(msg3) - .addField2(msg1).addField2(msg2).addField2(msg3) - .addField3(msg1).addField3(msg2).addField3(msg3) - .addGroup1(optionalG1).addGroup1(optionalG2).addGroup1(optionalG3) - .addGroup2(repeatedG1).addGroup2(repeatedG2).addGroup2(repeatedG3) - .addExt1(msg1).addExt1(msg2).addExt1(msg3) - .addExt2(msg1).addExt2(msg2).addExt2(msg3) - .build().toByteString(); - - // Parse TestParsingMergeLite. - ExtensionRegistry registry = ExtensionRegistry.newInstance(); - UnittestLite.registerAllExtensions(registry); - TestParsingMergeLite parsingMerge = - TestParsingMergeLite.PARSER.parseFrom(data, registry); - - // Required and optional fields should be merged. - assertMessageMerged(parsingMerge.getRequiredAllTypes()); - assertMessageMerged(parsingMerge.getOptionalAllTypes()); - assertMessageMerged( - parsingMerge.getOptionalGroup().getOptionalGroupAllTypes()); - assertMessageMerged(parsingMerge.getExtension( - TestParsingMergeLite.optionalExt)); - - // Repeated fields should not be merged. - assertEquals(3, parsingMerge.getRepeatedAllTypesCount()); - assertEquals(3, parsingMerge.getRepeatedGroupCount()); - assertEquals(3, parsingMerge.getExtensionCount( - TestParsingMergeLite.repeatedExt)); - } -} diff --git a/java/src/test/java/com/google/protobuf/RepeatedFieldBuilderTest.java b/java/src/test/java/com/google/protobuf/RepeatedFieldBuilderTest.java deleted file mode 100644 index 49d5232..0000000 --- a/java/src/test/java/com/google/protobuf/RepeatedFieldBuilderTest.java +++ /dev/null @@ -1,190 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import protobuf_unittest.UnittestProto.TestAllTypes; -import protobuf_unittest.UnittestProto.TestAllTypesOrBuilder; - -import junit.framework.TestCase; - -import java.util.Collections; -import java.util.List; - -/** - * Tests for {@link RepeatedFieldBuilder}. This tests basic functionality. - * More extensive testing is provided via other tests that exercise the - * builder. - * - * @author jonp@google.com (Jon Perlow) - */ -public class RepeatedFieldBuilderTest extends TestCase { - - public void testBasicUse() { - TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent(); - RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder, - TestAllTypesOrBuilder> builder = newRepeatedFieldBuilder(mockParent); - builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(0).build()); - builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(1).build()); - assertEquals(0, builder.getMessage(0).getOptionalInt32()); - assertEquals(1, builder.getMessage(1).getOptionalInt32()); - - List<TestAllTypes> list = builder.build(); - assertEquals(2, list.size()); - assertEquals(0, list.get(0).getOptionalInt32()); - assertEquals(1, list.get(1).getOptionalInt32()); - assertIsUnmodifiable(list); - - // Make sure it doesn't change. - List<TestAllTypes> list2 = builder.build(); - assertSame(list, list2); - assertEquals(0, mockParent.getInvalidationCount()); - } - - public void testGoingBackAndForth() { - TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent(); - RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder, - TestAllTypesOrBuilder> builder = newRepeatedFieldBuilder(mockParent); - builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(0).build()); - builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(1).build()); - assertEquals(0, builder.getMessage(0).getOptionalInt32()); - assertEquals(1, builder.getMessage(1).getOptionalInt32()); - - // Convert to list - List<TestAllTypes> list = builder.build(); - assertEquals(2, list.size()); - assertEquals(0, list.get(0).getOptionalInt32()); - assertEquals(1, list.get(1).getOptionalInt32()); - assertIsUnmodifiable(list); - - // Update 0th item - assertEquals(0, mockParent.getInvalidationCount()); - builder.getBuilder(0).setOptionalString("foo"); - assertEquals(1, mockParent.getInvalidationCount()); - list = builder.build(); - assertEquals(2, list.size()); - assertEquals(0, list.get(0).getOptionalInt32()); - assertEquals("foo", list.get(0).getOptionalString()); - assertEquals(1, list.get(1).getOptionalInt32()); - assertIsUnmodifiable(list); - assertEquals(1, mockParent.getInvalidationCount()); - } - - public void testVariousMethods() { - TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent(); - RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder, - TestAllTypesOrBuilder> builder = newRepeatedFieldBuilder(mockParent); - builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(1).build()); - builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(2).build()); - builder.addBuilder(0, TestAllTypes.getDefaultInstance()) - .setOptionalInt32(0); - builder.addBuilder(TestAllTypes.getDefaultInstance()).setOptionalInt32(3); - - assertEquals(0, builder.getMessage(0).getOptionalInt32()); - assertEquals(1, builder.getMessage(1).getOptionalInt32()); - assertEquals(2, builder.getMessage(2).getOptionalInt32()); - assertEquals(3, builder.getMessage(3).getOptionalInt32()); - - assertEquals(0, mockParent.getInvalidationCount()); - List<TestAllTypes> messages = builder.build(); - assertEquals(4, messages.size()); - assertSame(messages, builder.build()); // expect same list - - // Remove a message. - builder.remove(2); - assertEquals(1, mockParent.getInvalidationCount()); - assertEquals(3, builder.getCount()); - assertEquals(0, builder.getMessage(0).getOptionalInt32()); - assertEquals(1, builder.getMessage(1).getOptionalInt32()); - assertEquals(3, builder.getMessage(2).getOptionalInt32()); - - // Remove a builder. - builder.remove(0); - assertEquals(1, mockParent.getInvalidationCount()); - assertEquals(2, builder.getCount()); - assertEquals(1, builder.getMessage(0).getOptionalInt32()); - assertEquals(3, builder.getMessage(1).getOptionalInt32()); - - // Test clear. - builder.clear(); - assertEquals(1, mockParent.getInvalidationCount()); - assertEquals(0, builder.getCount()); - assertTrue(builder.isEmpty()); - } - - public void testLists() { - TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent(); - RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder, - TestAllTypesOrBuilder> builder = newRepeatedFieldBuilder(mockParent); - builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(1).build()); - builder.addMessage(0, - TestAllTypes.newBuilder().setOptionalInt32(0).build()); - assertEquals(0, builder.getMessage(0).getOptionalInt32()); - assertEquals(1, builder.getMessage(1).getOptionalInt32()); - - // Use list of builders. - List<TestAllTypes.Builder> builders = builder.getBuilderList(); - assertEquals(0, builders.get(0).getOptionalInt32()); - assertEquals(1, builders.get(1).getOptionalInt32()); - builders.get(0).setOptionalInt32(10); - builders.get(1).setOptionalInt32(11); - - // Use list of protos - List<TestAllTypes> protos = builder.getMessageList(); - assertEquals(10, protos.get(0).getOptionalInt32()); - assertEquals(11, protos.get(1).getOptionalInt32()); - - // Add an item to the builders and verify it's updated in both - builder.addMessage(TestAllTypes.newBuilder().setOptionalInt32(12).build()); - assertEquals(3, builders.size()); - assertEquals(3, protos.size()); - } - - private void assertIsUnmodifiable(List<?> list) { - if (list == Collections.emptyList()) { - // OKAY -- Need to check this b/c EmptyList allows you to call clear. - } else { - try { - list.clear(); - fail("List wasn't immutable"); - } catch (UnsupportedOperationException e) { - // good - } - } - } - - private RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder, - TestAllTypesOrBuilder> - newRepeatedFieldBuilder(GeneratedMessage.BuilderParent parent) { - return new RepeatedFieldBuilder<TestAllTypes, TestAllTypes.Builder, - TestAllTypesOrBuilder>(Collections.<TestAllTypes>emptyList(), false, - parent, false); - } -} diff --git a/java/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java b/java/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java deleted file mode 100644 index 212f8d6..0000000 --- a/java/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java +++ /dev/null @@ -1,97 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import java.io.UnsupportedEncodingException; -import java.util.Iterator; - -/** - * This class tests {@link RopeByteString#substring(int, int)} by inheriting the tests from - * {@link LiteralByteStringTest}. Only a couple of methods are overridden. - * - * @author carlanton@google.com (Carl Haverl) - */ -public class RopeByteStringSubstringTest extends LiteralByteStringTest { - - @Override - protected void setUp() throws Exception { - classUnderTest = "RopeByteString"; - byte[] sourceBytes = ByteStringTest.getTestBytes(22341, 22337766L); - Iterator<ByteString> iter = ByteStringTest.makeConcretePieces(sourceBytes).iterator(); - ByteString sourceString = iter.next(); - while (iter.hasNext()) { - sourceString = sourceString.concat(iter.next()); - } - - int from = 1130; - int to = sourceBytes.length - 5555; - stringUnderTest = sourceString.substring(from, to); - referenceBytes = new byte[to - from]; - System.arraycopy(sourceBytes, from, referenceBytes, 0, to - from); - expectedHashCode = -1259260680; - } - - @Override - public void testGetTreeDepth() { - assertEquals(classUnderTest + " must have the expected tree depth", - 3, stringUnderTest.getTreeDepth()); - } - - @Override - public void testToString() throws UnsupportedEncodingException { - String sourceString = "I love unicode \u1234\u5678 characters"; - ByteString sourceByteString = ByteString.copyFromUtf8(sourceString); - int copies = 250; - - // By building the RopeByteString by concatenating, this is actually a fairly strenuous test. - StringBuilder builder = new StringBuilder(copies * sourceString.length()); - ByteString unicode = ByteString.EMPTY; - for (int i = 0; i < copies; ++i) { - builder.append(sourceString); - unicode = RopeByteString.concatenate(unicode, sourceByteString); - } - String testString = builder.toString(); - - // Do the substring part - testString = testString.substring(2, testString.length() - 6); - unicode = unicode.substring(2, unicode.size() - 6); - - assertEquals(classUnderTest + " from string must have the expected type", - classUnderTest, getActualClassName(unicode)); - String roundTripString = unicode.toString(UTF_8); - assertEquals(classUnderTest + " unicode bytes must match", - testString, roundTripString); - ByteString flatString = ByteString.copyFromUtf8(testString); - assertEquals(classUnderTest + " string must equal the flat string", flatString, unicode); - assertEquals(classUnderTest + " string must must have same hashCode as the flat string", - flatString.hashCode(), unicode.hashCode()); - } -} diff --git a/java/src/test/java/com/google/protobuf/RopeByteStringTest.java b/java/src/test/java/com/google/protobuf/RopeByteStringTest.java deleted file mode 100644 index 9676f52..0000000 --- a/java/src/test/java/com/google/protobuf/RopeByteStringTest.java +++ /dev/null @@ -1,115 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import java.io.UnsupportedEncodingException; -import java.util.Arrays; -import java.util.Iterator; - -/** - * This class tests {@link RopeByteString} by inheriting the tests from - * {@link LiteralByteStringTest}. Only a couple of methods are overridden. - * - * <p>A full test of the result of {@link RopeByteString#substring(int, int)} is found in the - * separate class {@link RopeByteStringSubstringTest}. - * - * @author carlanton@google.com (Carl Haverl) - */ -public class RopeByteStringTest extends LiteralByteStringTest { - - @Override - protected void setUp() throws Exception { - classUnderTest = "RopeByteString"; - referenceBytes = ByteStringTest.getTestBytes(22341, 22337766L); - Iterator<ByteString> iter = ByteStringTest.makeConcretePieces(referenceBytes).iterator(); - stringUnderTest = iter.next(); - while (iter.hasNext()) { - stringUnderTest = stringUnderTest.concat(iter.next()); - } - expectedHashCode = -1214197238; - } - - @Override - public void testGetTreeDepth() { - assertEquals(classUnderTest + " must have the expected tree depth", - 4, stringUnderTest.getTreeDepth()); - } - - public void testBalance() { - int numberOfPieces = 10000; - int pieceSize = 64; - byte[] testBytes = ByteStringTest.getTestBytes(numberOfPieces * pieceSize, 113377L); - - // Build up a big ByteString from smaller pieces to force a rebalance - ByteString concatenated = ByteString.EMPTY; - for (int i = 0; i < numberOfPieces; ++i) { - concatenated = concatenated.concat(ByteString.copyFrom(testBytes, i * pieceSize, pieceSize)); - } - - assertEquals(classUnderTest + " from string must have the expected type", - classUnderTest, getActualClassName(concatenated)); - assertTrue(classUnderTest + " underlying bytes must match after balancing", - Arrays.equals(testBytes, concatenated.toByteArray())); - ByteString testString = ByteString.copyFrom(testBytes); - assertTrue(classUnderTest + " balanced string must equal flat string", - concatenated.equals(testString)); - assertTrue(classUnderTest + " flat string must equal balanced string", - testString.equals(concatenated)); - assertEquals(classUnderTest + " balanced string must have same hash code as flat string", - testString.hashCode(), concatenated.hashCode()); - } - - @Override - public void testToString() throws UnsupportedEncodingException { - String sourceString = "I love unicode \u1234\u5678 characters"; - ByteString sourceByteString = ByteString.copyFromUtf8(sourceString); - int copies = 250; - - // By building the RopeByteString by concatenating, this is actually a fairly strenuous test. - StringBuilder builder = new StringBuilder(copies * sourceString.length()); - ByteString unicode = ByteString.EMPTY; - for (int i = 0; i < copies; ++i) { - builder.append(sourceString); - unicode = RopeByteString.concatenate(unicode, sourceByteString); - } - String testString = builder.toString(); - - assertEquals(classUnderTest + " from string must have the expected type", - classUnderTest, getActualClassName(unicode)); - String roundTripString = unicode.toString(UTF_8); - assertEquals(classUnderTest + " unicode bytes must match", - testString, roundTripString); - ByteString flatString = ByteString.copyFromUtf8(testString); - assertEquals(classUnderTest + " string must equal the flat string", flatString, unicode); - assertEquals(classUnderTest + " string must must have same hashCode as the flat string", - flatString.hashCode(), unicode.hashCode()); - } -} diff --git a/java/src/test/java/com/google/protobuf/ServiceTest.java b/java/src/test/java/com/google/protobuf/ServiceTest.java index ff980d6..e10322d 100644 --- a/java/src/test/java/com/google/protobuf/ServiceTest.java +++ b/java/src/test/java/com/google/protobuf/ServiceTest.java @@ -1,6 +1,6 @@ // Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ +// http://code.google.com/p/protobuf/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -205,6 +205,12 @@ public class ServiceTest extends TestCase { MethodDescriptor fooMethod = ServiceWithNoOuter.getDescriptor().findMethodByName("Foo"); MessageWithNoOuter request = MessageWithNoOuter.getDefaultInstance(); + RpcCallback<Message> callback = new RpcCallback<Message>() { + public void run(Message parameter) { + // No reason this should be run. + fail(); + } + }; TestAllTypes expectedResponse = TestAllTypes.getDefaultInstance(); EasyMock.expect(impl.foo(EasyMock.same(controller), EasyMock.same(request))) @@ -244,14 +250,6 @@ public class ServiceTest extends TestCase { // make assumptions, so I'm just going to accept any character as the // separator. assertTrue(fullName.startsWith(outerName)); - - if (!Service.class.isAssignableFrom(innerClass) && - !Message.class.isAssignableFrom(innerClass) && - !ProtocolMessageEnum.class.isAssignableFrom(innerClass)) { - // Ignore any classes not generated by the base code generator. - continue; - } - innerClassNames.add(fullName.substring(outerName.length() + 1)); } diff --git a/java/src/test/java/com/google/protobuf/SingleFieldBuilderTest.java b/java/src/test/java/com/google/protobuf/SingleFieldBuilderTest.java deleted file mode 100644 index 58b8000..0000000 --- a/java/src/test/java/com/google/protobuf/SingleFieldBuilderTest.java +++ /dev/null @@ -1,155 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import protobuf_unittest.UnittestProto.TestAllTypes; -import protobuf_unittest.UnittestProto.TestAllTypesOrBuilder; - -import junit.framework.TestCase; - -/** - * Tests for {@link SingleFieldBuilder}. This tests basic functionality. - * More extensive testing is provided via other tests that exercise the - * builder. - * - * @author jonp@google.com (Jon Perlow) - */ -public class SingleFieldBuilderTest extends TestCase { - - public void testBasicUseAndInvalidations() { - TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent(); - SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder, - TestAllTypesOrBuilder> builder = - new SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder, - TestAllTypesOrBuilder>( - TestAllTypes.getDefaultInstance(), - mockParent, - false); - assertSame(TestAllTypes.getDefaultInstance(), builder.getMessage()); - assertEquals(TestAllTypes.getDefaultInstance(), - builder.getBuilder().buildPartial()); - assertEquals(0, mockParent.getInvalidationCount()); - - builder.getBuilder().setOptionalInt32(10); - assertEquals(0, mockParent.getInvalidationCount()); - TestAllTypes message = builder.build(); - assertEquals(10, message.getOptionalInt32()); - - // Test that we receive invalidations now that build has been called. - assertEquals(0, mockParent.getInvalidationCount()); - builder.getBuilder().setOptionalInt32(20); - assertEquals(1, mockParent.getInvalidationCount()); - - // Test that we don't keep getting invalidations on every change - builder.getBuilder().setOptionalInt32(30); - assertEquals(1, mockParent.getInvalidationCount()); - - } - - public void testSetMessage() { - TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent(); - SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder, - TestAllTypesOrBuilder> builder = - new SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder, - TestAllTypesOrBuilder>( - TestAllTypes.getDefaultInstance(), - mockParent, - false); - builder.setMessage(TestAllTypes.newBuilder().setOptionalInt32(0).build()); - assertEquals(0, builder.getMessage().getOptionalInt32()); - - // Update message using the builder - builder.getBuilder().setOptionalInt32(1); - assertEquals(0, mockParent.getInvalidationCount()); - assertEquals(1, builder.getBuilder().getOptionalInt32()); - assertEquals(1, builder.getMessage().getOptionalInt32()); - builder.build(); - builder.getBuilder().setOptionalInt32(2); - assertEquals(2, builder.getBuilder().getOptionalInt32()); - assertEquals(2, builder.getMessage().getOptionalInt32()); - - // Make sure message stays cached - assertSame(builder.getMessage(), builder.getMessage()); - } - - public void testClear() { - TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent(); - SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder, - TestAllTypesOrBuilder> builder = - new SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder, - TestAllTypesOrBuilder>( - TestAllTypes.getDefaultInstance(), - mockParent, - false); - builder.setMessage(TestAllTypes.newBuilder().setOptionalInt32(0).build()); - assertNotSame(TestAllTypes.getDefaultInstance(), builder.getMessage()); - builder.clear(); - assertSame(TestAllTypes.getDefaultInstance(), builder.getMessage()); - - builder.getBuilder().setOptionalInt32(1); - assertNotSame(TestAllTypes.getDefaultInstance(), builder.getMessage()); - builder.clear(); - assertSame(TestAllTypes.getDefaultInstance(), builder.getMessage()); - } - - public void testMerge() { - TestUtil.MockBuilderParent mockParent = new TestUtil.MockBuilderParent(); - SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder, - TestAllTypesOrBuilder> builder = - new SingleFieldBuilder<TestAllTypes, TestAllTypes.Builder, - TestAllTypesOrBuilder>( - TestAllTypes.getDefaultInstance(), - mockParent, - false); - - // Merge into default field. - builder.mergeFrom(TestAllTypes.getDefaultInstance()); - assertSame(TestAllTypes.getDefaultInstance(), builder.getMessage()); - - // Merge into non-default field on existing builder. - builder.getBuilder().setOptionalInt32(2); - builder.mergeFrom(TestAllTypes.newBuilder() - .setOptionalDouble(4.0) - .buildPartial()); - assertEquals(2, builder.getMessage().getOptionalInt32()); - assertEquals(4.0, builder.getMessage().getOptionalDouble()); - - // Merge into non-default field on existing message - builder.setMessage(TestAllTypes.newBuilder() - .setOptionalInt32(10) - .buildPartial()); - builder.mergeFrom(TestAllTypes.newBuilder() - .setOptionalDouble(5.0) - .buildPartial()); - assertEquals(10, builder.getMessage().getOptionalInt32()); - assertEquals(5.0, builder.getMessage().getOptionalDouble()); - } -} diff --git a/java/src/test/java/com/google/protobuf/SmallSortedMapTest.java b/java/src/test/java/com/google/protobuf/SmallSortedMapTest.java deleted file mode 100644 index 366086d..0000000 --- a/java/src/test/java/com/google/protobuf/SmallSortedMapTest.java +++ /dev/null @@ -1,420 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import junit.framework.TestCase; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; - -/** - * @author darick@google.com Darick Tong - */ -public class SmallSortedMapTest extends TestCase { - // java.util.AbstractMap.SimpleEntry is private in JDK 1.5. We re-implement it - // here for JDK 1.5 users. - private static class SimpleEntry<K, V> implements Map.Entry<K, V> { - private final K key; - private V value; - - SimpleEntry(K key, V value) { - this.key = key; - this.value = value; - } - - public K getKey() { - return key; - } - - public V getValue() { - return value; - } - - public V setValue(V value) { - V oldValue = this.value; - this.value = value; - return oldValue; - } - - private static boolean eq(Object o1, Object o2) { - return o1 == null ? o2 == null : o1.equals(o2); - } - - @Override - public boolean equals(Object o) { - if (!(o instanceof Map.Entry)) - return false; - Map.Entry e = (Map.Entry) o; - return eq(key, e.getKey()) && eq(value, e.getValue()); - } - - @Override - public int hashCode() { - return ((key == null) ? 0 : key.hashCode()) ^ - ((value == null) ? 0 : value.hashCode()); - } - } - - public void testPutAndGetArrayEntriesOnly() { - runPutAndGetTest(3); - } - - public void testPutAndGetOverflowEntries() { - runPutAndGetTest(6); - } - - private void runPutAndGetTest(int numElements) { - // Test with even and odd arraySize - SmallSortedMap<Integer, Integer> map1 = - SmallSortedMap.newInstanceForTest(3); - SmallSortedMap<Integer, Integer> map2 = - SmallSortedMap.newInstanceForTest(4); - SmallSortedMap<Integer, Integer> map3 = - SmallSortedMap.newInstanceForTest(3); - SmallSortedMap<Integer, Integer> map4 = - SmallSortedMap.newInstanceForTest(4); - - // Test with puts in ascending order. - for (int i = 0; i < numElements; i++) { - assertNull(map1.put(i, i + 1)); - assertNull(map2.put(i, i + 1)); - } - // Test with puts in descending order. - for (int i = numElements - 1; i >= 0; i--) { - assertNull(map3.put(i, i + 1)); - assertNull(map4.put(i, i + 1)); - } - - assertEquals(Math.min(3, numElements), map1.getNumArrayEntries()); - assertEquals(Math.min(4, numElements), map2.getNumArrayEntries()); - assertEquals(Math.min(3, numElements), map3.getNumArrayEntries()); - assertEquals(Math.min(4, numElements), map4.getNumArrayEntries()); - - List<SmallSortedMap<Integer, Integer>> allMaps = - new ArrayList<SmallSortedMap<Integer, Integer>>(); - allMaps.add(map1); - allMaps.add(map2); - allMaps.add(map3); - allMaps.add(map4); - - for (SmallSortedMap<Integer, Integer> map : allMaps) { - assertEquals(numElements, map.size()); - for (int i = 0; i < numElements; i++) { - assertEquals(new Integer(i + 1), map.get(i)); - } - } - - assertEquals(map1, map2); - assertEquals(map2, map3); - assertEquals(map3, map4); - } - - public void testReplacingPut() { - SmallSortedMap<Integer, Integer> map = SmallSortedMap.newInstanceForTest(3); - for (int i = 0; i < 6; i++) { - assertNull(map.put(i, i + 1)); - assertNull(map.remove(i + 1)); - } - for (int i = 0; i < 6; i++) { - assertEquals(new Integer(i + 1), map.put(i, i + 2)); - } - } - - public void testRemove() { - SmallSortedMap<Integer, Integer> map = SmallSortedMap.newInstanceForTest(3); - for (int i = 0; i < 6; i++) { - assertNull(map.put(i, i + 1)); - assertNull(map.remove(i + 1)); - } - - assertEquals(3, map.getNumArrayEntries()); - assertEquals(3, map.getNumOverflowEntries()); - assertEquals(6, map.size()); - assertEquals(makeSortedKeySet(0, 1, 2, 3, 4, 5), map.keySet()); - - assertEquals(new Integer(2), map.remove(1)); - assertEquals(3, map.getNumArrayEntries()); - assertEquals(2, map.getNumOverflowEntries()); - assertEquals(5, map.size()); - assertEquals(makeSortedKeySet(0, 2, 3, 4, 5), map.keySet()); - - assertEquals(new Integer(5), map.remove(4)); - assertEquals(3, map.getNumArrayEntries()); - assertEquals(1, map.getNumOverflowEntries()); - assertEquals(4, map.size()); - assertEquals(makeSortedKeySet(0, 2, 3, 5), map.keySet()); - - assertEquals(new Integer(4), map.remove(3)); - assertEquals(3, map.getNumArrayEntries()); - assertEquals(0, map.getNumOverflowEntries()); - assertEquals(3, map.size()); - assertEquals(makeSortedKeySet(0, 2, 5), map.keySet()); - - assertNull(map.remove(3)); - assertEquals(3, map.getNumArrayEntries()); - assertEquals(0, map.getNumOverflowEntries()); - assertEquals(3, map.size()); - - assertEquals(new Integer(1), map.remove(0)); - assertEquals(2, map.getNumArrayEntries()); - assertEquals(0, map.getNumOverflowEntries()); - assertEquals(2, map.size()); - } - - public void testClear() { - SmallSortedMap<Integer, Integer> map = SmallSortedMap.newInstanceForTest(3); - for (int i = 0; i < 6; i++) { - assertNull(map.put(i, i + 1)); - } - map.clear(); - assertEquals(0, map.getNumArrayEntries()); - assertEquals(0, map.getNumOverflowEntries()); - assertEquals(0, map.size()); - } - - public void testGetArrayEntryAndOverflowEntries() { - SmallSortedMap<Integer, Integer> map = SmallSortedMap.newInstanceForTest(3); - for (int i = 0; i < 6; i++) { - assertNull(map.put(i, i + 1)); - } - assertEquals(3, map.getNumArrayEntries()); - for (int i = 0; i < 3; i++) { - Map.Entry<Integer, Integer> entry = map.getArrayEntryAt(i); - assertEquals(new Integer(i), entry.getKey()); - assertEquals(new Integer(i + 1), entry.getValue()); - } - Iterator<Map.Entry<Integer, Integer>> it = - map.getOverflowEntries().iterator(); - for (int i = 3; i < 6; i++) { - assertTrue(it.hasNext()); - Map.Entry<Integer, Integer> entry = it.next(); - assertEquals(new Integer(i), entry.getKey()); - assertEquals(new Integer(i + 1), entry.getValue()); - } - assertFalse(it.hasNext()); - } - - public void testEntrySetContains() { - SmallSortedMap<Integer, Integer> map = SmallSortedMap.newInstanceForTest(3); - for (int i = 0; i < 6; i++) { - assertNull(map.put(i, i + 1)); - } - Set<Map.Entry<Integer, Integer>> entrySet = map.entrySet(); - for (int i = 0; i < 6; i++) { - assertTrue( - entrySet.contains(new SimpleEntry<Integer, Integer>(i, i + 1))); - assertFalse( - entrySet.contains(new SimpleEntry<Integer, Integer>(i, i))); - } - } - - public void testEntrySetAdd() { - SmallSortedMap<Integer, Integer> map = SmallSortedMap.newInstanceForTest(3); - Set<Map.Entry<Integer, Integer>> entrySet = map.entrySet(); - for (int i = 0; i < 6; i++) { - Map.Entry<Integer, Integer> entry = - new SimpleEntry<Integer, Integer>(i, i + 1); - assertTrue(entrySet.add(entry)); - assertFalse(entrySet.add(entry)); - } - for (int i = 0; i < 6; i++) { - assertEquals(new Integer(i + 1), map.get(i)); - } - assertEquals(3, map.getNumArrayEntries()); - assertEquals(3, map.getNumOverflowEntries()); - assertEquals(6, map.size()); - } - - public void testEntrySetRemove() { - SmallSortedMap<Integer, Integer> map = SmallSortedMap.newInstanceForTest(3); - Set<Map.Entry<Integer, Integer>> entrySet = map.entrySet(); - for (int i = 0; i < 6; i++) { - assertNull(map.put(i, i + 1)); - } - for (int i = 0; i < 6; i++) { - Map.Entry<Integer, Integer> entry = - new SimpleEntry<Integer, Integer>(i, i + 1); - assertTrue(entrySet.remove(entry)); - assertFalse(entrySet.remove(entry)); - } - assertTrue(map.isEmpty()); - assertEquals(0, map.getNumArrayEntries()); - assertEquals(0, map.getNumOverflowEntries()); - assertEquals(0, map.size()); - } - - public void testEntrySetClear() { - SmallSortedMap<Integer, Integer> map = SmallSortedMap.newInstanceForTest(3); - for (int i = 0; i < 6; i++) { - assertNull(map.put(i, i + 1)); - } - map.entrySet().clear(); - assertTrue(map.isEmpty()); - assertEquals(0, map.getNumArrayEntries()); - assertEquals(0, map.getNumOverflowEntries()); - assertEquals(0, map.size()); - } - - public void testEntrySetIteratorNext() { - SmallSortedMap<Integer, Integer> map = SmallSortedMap.newInstanceForTest(3); - for (int i = 0; i < 6; i++) { - assertNull(map.put(i, i + 1)); - } - Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator(); - for (int i = 0; i < 6; i++) { - assertTrue(it.hasNext()); - Map.Entry<Integer, Integer> entry = it.next(); - assertEquals(new Integer(i), entry.getKey()); - assertEquals(new Integer(i + 1), entry.getValue()); - } - assertFalse(it.hasNext()); - } - - public void testEntrySetIteratorRemove() { - SmallSortedMap<Integer, Integer> map = SmallSortedMap.newInstanceForTest(3); - for (int i = 0; i < 6; i++) { - assertNull(map.put(i, i + 1)); - } - Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator(); - for (int i = 0; i < 6; i++) { - assertTrue(map.containsKey(i)); - it.next(); - it.remove(); - assertFalse(map.containsKey(i)); - assertEquals(6 - i - 1, map.size()); - } - } - - public void testMapEntryModification() { - SmallSortedMap<Integer, Integer> map = SmallSortedMap.newInstanceForTest(3); - for (int i = 0; i < 6; i++) { - assertNull(map.put(i, i + 1)); - } - Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator(); - for (int i = 0; i < 6; i++) { - Map.Entry<Integer, Integer> entry = it.next(); - entry.setValue(i + 23); - } - for (int i = 0; i < 6; i++) { - assertEquals(new Integer(i + 23), map.get(i)); - } - } - - public void testMakeImmutable() { - SmallSortedMap<Integer, Integer> map = SmallSortedMap.newInstanceForTest(3); - for (int i = 0; i < 6; i++) { - assertNull(map.put(i, i + 1)); - } - map.makeImmutable(); - assertEquals(new Integer(1), map.get(0)); - assertEquals(6, map.size()); - - try { - map.put(23, 23); - fail("Expected UnsupportedOperationException"); - } catch (UnsupportedOperationException expected) { - } - - Map<Integer, Integer> other = new HashMap<Integer, Integer>(); - other.put(23, 23); - try { - map.putAll(other); - fail("Expected UnsupportedOperationException"); - } catch (UnsupportedOperationException expected) { - } - - try { - map.remove(0); - fail("Expected UnsupportedOperationException"); - } catch (UnsupportedOperationException expected) { - } - - try { - map.clear(); - fail("Expected UnsupportedOperationException"); - } catch (UnsupportedOperationException expected) { - } - - Set<Map.Entry<Integer, Integer>> entrySet = map.entrySet(); - try { - entrySet.clear(); - fail("Expected UnsupportedOperationException"); - } catch (UnsupportedOperationException expected) { - } - - Iterator<Map.Entry<Integer, Integer>> it = entrySet.iterator(); - while (it.hasNext()) { - Map.Entry<Integer, Integer> entry = it.next(); - try { - entry.setValue(0); - fail("Expected UnsupportedOperationException"); - } catch (UnsupportedOperationException expected) { - } - try { - it.remove(); - fail("Expected UnsupportedOperationException"); - } catch (UnsupportedOperationException expected) { - } - } - - Set<Integer> keySet = map.keySet(); - try { - keySet.clear(); - fail("Expected UnsupportedOperationException"); - } catch (UnsupportedOperationException expected) { - } - - Iterator<Integer> keys = keySet.iterator(); - while (keys.hasNext()) { - Integer key = keys.next(); - try { - keySet.remove(key); - fail("Expected UnsupportedOperationException"); - } catch (UnsupportedOperationException expected) { - } - try { - keys.remove(); - fail("Expected UnsupportedOperationException"); - } catch (UnsupportedOperationException expected) { - } - } - } - - private Set<Integer> makeSortedKeySet(Integer... keys) { - return new TreeSet<Integer>(Arrays.<Integer>asList(keys)); - } -} diff --git a/java/src/test/java/com/google/protobuf/TestBadIdentifiers.java b/java/src/test/java/com/google/protobuf/TestBadIdentifiers.java deleted file mode 100644 index 614ac7f..0000000 --- a/java/src/test/java/com/google/protobuf/TestBadIdentifiers.java +++ /dev/null @@ -1,96 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import junit.framework.TestCase; - -/** - * Tests that proto2 api generation doesn't cause compile errors when - * compiling protocol buffers that have names that would otherwise conflict - * if not fully qualified (like @Deprecated and @Override). - * - * @author jonp@google.com (Jon Perlow) - */ -public class TestBadIdentifiers extends TestCase { - - public void testCompilation() { - // If this compiles, it means the generation was correct. - TestBadIdentifiersProto.Deprecated.newBuilder(); - TestBadIdentifiersProto.Override.newBuilder(); - } - - public void testGetDescriptor() { - Descriptors.FileDescriptor fileDescriptor = - TestBadIdentifiersProto.getDescriptor(); - String descriptorField = TestBadIdentifiersProto.Descriptor - .getDefaultInstance().getDescriptor(); - Descriptors.Descriptor protoDescriptor = TestBadIdentifiersProto.Descriptor - .getDefaultInstance().getDescriptorForType(); - String nestedDescriptorField = TestBadIdentifiersProto.Descriptor - .NestedDescriptor.getDefaultInstance().getDescriptor(); - Descriptors.Descriptor nestedProtoDescriptor = TestBadIdentifiersProto - .Descriptor.NestedDescriptor.getDefaultInstance() - .getDescriptorForType(); - } - - public void testConflictingFieldNames() throws Exception { - TestBadIdentifiersProto.TestConflictingFieldNames message = - TestBadIdentifiersProto.TestConflictingFieldNames.getDefaultInstance(); - // Make sure generated accessors are properly named. - assertEquals(0, message.getInt32Field1Count()); - assertEquals(0, message.getEnumField2Count()); - assertEquals(0, message.getStringField3Count()); - assertEquals(0, message.getBytesField4Count()); - assertEquals(0, message.getMessageField5Count()); - - assertEquals(0, message.getInt32FieldCount11()); - assertEquals(1, message.getEnumFieldCount12().getNumber()); - assertEquals("", message.getStringFieldCount13()); - assertEquals(ByteString.EMPTY, message.getBytesFieldCount14()); - assertEquals(0, message.getMessageFieldCount15().getSerializedSize()); - - assertEquals(0, message.getInt32Field21Count()); - assertEquals(0, message.getEnumField22Count()); - assertEquals(0, message.getStringField23Count()); - assertEquals(0, message.getBytesField24Count()); - assertEquals(0, message.getMessageField25Count()); - - assertEquals(0, message.getInt32Field1List().size()); - assertEquals(0, message.getInt32FieldList31()); - - assertEquals(0, message.getInt64FieldCount()); - assertEquals(0L, message.getExtension( - TestBadIdentifiersProto.TestConflictingFieldNames.int64FieldCount).longValue()); - assertEquals(0L, message.getExtension( - TestBadIdentifiersProto.TestConflictingFieldNames.int64FieldList).longValue()); - - } -} diff --git a/java/src/test/java/com/google/protobuf/TestUtil.java b/java/src/test/java/com/google/protobuf/TestUtil.java index 135a117..2b8b2af 100644 --- a/java/src/test/java/com/google/protobuf/TestUtil.java +++ b/java/src/test/java/com/google/protobuf/TestUtil.java @@ -1,6 +1,6 @@ // Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ +// http://code.google.com/p/protobuf/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -56,11 +56,6 @@ import static protobuf_unittest.UnittestProto.defaultImportEnumExtension; import static protobuf_unittest.UnittestProto.defaultStringPieceExtension; import static protobuf_unittest.UnittestProto.defaultCordExtension; -import static protobuf_unittest.UnittestProto.oneofUint32Extension; -import static protobuf_unittest.UnittestProto.oneofNestedMessageExtension; -import static protobuf_unittest.UnittestProto.oneofStringExtension; -import static protobuf_unittest.UnittestProto.oneofBytesExtension; - import static protobuf_unittest.UnittestProto.optionalInt32Extension; import static protobuf_unittest.UnittestProto.optionalInt64Extension; import static protobuf_unittest.UnittestProto.optionalUint32Extension; @@ -77,16 +72,14 @@ import static protobuf_unittest.UnittestProto.optionalBoolExtension; import static protobuf_unittest.UnittestProto.optionalStringExtension; import static protobuf_unittest.UnittestProto.optionalBytesExtension; import static protobuf_unittest.UnittestProto.optionalGroupExtension; -import static protobuf_unittest.UnittestProto.optionalCordExtension; -import static protobuf_unittest.UnittestProto.optionalForeignEnumExtension; +import static protobuf_unittest.UnittestProto.optionalNestedMessageExtension; import static protobuf_unittest.UnittestProto.optionalForeignMessageExtension; -import static protobuf_unittest.UnittestProto.optionalImportEnumExtension; import static protobuf_unittest.UnittestProto.optionalImportMessageExtension; import static protobuf_unittest.UnittestProto.optionalNestedEnumExtension; -import static protobuf_unittest.UnittestProto.optionalNestedMessageExtension; -import static protobuf_unittest.UnittestProto.optionalPublicImportMessageExtension; -import static protobuf_unittest.UnittestProto.optionalLazyMessageExtension; +import static protobuf_unittest.UnittestProto.optionalForeignEnumExtension; +import static protobuf_unittest.UnittestProto.optionalImportEnumExtension; import static protobuf_unittest.UnittestProto.optionalStringPieceExtension; +import static protobuf_unittest.UnittestProto.optionalCordExtension; import static protobuf_unittest.UnittestProto.repeatedInt32Extension; import static protobuf_unittest.UnittestProto.repeatedInt64Extension; @@ -107,7 +100,6 @@ import static protobuf_unittest.UnittestProto.repeatedGroupExtension; import static protobuf_unittest.UnittestProto.repeatedNestedMessageExtension; import static protobuf_unittest.UnittestProto.repeatedForeignMessageExtension; import static protobuf_unittest.UnittestProto.repeatedImportMessageExtension; -import static protobuf_unittest.UnittestProto.repeatedLazyMessageExtension; import static protobuf_unittest.UnittestProto.repeatedNestedEnumExtension; import static protobuf_unittest.UnittestProto.repeatedForeignEnumExtension; import static protobuf_unittest.UnittestProto.repeatedImportEnumExtension; @@ -153,11 +145,6 @@ import static com.google.protobuf.UnittestLite.defaultImportEnumExtensionLite; import static com.google.protobuf.UnittestLite.defaultStringPieceExtensionLite; import static com.google.protobuf.UnittestLite.defaultCordExtensionLite; -import static com.google.protobuf.UnittestLite.oneofUint32ExtensionLite; -import static com.google.protobuf.UnittestLite.oneofNestedMessageExtensionLite; -import static com.google.protobuf.UnittestLite.oneofStringExtensionLite; -import static com.google.protobuf.UnittestLite.oneofBytesExtensionLite; - import static com.google.protobuf.UnittestLite.optionalInt32ExtensionLite; import static com.google.protobuf.UnittestLite.optionalInt64ExtensionLite; import static com.google.protobuf.UnittestLite.optionalUint32ExtensionLite; @@ -175,13 +162,11 @@ import static com.google.protobuf.UnittestLite.optionalStringExtensionLite; import static com.google.protobuf.UnittestLite.optionalBytesExtensionLite; import static com.google.protobuf.UnittestLite.optionalGroupExtensionLite; import static com.google.protobuf.UnittestLite.optionalNestedMessageExtensionLite; -import static com.google.protobuf.UnittestLite.optionalForeignEnumExtensionLite; import static com.google.protobuf.UnittestLite.optionalForeignMessageExtensionLite; -import static com.google.protobuf.UnittestLite.optionalImportEnumExtensionLite; import static com.google.protobuf.UnittestLite.optionalImportMessageExtensionLite; import static com.google.protobuf.UnittestLite.optionalNestedEnumExtensionLite; -import static com.google.protobuf.UnittestLite.optionalPublicImportMessageExtensionLite; -import static com.google.protobuf.UnittestLite.optionalLazyMessageExtensionLite; +import static com.google.protobuf.UnittestLite.optionalForeignEnumExtensionLite; +import static com.google.protobuf.UnittestLite.optionalImportEnumExtensionLite; import static com.google.protobuf.UnittestLite.optionalStringPieceExtensionLite; import static com.google.protobuf.UnittestLite.optionalCordExtensionLite; @@ -204,7 +189,6 @@ import static com.google.protobuf.UnittestLite.repeatedGroupExtensionLite; import static com.google.protobuf.UnittestLite.repeatedNestedMessageExtensionLite; import static com.google.protobuf.UnittestLite.repeatedForeignMessageExtensionLite; import static com.google.protobuf.UnittestLite.repeatedImportMessageExtensionLite; -import static com.google.protobuf.UnittestLite.repeatedLazyMessageExtensionLite; import static com.google.protobuf.UnittestLite.repeatedNestedEnumExtensionLite; import static com.google.protobuf.UnittestLite.repeatedForeignEnumExtensionLite; import static com.google.protobuf.UnittestLite.repeatedImportEnumExtensionLite; @@ -230,28 +214,22 @@ import static com.google.protobuf.UnittestLite.packedBoolExtensionLite; import static com.google.protobuf.UnittestLite.packedEnumExtensionLite; import protobuf_unittest.UnittestProto.TestAllExtensions; -import protobuf_unittest.UnittestProto.TestAllExtensionsOrBuilder; import protobuf_unittest.UnittestProto.TestAllTypes; -import protobuf_unittest.UnittestProto.TestAllTypesOrBuilder; -import protobuf_unittest.UnittestProto.TestOneof2; import protobuf_unittest.UnittestProto.TestPackedExtensions; import protobuf_unittest.UnittestProto.TestPackedTypes; import protobuf_unittest.UnittestProto.TestUnpackedTypes; import protobuf_unittest.UnittestProto.ForeignMessage; import protobuf_unittest.UnittestProto.ForeignEnum; -import com.google.protobuf.test.UnittestImport.ImportEnum; import com.google.protobuf.test.UnittestImport.ImportMessage; -import com.google.protobuf.test.UnittestImportPublic.PublicImportMessage; +import com.google.protobuf.test.UnittestImport.ImportEnum; import com.google.protobuf.UnittestLite.TestAllTypesLite; import com.google.protobuf.UnittestLite.TestAllExtensionsLite; -import com.google.protobuf.UnittestLite.TestAllExtensionsLiteOrBuilder; import com.google.protobuf.UnittestLite.TestPackedExtensionsLite; import com.google.protobuf.UnittestLite.ForeignMessageLite; import com.google.protobuf.UnittestLite.ForeignEnumLite; -import com.google.protobuf.UnittestImportLite.ImportEnumLite; import com.google.protobuf.UnittestImportLite.ImportMessageLite; -import com.google.protobuf.UnittestImportPublicLite.PublicImportMessageLite; +import com.google.protobuf.UnittestImportLite.ImportEnumLite; import junit.framework.Assert; @@ -261,17 +239,14 @@ import java.io.RandomAccessFile; /** * Contains methods for setting all fields of {@code TestAllTypes} to - * some values as well as checking that all the fields are set to those values. + * some vaules as well as checking that all the fields are set to those values. * These are useful for testing various protocol message features, e.g. * set all fields of a message, serialize it, parse it, and check that all * fields are set. * - * <p>This code is not to be used outside of {@code com.google.protobuf} and - * subpackages. - * * @author kenton@google.com Kenton Varda */ -public final class TestUtil { +class TestUtil { private TestUtil() {} /** Helper to convert a String to ByteString. */ @@ -294,16 +269,6 @@ public final class TestUtil { } /** - * Get a {@code TestAllTypes.Builder} with all fields set as they would be by - * {@link #setAllFields(TestAllTypes.Builder)}. - */ - public static TestAllTypes.Builder getAllSetBuilder() { - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - setAllFields(builder); - return builder; - } - - /** * Get a {@code TestAllExtensions} with all fields set as they would be by * {@link #setAllExtensions(TestAllExtensions.Builder)}. */ @@ -373,10 +338,6 @@ public final class TestUtil { ForeignMessage.newBuilder().setC(119).build()); message.setOptionalImportMessage( ImportMessage.newBuilder().setD(120).build()); - message.setOptionalPublicImportMessage( - PublicImportMessage.newBuilder().setE(126).build()); - message.setOptionalLazyMessage( - TestAllTypes.NestedMessage.newBuilder().setBb(127).build()); message.setOptionalNestedEnum (TestAllTypes.NestedEnum.BAZ); message.setOptionalForeignEnum(ForeignEnum.FOREIGN_BAZ); @@ -411,8 +372,6 @@ public final class TestUtil { ForeignMessage.newBuilder().setC(219).build()); message.addRepeatedImportMessage( ImportMessage.newBuilder().setD(220).build()); - message.addRepeatedLazyMessage( - TestAllTypes.NestedMessage.newBuilder().setBb(227).build()); message.addRepeatedNestedEnum (TestAllTypes.NestedEnum.BAR); message.addRepeatedForeignEnum(ForeignEnum.FOREIGN_BAR); @@ -446,8 +405,6 @@ public final class TestUtil { ForeignMessage.newBuilder().setC(319).build()); message.addRepeatedImportMessage( ImportMessage.newBuilder().setD(320).build()); - message.addRepeatedLazyMessage( - TestAllTypes.NestedMessage.newBuilder().setBb(327).build()); message.addRepeatedNestedEnum (TestAllTypes.NestedEnum.BAZ); message.addRepeatedForeignEnum(ForeignEnum.FOREIGN_BAZ); @@ -480,12 +437,6 @@ public final class TestUtil { message.setDefaultStringPiece("424"); message.setDefaultCord("425"); - - message.setOneofUint32(601); - message.setOneofNestedMessage( - TestAllTypes.NestedMessage.newBuilder().setBb(602).build()); - message.setOneofString("603"); - message.setOneofBytes(toBytes("604")); } // ------------------------------------------------------------------- @@ -519,8 +470,6 @@ public final class TestUtil { ForeignMessage.newBuilder().setC(519).build()); message.setRepeatedImportMessage(1, ImportMessage.newBuilder().setD(520).build()); - message.setRepeatedLazyMessage(1, - TestAllTypes.NestedMessage.newBuilder().setBb(527).build()); message.setRepeatedNestedEnum (1, TestAllTypes.NestedEnum.FOO); message.setRepeatedForeignEnum(1, ForeignEnum.FOREIGN_FOO); @@ -536,7 +485,7 @@ public final class TestUtil { * Assert (using {@code junit.framework.Assert}} that all fields of * {@code message} are set to the values assigned by {@code setAllFields}. */ - public static void assertAllFieldsSet(TestAllTypesOrBuilder message) { + public static void assertAllFieldsSet(TestAllTypes message) { Assert.assertTrue(message.hasOptionalInt32 ()); Assert.assertTrue(message.hasOptionalInt64 ()); Assert.assertTrue(message.hasOptionalUint32 ()); @@ -586,12 +535,10 @@ public final class TestUtil { Assert.assertEquals("115", message.getOptionalString ()); Assert.assertEquals(toBytes("116"), message.getOptionalBytes()); - Assert.assertEquals(117, message.getOptionalGroup ().getA()); - Assert.assertEquals(118, message.getOptionalNestedMessage ().getBb()); - Assert.assertEquals(119, message.getOptionalForeignMessage ().getC()); - Assert.assertEquals(120, message.getOptionalImportMessage ().getD()); - Assert.assertEquals(126, message.getOptionalPublicImportMessage().getE()); - Assert.assertEquals(127, message.getOptionalLazyMessage ().getBb()); + Assert.assertEquals(117, message.getOptionalGroup ().getA()); + Assert.assertEquals(118, message.getOptionalNestedMessage ().getBb()); + Assert.assertEquals(119, message.getOptionalForeignMessage().getC()); + Assert.assertEquals(120, message.getOptionalImportMessage ().getD()); Assert.assertEquals(TestAllTypes.NestedEnum.BAZ, message.getOptionalNestedEnum()); Assert.assertEquals(ForeignEnum.FOREIGN_BAZ, message.getOptionalForeignEnum()); @@ -622,7 +569,6 @@ public final class TestUtil { Assert.assertEquals(2, message.getRepeatedNestedMessageCount ()); Assert.assertEquals(2, message.getRepeatedForeignMessageCount()); Assert.assertEquals(2, message.getRepeatedImportMessageCount ()); - Assert.assertEquals(2, message.getRepeatedLazyMessageCount ()); Assert.assertEquals(2, message.getRepeatedNestedEnumCount ()); Assert.assertEquals(2, message.getRepeatedForeignEnumCount ()); Assert.assertEquals(2, message.getRepeatedImportEnumCount ()); @@ -650,7 +596,6 @@ public final class TestUtil { Assert.assertEquals(218, message.getRepeatedNestedMessage (0).getBb()); Assert.assertEquals(219, message.getRepeatedForeignMessage(0).getC()); Assert.assertEquals(220, message.getRepeatedImportMessage (0).getD()); - Assert.assertEquals(227, message.getRepeatedLazyMessage (0).getBb()); Assert.assertEquals(TestAllTypes.NestedEnum.BAR, message.getRepeatedNestedEnum (0)); Assert.assertEquals(ForeignEnum.FOREIGN_BAR, message.getRepeatedForeignEnum(0)); @@ -679,7 +624,6 @@ public final class TestUtil { Assert.assertEquals(318, message.getRepeatedNestedMessage (1).getBb()); Assert.assertEquals(319, message.getRepeatedForeignMessage(1).getC()); Assert.assertEquals(320, message.getRepeatedImportMessage (1).getD()); - Assert.assertEquals(327, message.getRepeatedLazyMessage (1).getBb()); Assert.assertEquals(TestAllTypes.NestedEnum.BAZ, message.getRepeatedNestedEnum (1)); Assert.assertEquals(ForeignEnum.FOREIGN_BAZ, message.getRepeatedForeignEnum(1)); @@ -735,22 +679,16 @@ public final class TestUtil { Assert.assertEquals("424", message.getDefaultStringPiece()); Assert.assertEquals("425", message.getDefaultCord()); - - Assert.assertFalse(message.hasOneofUint32()); - Assert.assertFalse(message.hasOneofNestedMessage()); - Assert.assertFalse(message.hasOneofString()); - Assert.assertTrue(message.hasOneofBytes()); - - Assert.assertEquals(toBytes("604"), message.getOneofBytes()); } // ------------------------------------------------------------------- + /** * Assert (using {@code junit.framework.Assert}} that all fields of * {@code message} are cleared, and that getting the fields returns their * default values. */ - public static void assertClear(TestAllTypesOrBuilder message) { + public static void assertClear(TestAllTypes message) { // hasBlah() should initially be false for all optional fields. Assert.assertFalse(message.hasOptionalInt32 ()); Assert.assertFalse(message.hasOptionalInt64 ()); @@ -798,19 +736,15 @@ public final class TestUtil { Assert.assertEquals(ByteString.EMPTY, message.getOptionalBytes()); // Embedded messages should also be clear. - Assert.assertFalse(message.getOptionalGroup ().hasA()); - Assert.assertFalse(message.getOptionalNestedMessage ().hasBb()); - Assert.assertFalse(message.getOptionalForeignMessage ().hasC()); - Assert.assertFalse(message.getOptionalImportMessage ().hasD()); - Assert.assertFalse(message.getOptionalPublicImportMessage().hasE()); - Assert.assertFalse(message.getOptionalLazyMessage ().hasBb()); - - Assert.assertEquals(0, message.getOptionalGroup ().getA()); - Assert.assertEquals(0, message.getOptionalNestedMessage ().getBb()); - Assert.assertEquals(0, message.getOptionalForeignMessage ().getC()); - Assert.assertEquals(0, message.getOptionalImportMessage ().getD()); - Assert.assertEquals(0, message.getOptionalPublicImportMessage().getE()); - Assert.assertEquals(0, message.getOptionalLazyMessage ().getBb()); + Assert.assertFalse(message.getOptionalGroup ().hasA()); + Assert.assertFalse(message.getOptionalNestedMessage ().hasBb()); + Assert.assertFalse(message.getOptionalForeignMessage().hasC()); + Assert.assertFalse(message.getOptionalImportMessage ().hasD()); + + Assert.assertEquals(0, message.getOptionalGroup ().getA()); + Assert.assertEquals(0, message.getOptionalNestedMessage ().getBb()); + Assert.assertEquals(0, message.getOptionalForeignMessage().getC()); + Assert.assertEquals(0, message.getOptionalImportMessage ().getD()); // Enums without defaults are set to the first value in the enum. Assert.assertEquals(TestAllTypes.NestedEnum.FOO, message.getOptionalNestedEnum ()); @@ -841,7 +775,6 @@ public final class TestUtil { Assert.assertEquals(0, message.getRepeatedNestedMessageCount ()); Assert.assertEquals(0, message.getRepeatedForeignMessageCount()); Assert.assertEquals(0, message.getRepeatedImportMessageCount ()); - Assert.assertEquals(0, message.getRepeatedLazyMessageCount ()); Assert.assertEquals(0, message.getRepeatedNestedEnumCount ()); Assert.assertEquals(0, message.getRepeatedForeignEnumCount ()); Assert.assertEquals(0, message.getRepeatedImportEnumCount ()); @@ -896,11 +829,6 @@ public final class TestUtil { Assert.assertEquals("abc", message.getDefaultStringPiece()); Assert.assertEquals("123", message.getDefaultCord()); - - Assert.assertFalse(message.hasOneofUint32()); - Assert.assertFalse(message.hasOneofNestedMessage()); - Assert.assertFalse(message.hasOneofString()); - Assert.assertFalse(message.hasOneofBytes()); } // ------------------------------------------------------------------- @@ -910,8 +838,7 @@ public final class TestUtil { * {@code message} are set to the values assigned by {@code setAllFields} * followed by {@code modifyRepeatedFields}. */ - public static void assertRepeatedFieldsModified( - TestAllTypesOrBuilder message) { + public static void assertRepeatedFieldsModified(TestAllTypes message) { // ModifyRepeatedFields only sets the second repeated element of each // field. In addition to verifying this, we also verify that the first // element and size were *not* modified. @@ -935,7 +862,6 @@ public final class TestUtil { Assert.assertEquals(2, message.getRepeatedNestedMessageCount ()); Assert.assertEquals(2, message.getRepeatedForeignMessageCount()); Assert.assertEquals(2, message.getRepeatedImportMessageCount ()); - Assert.assertEquals(2, message.getRepeatedLazyMessageCount ()); Assert.assertEquals(2, message.getRepeatedNestedEnumCount ()); Assert.assertEquals(2, message.getRepeatedForeignEnumCount ()); Assert.assertEquals(2, message.getRepeatedImportEnumCount ()); @@ -963,7 +889,6 @@ public final class TestUtil { Assert.assertEquals(218, message.getRepeatedNestedMessage (0).getBb()); Assert.assertEquals(219, message.getRepeatedForeignMessage(0).getC()); Assert.assertEquals(220, message.getRepeatedImportMessage (0).getD()); - Assert.assertEquals(227, message.getRepeatedLazyMessage (0).getBb()); Assert.assertEquals(TestAllTypes.NestedEnum.BAR, message.getRepeatedNestedEnum (0)); Assert.assertEquals(ForeignEnum.FOREIGN_BAR, message.getRepeatedForeignEnum(0)); @@ -993,7 +918,6 @@ public final class TestUtil { Assert.assertEquals(518, message.getRepeatedNestedMessage (1).getBb()); Assert.assertEquals(519, message.getRepeatedForeignMessage(1).getC()); Assert.assertEquals(520, message.getRepeatedImportMessage (1).getD()); - Assert.assertEquals(527, message.getRepeatedLazyMessage (1).getBb()); Assert.assertEquals(TestAllTypes.NestedEnum.FOO, message.getRepeatedNestedEnum (1)); Assert.assertEquals(ForeignEnum.FOREIGN_FOO, message.getRepeatedForeignEnum(1)); @@ -1280,10 +1204,6 @@ public final class TestUtil { ForeignMessage.newBuilder().setC(119).build()); message.setExtension(optionalImportMessageExtension, ImportMessage.newBuilder().setD(120).build()); - message.setExtension(optionalPublicImportMessageExtension, - PublicImportMessage.newBuilder().setE(126).build()); - message.setExtension(optionalLazyMessageExtension, - TestAllTypes.NestedMessage.newBuilder().setBb(127).build()); message.setExtension(optionalNestedEnumExtension, TestAllTypes.NestedEnum.BAZ); message.setExtension(optionalForeignEnumExtension, ForeignEnum.FOREIGN_BAZ); @@ -1318,8 +1238,6 @@ public final class TestUtil { ForeignMessage.newBuilder().setC(219).build()); message.addExtension(repeatedImportMessageExtension, ImportMessage.newBuilder().setD(220).build()); - message.addExtension(repeatedLazyMessageExtension, - TestAllTypes.NestedMessage.newBuilder().setBb(227).build()); message.addExtension(repeatedNestedEnumExtension, TestAllTypes.NestedEnum.BAR); message.addExtension(repeatedForeignEnumExtension, ForeignEnum.FOREIGN_BAR); @@ -1353,8 +1271,6 @@ public final class TestUtil { ForeignMessage.newBuilder().setC(319).build()); message.addExtension(repeatedImportMessageExtension, ImportMessage.newBuilder().setD(320).build()); - message.addExtension(repeatedLazyMessageExtension, - TestAllTypes.NestedMessage.newBuilder().setBb(327).build()); message.addExtension(repeatedNestedEnumExtension, TestAllTypes.NestedEnum.BAZ); message.addExtension(repeatedForeignEnumExtension, ForeignEnum.FOREIGN_BAZ); @@ -1387,12 +1303,6 @@ public final class TestUtil { message.setExtension(defaultStringPieceExtension, "424"); message.setExtension(defaultCordExtension, "425"); - - message.setExtension(oneofUint32Extension, 601); - message.setExtension(oneofNestedMessageExtension, - TestAllTypes.NestedMessage.newBuilder().setBb(602).build()); - message.setExtension(oneofStringExtension, "603"); - message.setExtension(oneofBytesExtension, toBytes("604")); } // ------------------------------------------------------------------- @@ -1427,8 +1337,6 @@ public final class TestUtil { ForeignMessage.newBuilder().setC(519).build()); message.setExtension(repeatedImportMessageExtension, 1, ImportMessage.newBuilder().setD(520).build()); - message.setExtension(repeatedLazyMessageExtension, 1, - TestAllTypes.NestedMessage.newBuilder().setBb(527).build()); message.setExtension(repeatedNestedEnumExtension , 1, TestAllTypes.NestedEnum.FOO); message.setExtension(repeatedForeignEnumExtension, 1, ForeignEnum.FOREIGN_FOO); @@ -1444,8 +1352,7 @@ public final class TestUtil { * Assert (using {@code junit.framework.Assert}} that all extensions of * {@code message} are set to the values assigned by {@code setAllExtensions}. */ - public static void assertAllExtensionsSet( - TestAllExtensionsOrBuilder message) { + public static void assertAllExtensionsSet(TestAllExtensions message) { Assert.assertTrue(message.hasExtension(optionalInt32Extension )); Assert.assertTrue(message.hasExtension(optionalInt64Extension )); Assert.assertTrue(message.hasExtension(optionalUint32Extension )); @@ -1495,12 +1402,10 @@ public final class TestUtil { assertEqualsExactType("115", message.getExtension(optionalStringExtension )); assertEqualsExactType(toBytes("116"), message.getExtension(optionalBytesExtension)); - assertEqualsExactType(117, message.getExtension(optionalGroupExtension ).getA()); - assertEqualsExactType(118, message.getExtension(optionalNestedMessageExtension ).getBb()); - assertEqualsExactType(119, message.getExtension(optionalForeignMessageExtension ).getC()); - assertEqualsExactType(120, message.getExtension(optionalImportMessageExtension ).getD()); - assertEqualsExactType(126, message.getExtension(optionalPublicImportMessageExtension).getE()); - assertEqualsExactType(127, message.getExtension(optionalLazyMessageExtension ).getBb()); + assertEqualsExactType(117, message.getExtension(optionalGroupExtension ).getA()); + assertEqualsExactType(118, message.getExtension(optionalNestedMessageExtension ).getBb()); + assertEqualsExactType(119, message.getExtension(optionalForeignMessageExtension).getC()); + assertEqualsExactType(120, message.getExtension(optionalImportMessageExtension ).getD()); assertEqualsExactType(TestAllTypes.NestedEnum.BAZ, message.getExtension(optionalNestedEnumExtension)); @@ -1534,7 +1439,6 @@ public final class TestUtil { Assert.assertEquals(2, message.getExtensionCount(repeatedNestedMessageExtension )); Assert.assertEquals(2, message.getExtensionCount(repeatedForeignMessageExtension)); Assert.assertEquals(2, message.getExtensionCount(repeatedImportMessageExtension )); - Assert.assertEquals(2, message.getExtensionCount(repeatedLazyMessageExtension )); Assert.assertEquals(2, message.getExtensionCount(repeatedNestedEnumExtension )); Assert.assertEquals(2, message.getExtensionCount(repeatedForeignEnumExtension )); Assert.assertEquals(2, message.getExtensionCount(repeatedImportEnumExtension )); @@ -1562,7 +1466,6 @@ public final class TestUtil { assertEqualsExactType(218, message.getExtension(repeatedNestedMessageExtension , 0).getBb()); assertEqualsExactType(219, message.getExtension(repeatedForeignMessageExtension, 0).getC()); assertEqualsExactType(220, message.getExtension(repeatedImportMessageExtension , 0).getD()); - assertEqualsExactType(227, message.getExtension(repeatedLazyMessageExtension , 0).getBb()); assertEqualsExactType(TestAllTypes.NestedEnum.BAR, message.getExtension(repeatedNestedEnumExtension, 0)); @@ -1594,7 +1497,6 @@ public final class TestUtil { assertEqualsExactType(318, message.getExtension(repeatedNestedMessageExtension , 1).getBb()); assertEqualsExactType(319, message.getExtension(repeatedForeignMessageExtension, 1).getC()); assertEqualsExactType(320, message.getExtension(repeatedImportMessageExtension , 1).getD()); - assertEqualsExactType(327, message.getExtension(repeatedLazyMessageExtension , 1).getBb()); assertEqualsExactType(TestAllTypes.NestedEnum.BAZ, message.getExtension(repeatedNestedEnumExtension, 1)); @@ -1656,10 +1558,6 @@ public final class TestUtil { assertEqualsExactType("424", message.getExtension(defaultStringPieceExtension)); assertEqualsExactType("425", message.getExtension(defaultCordExtension)); - - Assert.assertTrue(message.hasExtension(oneofBytesExtension)); - - assertEqualsExactType(toBytes("604"), message.getExtension(oneofBytesExtension)); } // ------------------------------------------------------------------- @@ -1669,7 +1567,7 @@ public final class TestUtil { * {@code message} are cleared, and that getting the extensions returns their * default values. */ - public static void assertExtensionsClear(TestAllExtensionsOrBuilder message) { + public static void assertExtensionsClear(TestAllExtensions message) { // hasBlah() should initially be false for all optional fields. Assert.assertFalse(message.hasExtension(optionalInt32Extension )); Assert.assertFalse(message.hasExtension(optionalInt64Extension )); @@ -1759,7 +1657,6 @@ public final class TestUtil { Assert.assertEquals(0, message.getExtensionCount(repeatedNestedMessageExtension )); Assert.assertEquals(0, message.getExtensionCount(repeatedForeignMessageExtension)); Assert.assertEquals(0, message.getExtensionCount(repeatedImportMessageExtension )); - Assert.assertEquals(0, message.getExtensionCount(repeatedLazyMessageExtension )); Assert.assertEquals(0, message.getExtensionCount(repeatedNestedEnumExtension )); Assert.assertEquals(0, message.getExtensionCount(repeatedForeignEnumExtension )); Assert.assertEquals(0, message.getExtensionCount(repeatedImportEnumExtension )); @@ -1788,7 +1685,6 @@ public final class TestUtil { Assert.assertEquals(0, message.getExtension(repeatedNestedMessageExtension ).size()); Assert.assertEquals(0, message.getExtension(repeatedForeignMessageExtension).size()); Assert.assertEquals(0, message.getExtension(repeatedImportMessageExtension ).size()); - Assert.assertEquals(0, message.getExtension(repeatedLazyMessageExtension ).size()); Assert.assertEquals(0, message.getExtension(repeatedNestedEnumExtension ).size()); Assert.assertEquals(0, message.getExtension(repeatedForeignEnumExtension ).size()); Assert.assertEquals(0, message.getExtension(repeatedImportEnumExtension ).size()); @@ -1846,11 +1742,6 @@ public final class TestUtil { assertEqualsExactType("abc", message.getExtension(defaultStringPieceExtension)); assertEqualsExactType("123", message.getExtension(defaultCordExtension)); - - Assert.assertFalse(message.hasExtension(oneofUint32Extension)); - Assert.assertFalse(message.hasExtension(oneofNestedMessageExtension)); - Assert.assertFalse(message.hasExtension(oneofStringExtension)); - Assert.assertFalse(message.hasExtension(oneofBytesExtension)); } // ------------------------------------------------------------------- @@ -1861,7 +1752,7 @@ public final class TestUtil { * followed by {@code modifyRepeatedExtensions}. */ public static void assertRepeatedExtensionsModified( - TestAllExtensionsOrBuilder message) { + TestAllExtensions message) { // ModifyRepeatedFields only sets the second repeated element of each // field. In addition to verifying this, we also verify that the first // element and size were *not* modified. @@ -1885,7 +1776,6 @@ public final class TestUtil { Assert.assertEquals(2, message.getExtensionCount(repeatedNestedMessageExtension )); Assert.assertEquals(2, message.getExtensionCount(repeatedForeignMessageExtension)); Assert.assertEquals(2, message.getExtensionCount(repeatedImportMessageExtension )); - Assert.assertEquals(2, message.getExtensionCount(repeatedLazyMessageExtension )); Assert.assertEquals(2, message.getExtensionCount(repeatedNestedEnumExtension )); Assert.assertEquals(2, message.getExtensionCount(repeatedForeignEnumExtension )); Assert.assertEquals(2, message.getExtensionCount(repeatedImportEnumExtension )); @@ -1913,7 +1803,6 @@ public final class TestUtil { assertEqualsExactType(218, message.getExtension(repeatedNestedMessageExtension , 0).getBb()); assertEqualsExactType(219, message.getExtension(repeatedForeignMessageExtension, 0).getC()); assertEqualsExactType(220, message.getExtension(repeatedImportMessageExtension , 0).getD()); - assertEqualsExactType(227, message.getExtension(repeatedLazyMessageExtension , 0).getBb()); assertEqualsExactType(TestAllTypes.NestedEnum.BAR, message.getExtension(repeatedNestedEnumExtension, 0)); @@ -1946,7 +1835,6 @@ public final class TestUtil { assertEqualsExactType(518, message.getExtension(repeatedNestedMessageExtension , 1).getBb()); assertEqualsExactType(519, message.getExtension(repeatedForeignMessageExtension, 1).getC()); assertEqualsExactType(520, message.getExtension(repeatedImportMessageExtension , 1).getD()); - assertEqualsExactType(527, message.getExtension(repeatedLazyMessageExtension , 1).getBb()); assertEqualsExactType(TestAllTypes.NestedEnum.FOO, message.getExtension(repeatedNestedEnumExtension, 1)); @@ -2070,10 +1958,6 @@ public final class TestUtil { ForeignMessageLite.newBuilder().setC(119).build()); message.setExtension(optionalImportMessageExtensionLite, ImportMessageLite.newBuilder().setD(120).build()); - message.setExtension(optionalPublicImportMessageExtensionLite, - PublicImportMessageLite.newBuilder().setE(126).build()); - message.setExtension(optionalLazyMessageExtensionLite, - TestAllTypesLite.NestedMessage.newBuilder().setBb(127).build()); message.setExtension(optionalNestedEnumExtensionLite, TestAllTypesLite.NestedEnum.BAZ); message.setExtension(optionalForeignEnumExtensionLite, ForeignEnumLite.FOREIGN_LITE_BAZ); @@ -2108,8 +1992,6 @@ public final class TestUtil { ForeignMessageLite.newBuilder().setC(219).build()); message.addExtension(repeatedImportMessageExtensionLite, ImportMessageLite.newBuilder().setD(220).build()); - message.addExtension(repeatedLazyMessageExtensionLite, - TestAllTypesLite.NestedMessage.newBuilder().setBb(227).build()); message.addExtension(repeatedNestedEnumExtensionLite, TestAllTypesLite.NestedEnum.BAR); message.addExtension(repeatedForeignEnumExtensionLite, ForeignEnumLite.FOREIGN_LITE_BAR); @@ -2143,8 +2025,6 @@ public final class TestUtil { ForeignMessageLite.newBuilder().setC(319).build()); message.addExtension(repeatedImportMessageExtensionLite, ImportMessageLite.newBuilder().setD(320).build()); - message.addExtension(repeatedLazyMessageExtensionLite, - TestAllTypesLite.NestedMessage.newBuilder().setBb(327).build()); message.addExtension(repeatedNestedEnumExtensionLite, TestAllTypesLite.NestedEnum.BAZ); message.addExtension(repeatedForeignEnumExtensionLite, ForeignEnumLite.FOREIGN_LITE_BAZ); @@ -2177,12 +2057,6 @@ public final class TestUtil { message.setExtension(defaultStringPieceExtensionLite, "424"); message.setExtension(defaultCordExtensionLite, "425"); - - message.setExtension(oneofUint32ExtensionLite, 601); - message.setExtension(oneofNestedMessageExtensionLite, - TestAllTypesLite.NestedMessage.newBuilder().setBb(602).build()); - message.setExtension(oneofStringExtensionLite, "603"); - message.setExtension(oneofBytesExtensionLite, toBytes("604")); } // ------------------------------------------------------------------- @@ -2217,8 +2091,6 @@ public final class TestUtil { ForeignMessageLite.newBuilder().setC(519).build()); message.setExtension(repeatedImportMessageExtensionLite, 1, ImportMessageLite.newBuilder().setD(520).build()); - message.setExtension(repeatedLazyMessageExtensionLite, 1, - TestAllTypesLite.NestedMessage.newBuilder().setBb(527).build()); message.setExtension(repeatedNestedEnumExtensionLite , 1, TestAllTypesLite.NestedEnum.FOO); message.setExtension(repeatedForeignEnumExtensionLite, 1, ForeignEnumLite.FOREIGN_LITE_FOO); @@ -2234,8 +2106,7 @@ public final class TestUtil { * Assert (using {@code junit.framework.Assert}} that all extensions of * {@code message} are set to the values assigned by {@code setAllExtensions}. */ - public static void assertAllExtensionsSet( - TestAllExtensionsLiteOrBuilder message) { + public static void assertAllExtensionsSet(TestAllExtensionsLite message) { Assert.assertTrue(message.hasExtension(optionalInt32ExtensionLite )); Assert.assertTrue(message.hasExtension(optionalInt64ExtensionLite )); Assert.assertTrue(message.hasExtension(optionalUint32ExtensionLite )); @@ -2289,9 +2160,6 @@ public final class TestUtil { assertEqualsExactType(118, message.getExtension(optionalNestedMessageExtensionLite ).getBb()); assertEqualsExactType(119, message.getExtension(optionalForeignMessageExtensionLite).getC()); assertEqualsExactType(120, message.getExtension(optionalImportMessageExtensionLite ).getD()); - assertEqualsExactType(126, message.getExtension( - optionalPublicImportMessageExtensionLite).getE()); - assertEqualsExactType(127, message.getExtension(optionalLazyMessageExtensionLite).getBb()); assertEqualsExactType(TestAllTypesLite.NestedEnum.BAZ, message.getExtension(optionalNestedEnumExtensionLite)); @@ -2325,7 +2193,6 @@ public final class TestUtil { Assert.assertEquals(2, message.getExtensionCount(repeatedNestedMessageExtensionLite )); Assert.assertEquals(2, message.getExtensionCount(repeatedForeignMessageExtensionLite)); Assert.assertEquals(2, message.getExtensionCount(repeatedImportMessageExtensionLite )); - Assert.assertEquals(2, message.getExtensionCount(repeatedLazyMessageExtensionLite )); Assert.assertEquals(2, message.getExtensionCount(repeatedNestedEnumExtensionLite )); Assert.assertEquals(2, message.getExtensionCount(repeatedForeignEnumExtensionLite )); Assert.assertEquals(2, message.getExtensionCount(repeatedImportEnumExtensionLite )); @@ -2353,7 +2220,6 @@ public final class TestUtil { assertEqualsExactType(218, message.getExtension(repeatedNestedMessageExtensionLite ,0).getBb()); assertEqualsExactType(219, message.getExtension(repeatedForeignMessageExtensionLite,0).getC()); assertEqualsExactType(220, message.getExtension(repeatedImportMessageExtensionLite ,0).getD()); - assertEqualsExactType(227, message.getExtension(repeatedLazyMessageExtensionLite ,0).getBb()); assertEqualsExactType(TestAllTypesLite.NestedEnum.BAR, message.getExtension(repeatedNestedEnumExtensionLite, 0)); @@ -2385,7 +2251,6 @@ public final class TestUtil { assertEqualsExactType(318, message.getExtension(repeatedNestedMessageExtensionLite ,1).getBb()); assertEqualsExactType(319, message.getExtension(repeatedForeignMessageExtensionLite,1).getC()); assertEqualsExactType(320, message.getExtension(repeatedImportMessageExtensionLite ,1).getD()); - assertEqualsExactType(327, message.getExtension(repeatedLazyMessageExtensionLite ,1).getBb()); assertEqualsExactType(TestAllTypesLite.NestedEnum.BAZ, message.getExtension(repeatedNestedEnumExtensionLite, 1)); @@ -2447,10 +2312,6 @@ public final class TestUtil { assertEqualsExactType("424", message.getExtension(defaultStringPieceExtensionLite)); assertEqualsExactType("425", message.getExtension(defaultCordExtensionLite)); - - Assert.assertTrue(message.hasExtension(oneofBytesExtensionLite)); - - assertEqualsExactType(toBytes("604"), message.getExtension(oneofBytesExtensionLite)); } // ------------------------------------------------------------------- @@ -2460,8 +2321,7 @@ public final class TestUtil { * {@code message} are cleared, and that getting the extensions returns their * default values. */ - public static void assertExtensionsClear( - TestAllExtensionsLiteOrBuilder message) { + public static void assertExtensionsClear(TestAllExtensionsLite message) { // hasBlah() should initially be false for all optional fields. Assert.assertFalse(message.hasExtension(optionalInt32ExtensionLite )); Assert.assertFalse(message.hasExtension(optionalInt64ExtensionLite )); @@ -2479,12 +2339,10 @@ public final class TestUtil { Assert.assertFalse(message.hasExtension(optionalStringExtensionLite )); Assert.assertFalse(message.hasExtension(optionalBytesExtensionLite )); - Assert.assertFalse(message.hasExtension(optionalGroupExtensionLite )); - Assert.assertFalse(message.hasExtension(optionalNestedMessageExtensionLite )); - Assert.assertFalse(message.hasExtension(optionalForeignMessageExtensionLite )); - Assert.assertFalse(message.hasExtension(optionalImportMessageExtensionLite )); - Assert.assertFalse(message.hasExtension(optionalPublicImportMessageExtensionLite)); - Assert.assertFalse(message.hasExtension(optionalLazyMessageExtensionLite )); + Assert.assertFalse(message.hasExtension(optionalGroupExtensionLite )); + Assert.assertFalse(message.hasExtension(optionalNestedMessageExtensionLite )); + Assert.assertFalse(message.hasExtension(optionalForeignMessageExtensionLite)); + Assert.assertFalse(message.hasExtension(optionalImportMessageExtensionLite )); Assert.assertFalse(message.hasExtension(optionalNestedEnumExtensionLite )); Assert.assertFalse(message.hasExtension(optionalForeignEnumExtensionLite)); @@ -2511,20 +2369,15 @@ public final class TestUtil { assertEqualsExactType(ByteString.EMPTY, message.getExtension(optionalBytesExtensionLite)); // Embedded messages should also be clear. - Assert.assertFalse(message.getExtension(optionalGroupExtensionLite ).hasA()); - Assert.assertFalse(message.getExtension(optionalNestedMessageExtensionLite ).hasBb()); - Assert.assertFalse(message.getExtension(optionalForeignMessageExtensionLite ).hasC()); - Assert.assertFalse(message.getExtension(optionalImportMessageExtensionLite ).hasD()); - Assert.assertFalse(message.getExtension(optionalPublicImportMessageExtensionLite).hasE()); - Assert.assertFalse(message.getExtension(optionalLazyMessageExtensionLite ).hasBb()); + Assert.assertFalse(message.getExtension(optionalGroupExtensionLite ).hasA()); + Assert.assertFalse(message.getExtension(optionalNestedMessageExtensionLite ).hasBb()); + Assert.assertFalse(message.getExtension(optionalForeignMessageExtensionLite).hasC()); + Assert.assertFalse(message.getExtension(optionalImportMessageExtensionLite ).hasD()); assertEqualsExactType(0, message.getExtension(optionalGroupExtensionLite ).getA()); assertEqualsExactType(0, message.getExtension(optionalNestedMessageExtensionLite ).getBb()); assertEqualsExactType(0, message.getExtension(optionalForeignMessageExtensionLite).getC()); assertEqualsExactType(0, message.getExtension(optionalImportMessageExtensionLite ).getD()); - assertEqualsExactType(0, message.getExtension( - optionalPublicImportMessageExtensionLite).getE()); - assertEqualsExactType(0, message.getExtension(optionalLazyMessageExtensionLite ).getBb()); // Enums without defaults are set to the first value in the enum. assertEqualsExactType(TestAllTypesLite.NestedEnum.FOO, @@ -2558,7 +2411,6 @@ public final class TestUtil { Assert.assertEquals(0, message.getExtensionCount(repeatedNestedMessageExtensionLite )); Assert.assertEquals(0, message.getExtensionCount(repeatedForeignMessageExtensionLite)); Assert.assertEquals(0, message.getExtensionCount(repeatedImportMessageExtensionLite )); - Assert.assertEquals(0, message.getExtensionCount(repeatedLazyMessageExtensionLite )); Assert.assertEquals(0, message.getExtensionCount(repeatedNestedEnumExtensionLite )); Assert.assertEquals(0, message.getExtensionCount(repeatedForeignEnumExtensionLite )); Assert.assertEquals(0, message.getExtensionCount(repeatedImportEnumExtensionLite )); @@ -2616,11 +2468,6 @@ public final class TestUtil { assertEqualsExactType("abc", message.getExtension(defaultStringPieceExtensionLite)); assertEqualsExactType("123", message.getExtension(defaultCordExtensionLite)); - - Assert.assertFalse(message.hasExtension(oneofUint32ExtensionLite)); - Assert.assertFalse(message.hasExtension(oneofNestedMessageExtensionLite)); - Assert.assertFalse(message.hasExtension(oneofStringExtensionLite)); - Assert.assertFalse(message.hasExtension(oneofBytesExtensionLite)); } // ------------------------------------------------------------------- @@ -2631,7 +2478,7 @@ public final class TestUtil { * followed by {@code modifyRepeatedExtensions}. */ public static void assertRepeatedExtensionsModified( - TestAllExtensionsLiteOrBuilder message) { + TestAllExtensionsLite message) { // ModifyRepeatedFields only sets the second repeated element of each // field. In addition to verifying this, we also verify that the first // element and size were *not* modified. @@ -2655,7 +2502,6 @@ public final class TestUtil { Assert.assertEquals(2, message.getExtensionCount(repeatedNestedMessageExtensionLite )); Assert.assertEquals(2, message.getExtensionCount(repeatedForeignMessageExtensionLite)); Assert.assertEquals(2, message.getExtensionCount(repeatedImportMessageExtensionLite )); - Assert.assertEquals(2, message.getExtensionCount(repeatedLazyMessageExtensionLite )); Assert.assertEquals(2, message.getExtensionCount(repeatedNestedEnumExtensionLite )); Assert.assertEquals(2, message.getExtensionCount(repeatedForeignEnumExtensionLite )); Assert.assertEquals(2, message.getExtensionCount(repeatedImportEnumExtensionLite )); @@ -2683,7 +2529,6 @@ public final class TestUtil { assertEqualsExactType(218, message.getExtension(repeatedNestedMessageExtensionLite ,0).getBb()); assertEqualsExactType(219, message.getExtension(repeatedForeignMessageExtensionLite,0).getC()); assertEqualsExactType(220, message.getExtension(repeatedImportMessageExtensionLite ,0).getD()); - assertEqualsExactType(227, message.getExtension(repeatedLazyMessageExtensionLite ,0).getBb()); assertEqualsExactType(TestAllTypesLite.NestedEnum.BAR, message.getExtension(repeatedNestedEnumExtensionLite, 0)); @@ -2716,7 +2561,6 @@ public final class TestUtil { assertEqualsExactType(518, message.getExtension(repeatedNestedMessageExtensionLite ,1).getBb()); assertEqualsExactType(519, message.getExtension(repeatedForeignMessageExtensionLite,1).getC()); assertEqualsExactType(520, message.getExtension(repeatedImportMessageExtensionLite ,1).getD()); - assertEqualsExactType(527, message.getExtension(repeatedLazyMessageExtensionLite ,1).getBb()); assertEqualsExactType(TestAllTypesLite.NestedEnum.FOO, message.getExtension(repeatedNestedEnumExtensionLite, 1)); @@ -2808,82 +2652,6 @@ public final class TestUtil { message.getExtension(packedEnumExtensionLite, 1)); } - // =================================================================== - // oneof - public static void setOneof(TestOneof2.Builder message) { - message.setFooLazyMessage( - TestOneof2.NestedMessage.newBuilder().setQuxInt(100).build()); - message.setBarString("101"); - message.setBazInt(102); - message.setBazString("103"); - } - - public static void assertOneofSet(TestOneof2 message) { - Assert.assertTrue(message.hasFooLazyMessage ()); - Assert.assertTrue(message.getFooLazyMessage().hasQuxInt()); - - Assert.assertTrue(message.hasBarString()); - Assert.assertTrue(message.hasBazInt ()); - Assert.assertTrue(message.hasBazString()); - - Assert.assertEquals(100 , message.getFooLazyMessage().getQuxInt()); - Assert.assertEquals("101", message.getBarString ()); - Assert.assertEquals(102 , message.getBazInt ()); - Assert.assertEquals("103", message.getBazString ()); - } - - public static void assertAtMostOneFieldSetOneof(TestOneof2 message) { - int count = 0; - if (message.hasFooInt()) { ++count; } - if (message.hasFooString()) { ++count; } - if (message.hasFooCord()) { ++count; } - if (message.hasFooStringPiece()) { ++count; } - if (message.hasFooBytes()) { ++count; } - if (message.hasFooEnum()) { ++count; } - if (message.hasFooMessage()) { ++count; } - if (message.hasFooGroup()) { ++count; } - if (message.hasFooLazyMessage()) { ++count; } - Assert.assertTrue(count <= 1); - - count = 0; - if (message.hasBarInt()) { ++count; } - if (message.hasBarString()) { ++count; } - if (message.hasBarCord()) { ++count; } - if (message.hasBarStringPiece()) { ++count; } - if (message.hasBarBytes()) { ++count; } - if (message.hasBarEnum()) { ++count; } - Assert.assertTrue(count <= 1); - - switch (message.getFooCase()) { - case FOO_INT: - Assert.assertTrue(message.hasFooInt()); - break; - case FOO_STRING: - Assert.assertTrue(message.hasFooString()); - break; - case FOO_CORD: - Assert.assertTrue(message.hasFooCord()); - break; - case FOO_BYTES: - Assert.assertTrue(message.hasFooBytes()); - break; - case FOO_ENUM: - Assert.assertTrue(message.hasFooEnum()); - break; - case FOO_MESSAGE: - Assert.assertTrue(message.hasFooMessage()); - break; - case FOOGROUP: - Assert.assertTrue(message.hasFooGroup()); - break; - case FOO_LAZY_MESSAGE: - Assert.assertTrue(message.hasFooLazyMessage()); - break; - case FOO_NOT_SET: - break; - } - } - // ================================================================= /** @@ -2897,21 +2665,18 @@ public final class TestUtil { private final Descriptors.FileDescriptor file; private final Descriptors.FileDescriptor importFile; - private final Descriptors.FileDescriptor publicImportFile; private final Descriptors.Descriptor optionalGroup; private final Descriptors.Descriptor repeatedGroup; private final Descriptors.Descriptor nestedMessage; private final Descriptors.Descriptor foreignMessage; private final Descriptors.Descriptor importMessage; - private final Descriptors.Descriptor publicImportMessage; private final Descriptors.FieldDescriptor groupA; private final Descriptors.FieldDescriptor repeatedGroupA; private final Descriptors.FieldDescriptor nestedB; private final Descriptors.FieldDescriptor foreignC; private final Descriptors.FieldDescriptor importD; - private final Descriptors.FieldDescriptor importE; private final Descriptors.EnumDescriptor nestedEnum; private final Descriptors.EnumDescriptor foreignEnum; @@ -2948,7 +2713,6 @@ public final class TestUtil { this.file = baseDescriptor.getFile(); Assert.assertEquals(1, file.getDependencies().size()); this.importFile = file.getDependencies().get(0); - this.publicImportFile = importFile.getDependencies().get(0); Descriptors.Descriptor testAllTypes; if (baseDescriptor.getName() == "TestAllTypes") { @@ -2975,8 +2739,6 @@ public final class TestUtil { this.nestedMessage = testAllTypes.findNestedTypeByName("NestedMessage"); this.foreignMessage = file.findMessageTypeByName("ForeignMessage"); this.importMessage = importFile.findMessageTypeByName("ImportMessage"); - this.publicImportMessage = publicImportFile.findMessageTypeByName( - "PublicImportMessage"); this.nestedEnum = testAllTypes.findEnumTypeByName("NestedEnum"); this.foreignEnum = file.findEnumTypeByName("ForeignEnum"); @@ -2994,7 +2756,6 @@ public final class TestUtil { this.nestedB = nestedMessage .findFieldByName("bb"); this.foreignC = foreignMessage.findFieldByName("c"); this.importD = importMessage .findFieldByName("d"); - this.importE = publicImportMessage.findFieldByName("e"); this.nestedFoo = nestedEnum.findValueByName("FOO"); this.nestedBar = nestedEnum.findValueByName("BAR"); this.nestedBaz = nestedEnum.findValueByName("BAZ"); @@ -3013,7 +2774,6 @@ public final class TestUtil { Assert.assertNotNull(nestedB ); Assert.assertNotNull(foreignC ); Assert.assertNotNull(importD ); - Assert.assertNotNull(importE ); Assert.assertNotNull(nestedFoo ); Assert.assertNotNull(nestedBar ); Assert.assertNotNull(nestedBaz ); @@ -3050,8 +2810,8 @@ public final class TestUtil { return parent.newBuilderForField(field); } else { ExtensionRegistry.ExtensionInfo extension = - extensionRegistry.findImmutableExtensionByNumber( - field.getContainingType(), field.getNumber()); + extensionRegistry.findExtensionByNumber(field.getContainingType(), + field.getNumber()); Assert.assertNotNull(extension); Assert.assertNotNull(extension.defaultInstance); return extension.defaultInstance.newBuilderForType(); @@ -3094,12 +2854,6 @@ public final class TestUtil { message.setField(f("optional_import_message"), newBuilderForField(message, f("optional_import_message")) .setField(importD, 120).build()); - message.setField(f("optional_public_import_message"), - newBuilderForField(message, f("optional_public_import_message")) - .setField(importE, 126).build()); - message.setField(f("optional_lazy_message"), - newBuilderForField(message, f("optional_lazy_message")) - .setField(nestedB, 127).build()); message.setField(f("optional_nested_enum" ), nestedBaz); message.setField(f("optional_foreign_enum"), foreignBaz); @@ -3138,9 +2892,6 @@ public final class TestUtil { message.addRepeatedField(f("repeated_import_message"), newBuilderForField(message, f("repeated_import_message")) .setField(importD, 220).build()); - message.addRepeatedField(f("repeated_lazy_message"), - newBuilderForField(message, f("repeated_lazy_message")) - .setField(nestedB, 227).build()); message.addRepeatedField(f("repeated_nested_enum" ), nestedBar); message.addRepeatedField(f("repeated_foreign_enum"), foreignBar); @@ -3178,9 +2929,6 @@ public final class TestUtil { message.addRepeatedField(f("repeated_import_message"), newBuilderForField(message, f("repeated_import_message")) .setField(importD, 320).build()); - message.addRepeatedField(f("repeated_lazy_message"), - newBuilderForField(message, f("repeated_lazy_message")) - .setField(nestedB, 327).build()); message.addRepeatedField(f("repeated_nested_enum" ), nestedBaz); message.addRepeatedField(f("repeated_foreign_enum"), foreignBaz); @@ -3213,13 +2961,6 @@ public final class TestUtil { message.setField(f("default_string_piece" ), "424"); message.setField(f("default_cord" ), "425"); - - message.setField(f("oneof_uint32" ), 601); - message.setField(f("oneof_nested_message"), - newBuilderForField(message, f("oneof_nested_message")) - .setField(nestedB, 602).build()); - message.setField(f("oneof_string" ), "603"); - message.setField(f("oneof_bytes" ), toBytes("604")); } // ------------------------------------------------------------------- @@ -3258,9 +2999,6 @@ public final class TestUtil { message.setRepeatedField(f("repeated_import_message"), 1, newBuilderForField(message, f("repeated_import_message")) .setField(importD, 520).build()); - message.setRepeatedField(f("repeated_lazy_message"), 1, - newBuilderForField(message, f("repeated_lazy_message")) - .setField(nestedB, 527).build()); message.setRepeatedField(f("repeated_nested_enum" ), 1, nestedFoo); message.setRepeatedField(f("repeated_foreign_enum"), 1, foreignFoo); @@ -3277,7 +3015,7 @@ public final class TestUtil { * {@code message} are set to the values assigned by {@code setAllFields}, * using the {@link Message} reflection interface. */ - public void assertAllFieldsSetViaReflection(MessageOrBuilder message) { + public void assertAllFieldsSetViaReflection(Message message) { Assert.assertTrue(message.hasField(f("optional_int32" ))); Assert.assertTrue(message.hasField(f("optional_int64" ))); Assert.assertTrue(message.hasField(f("optional_uint32" ))); @@ -3345,12 +3083,6 @@ public final class TestUtil { Assert.assertEquals(120, ((Message)message.getField(f("optional_import_message"))) .getField(importD)); - Assert.assertEquals(126, - ((Message)message.getField(f("optional_public_import_message"))) - .getField(importE)); - Assert.assertEquals(127, - ((Message)message.getField(f("optional_lazy_message"))) - .getField(nestedB)); Assert.assertEquals( nestedBaz, message.getField(f("optional_nested_enum" ))); Assert.assertEquals(foreignBaz, message.getField(f("optional_foreign_enum"))); @@ -3381,7 +3113,6 @@ public final class TestUtil { Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_nested_message" ))); Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_foreign_message"))); Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_import_message" ))); - Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_lazy_message" ))); Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_nested_enum" ))); Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_foreign_enum" ))); Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_import_enum" ))); @@ -3417,9 +3148,6 @@ public final class TestUtil { Assert.assertEquals(220, ((Message)message.getRepeatedField(f("repeated_import_message"), 0)) .getField(importD)); - Assert.assertEquals(227, - ((Message)message.getRepeatedField(f("repeated_lazy_message"), 0)) - .getField(nestedB)); Assert.assertEquals( nestedBar, message.getRepeatedField(f("repeated_nested_enum" ),0)); Assert.assertEquals(foreignBar, message.getRepeatedField(f("repeated_foreign_enum"),0)); @@ -3456,9 +3184,6 @@ public final class TestUtil { Assert.assertEquals(320, ((Message)message.getRepeatedField(f("repeated_import_message"), 1)) .getField(importD)); - Assert.assertEquals(327, - ((Message)message.getRepeatedField(f("repeated_lazy_message"), 1)) - .getField(nestedB)); Assert.assertEquals( nestedBaz, message.getRepeatedField(f("repeated_nested_enum" ),1)); Assert.assertEquals(foreignBaz, message.getRepeatedField(f("repeated_foreign_enum"),1)); @@ -3514,24 +3239,6 @@ public final class TestUtil { Assert.assertEquals("424", message.getField(f("default_string_piece"))); Assert.assertEquals("425", message.getField(f("default_cord"))); - - Assert.assertTrue(message.hasField(f("oneof_bytes"))); - Assert.assertEquals(toBytes("604"), message.getField(f("oneof_bytes"))); - - if (extensionRegistry == null) { - Assert.assertFalse(message.hasField(f("oneof_uint32"))); - Assert.assertFalse(message.hasField(f("oneof_nested_message"))); - Assert.assertFalse(message.hasField(f("oneof_string"))); - } else { - Assert.assertTrue(message.hasField(f("oneof_uint32"))); - Assert.assertTrue(message.hasField(f("oneof_nested_message"))); - Assert.assertTrue(message.hasField(f("oneof_string"))); - Assert.assertEquals(601, message.getField(f("oneof_uint32"))); - Assert.assertEquals(602, - ((MessageOrBuilder) message.getField(f("oneof_nested_message"))) - .getField(nestedB)); - Assert.assertEquals("603", message.getField(f("oneof_string"))); - } } // ------------------------------------------------------------------- @@ -3541,7 +3248,7 @@ public final class TestUtil { * {@code message} are cleared, and that getting the fields returns their * default values, using the {@link Message} reflection interface. */ - public void assertClearViaReflection(MessageOrBuilder message) { + public void assertClearViaReflection(Message message) { // has_blah() should initially be false for all optional fields. Assert.assertFalse(message.hasField(f("optional_int32" ))); Assert.assertFalse(message.hasField(f("optional_int64" ))); @@ -3600,12 +3307,6 @@ public final class TestUtil { Assert.assertFalse( ((Message)message.getField(f("optional_import_message"))) .hasField(importD)); - Assert.assertFalse( - ((Message)message.getField(f("optional_public_import_message"))) - .hasField(importE)); - Assert.assertFalse( - ((Message)message.getField(f("optional_lazy_message"))) - .hasField(nestedB)); Assert.assertEquals(0, ((Message)message.getField(f("optionalgroup"))).getField(groupA)); @@ -3618,12 +3319,6 @@ public final class TestUtil { Assert.assertEquals(0, ((Message)message.getField(f("optional_import_message"))) .getField(importD)); - Assert.assertEquals(0, - ((Message)message.getField(f("optional_public_import_message"))) - .getField(importE)); - Assert.assertEquals(0, - ((Message)message.getField(f("optional_lazy_message"))) - .getField(nestedB)); // Enums without defaults are set to the first value in the enum. Assert.assertEquals( nestedFoo, message.getField(f("optional_nested_enum" ))); @@ -3654,7 +3349,6 @@ public final class TestUtil { Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_nested_message" ))); Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_foreign_message"))); Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_import_message" ))); - Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_lazy_message" ))); Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_nested_enum" ))); Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_foreign_enum" ))); Assert.assertEquals(0, message.getRepeatedFieldCount(f("repeated_import_enum" ))); @@ -3709,22 +3403,11 @@ public final class TestUtil { Assert.assertEquals("abc", message.getField(f("default_string_piece"))); Assert.assertEquals("123", message.getField(f("default_cord"))); - - Assert.assertFalse(message.hasField(f("oneof_uint32"))); - Assert.assertFalse(message.hasField(f("oneof_nested_message"))); - Assert.assertFalse(message.hasField(f("oneof_string"))); - Assert.assertFalse(message.hasField(f("oneof_bytes"))); - - Assert.assertEquals(0, message.getField(f("oneof_uint32"))); - Assert.assertEquals("", message.getField(f("oneof_string"))); - Assert.assertEquals(toBytes(""), message.getField(f("oneof_bytes"))); } - // --------------------------------------------------------------- - public void assertRepeatedFieldsModifiedViaReflection( - MessageOrBuilder message) { + public void assertRepeatedFieldsModifiedViaReflection(Message message) { // ModifyRepeatedFields only sets the second repeated element of each // field. In addition to verifying this, we also verify that the first // element and size were *not* modified. @@ -3748,7 +3431,6 @@ public final class TestUtil { Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_nested_message" ))); Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_foreign_message"))); Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_import_message" ))); - Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_lazy_message" ))); Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_nested_enum" ))); Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_foreign_enum" ))); Assert.assertEquals(2, message.getRepeatedFieldCount(f("repeated_import_enum" ))); @@ -3784,9 +3466,6 @@ public final class TestUtil { Assert.assertEquals(220, ((Message)message.getRepeatedField(f("repeated_import_message"), 0)) .getField(importD)); - Assert.assertEquals(227, - ((Message)message.getRepeatedField(f("repeated_lazy_message"), 0)) - .getField(nestedB)); Assert.assertEquals( nestedBar, message.getRepeatedField(f("repeated_nested_enum" ),0)); Assert.assertEquals(foreignBar, message.getRepeatedField(f("repeated_foreign_enum"),0)); @@ -3823,9 +3502,6 @@ public final class TestUtil { Assert.assertEquals(520, ((Message)message.getRepeatedField(f("repeated_import_message"), 1)) .getField(importD)); - Assert.assertEquals(527, - ((Message)message.getRepeatedField(f("repeated_lazy_message"), 1)) - .getField(nestedB)); Assert.assertEquals( nestedFoo, message.getRepeatedField(f("repeated_nested_enum" ),1)); Assert.assertEquals(foreignFoo, message.getRepeatedField(f("repeated_foreign_enum"),1)); @@ -3867,7 +3543,7 @@ public final class TestUtil { message.addRepeatedField(f("packed_enum" ), foreignBaz); } - public void assertPackedFieldsSetViaReflection(MessageOrBuilder message) { + public void assertPackedFieldsSetViaReflection(Message message) { Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_int32" ))); Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_int64" ))); Assert.assertEquals(2, message.getRepeatedFieldCount(f("packed_uint32" ))); @@ -4023,7 +3699,7 @@ public final class TestUtil { /** * @param filePath The path relative to - * {@link #getTestDataDir}. + * {@link com.google.testing.util.TestUtil#getDefaultSrcDir}. */ public static String readTextFromFile(String filePath) { return readBytesFromFile(filePath).toStringUtf8(); @@ -4052,8 +3728,8 @@ public final class TestUtil { } /** - * @param filename The path relative to - * {@link #getTestDataDir}. + * @param filePath The path relative to + * {@link com.google.testing.util.TestUtil#getDefaultSrcDir}. */ public static ByteString readBytesFromFile(String filename) { File fullPath = new File(getTestDataDir(), filename); @@ -4073,13 +3749,13 @@ public final class TestUtil { /** * Get the bytes of the "golden message". This is a serialized TestAllTypes * with all fields set as they would be by - * {@link #setAllFields(TestAllTypes.Builder)}, but it is loaded from a file + * {@link setAllFields(TestAllTypes.Builder)}, but it is loaded from a file * on disk rather than generated dynamically. The file is actually generated * by C++ code, so testing against it verifies compatibility with C++. */ public static ByteString getGoldenMessage() { if (goldenMessage == null) { - goldenMessage = readBytesFromFile("golden_message_oneof_implemented"); + goldenMessage = readBytesFromFile("golden_message"); } return goldenMessage; } @@ -4088,7 +3764,7 @@ public final class TestUtil { /** * Get the bytes of the "golden packed fields message". This is a serialized * TestPackedTypes with all fields set as they would be by - * {@link #setPackedFields(TestPackedTypes.Builder)}, but it is loaded from a + * {@link setPackedFields(TestPackedTypes.Builder)}, but it is loaded from a * file on disk rather than generated dynamically. The file is actually * generated by C++ code, so testing against it verifies compatibility with * C++. @@ -4101,24 +3777,4 @@ public final class TestUtil { return goldenPackedFieldsMessage; } private static ByteString goldenPackedFieldsMessage = null; - - /** - * Mock implementation of {@link GeneratedMessage.BuilderParent} for testing. - * - * @author jonp@google.com (Jon Perlow) - */ - public static class MockBuilderParent - implements GeneratedMessage.BuilderParent { - - private int invalidations; - - //@Override (Java 1.6 override semantics, but we must support 1.5) - public void markDirty() { - invalidations++; - } - - public int getInvalidationCount() { - return invalidations; - } - } } diff --git a/java/src/test/java/com/google/protobuf/TextFormatTest.java b/java/src/test/java/com/google/protobuf/TextFormatTest.java index 152bdad..60bd800 100644 --- a/java/src/test/java/com/google/protobuf/TextFormatTest.java +++ b/java/src/test/java/com/google/protobuf/TextFormatTest.java @@ -1,6 +1,6 @@ // Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ +// http://code.google.com/p/protobuf/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -31,16 +31,14 @@ package com.google.protobuf; import com.google.protobuf.Descriptors.FieldDescriptor; -import com.google.protobuf.TextFormat.Parser.SingularOverwritePolicy; -import protobuf_unittest.UnittestMset.TestMessageSet; -import protobuf_unittest.UnittestMset.TestMessageSetExtension1; -import protobuf_unittest.UnittestMset.TestMessageSetExtension2; import protobuf_unittest.UnittestProto.OneString; -import protobuf_unittest.UnittestProto.TestAllExtensions; import protobuf_unittest.UnittestProto.TestAllTypes; -import protobuf_unittest.UnittestProto.TestAllTypes.NestedMessage; +import protobuf_unittest.UnittestProto.TestAllExtensions; import protobuf_unittest.UnittestProto.TestEmptyMessage; -import protobuf_unittest.UnittestProto.TestOneof2; +import protobuf_unittest.UnittestProto.TestAllTypes.NestedMessage; +import protobuf_unittest.UnittestMset.TestMessageSet; +import protobuf_unittest.UnittestMset.TestMessageSetExtension1; +import protobuf_unittest.UnittestMset.TestMessageSetExtension2; import junit.framework.TestCase; @@ -62,11 +60,11 @@ public class TextFormatTest extends TestCase { // A representation of the above string with all the characters escaped. private final static String kEscapeTestStringEscaped = - "\\\"A string with \\' characters \\n and \\r newlines " - + "and \\t tabs and \\001 slashes \\\\"; + "\"\\\"A string with \\' characters \\n and \\r newlines " + + "and \\t tabs and \\001 slashes \\\\\""; private static String allFieldsSetText = TestUtil.readTextFromFile( - "text_format_unittest_data_oneof_implemented.txt"); + "text_format_unittest_data.txt"); private static String allExtensionsSetText = TestUtil.readTextFromFile( "text_format_unittest_extensions_data.txt"); @@ -111,23 +109,6 @@ public class TextFormatTest extends TestCase { " str: \"foo\"\n" + "}\n"; - private String messageSetTextWithRepeatedExtension = - "[protobuf_unittest.TestMessageSetExtension1] {\n" + - " i: 123\n" + - "}\n" + - "[protobuf_unittest.TestMessageSetExtension1] {\n" + - " i: 456\n" + - "}\n"; - - private final TextFormat.Parser parserWithOverwriteForbidden = - TextFormat.Parser.newBuilder() - .setSingularOverwritePolicy( - SingularOverwritePolicy.FORBID_SINGULAR_OVERWRITES) - .build(); - - private final TextFormat.Parser defaultParser = - TextFormat.Parser.newBuilder().build(); - /** Print TestAllTypes and compare with golden file. */ public void testPrintMessage() throws Exception { String javaText = TextFormat.printToString(TestUtil.getAllSet()); @@ -140,18 +121,6 @@ public class TextFormatTest extends TestCase { assertEquals(allFieldsSetText, javaText); } - /** Print TestAllTypes as Builder and compare with golden file. */ - public void testPrintMessageBuilder() throws Exception { - String javaText = TextFormat.printToString(TestUtil.getAllSetBuilder()); - - // Java likes to add a trailing ".0" to floats and doubles. C printf - // (with %g format) does not. Our golden files are used for both - // C++ and Java TextFormat classes, so we need to conform. - javaText = javaText.replace(".0\n", "\n"); - - assertEquals(allFieldsSetText, javaText); - } - /** Print TestAllExtensions and compare with golden file. */ public void testPrintExtensions() throws Exception { String javaText = TextFormat.printToString(TestUtil.getAllExtensionsSet()); @@ -164,44 +133,40 @@ public class TextFormatTest extends TestCase { assertEquals(allExtensionsSetText, javaText); } - // Creates an example unknown field set. - private UnknownFieldSet makeUnknownFieldSet() { - return UnknownFieldSet.newBuilder() - .addField(5, - UnknownFieldSet.Field.newBuilder() - .addVarint(1) - .addFixed32(2) - .addFixed64(3) - .addLengthDelimited(ByteString.copyFromUtf8("4")) - .addGroup( - UnknownFieldSet.newBuilder() - .addField(10, - UnknownFieldSet.Field.newBuilder() - .addVarint(5) - .build()) - .build()) - .build()) - .addField(8, - UnknownFieldSet.Field.newBuilder() - .addVarint(1) - .addVarint(2) - .addVarint(3) - .build()) - .addField(15, - UnknownFieldSet.Field.newBuilder() - .addVarint(0xABCDEF1234567890L) - .addFixed32(0xABCD1234) - .addFixed64(0xABCDEF1234567890L) - .build()) - .build(); - } - public void testPrintUnknownFields() throws Exception { // Test printing of unknown fields in a message. TestEmptyMessage message = TestEmptyMessage.newBuilder() - .setUnknownFields(makeUnknownFieldSet()) + .setUnknownFields( + UnknownFieldSet.newBuilder() + .addField(5, + UnknownFieldSet.Field.newBuilder() + .addVarint(1) + .addFixed32(2) + .addFixed64(3) + .addLengthDelimited(ByteString.copyFromUtf8("4")) + .addGroup( + UnknownFieldSet.newBuilder() + .addField(10, + UnknownFieldSet.Field.newBuilder() + .addVarint(5) + .build()) + .build()) + .build()) + .addField(8, + UnknownFieldSet.Field.newBuilder() + .addVarint(1) + .addVarint(2) + .addVarint(3) + .build()) + .addField(15, + UnknownFieldSet.Field.newBuilder() + .addVarint(0xABCDEF1234567890L) + .addFixed32(0xABCD1234) + .addFixed64(0xABCDEF1234567890L) + .build()) + .build()) .build(); assertEquals( @@ -269,8 +234,8 @@ public class TextFormatTest extends TestCase { .addRepeatedInt32 (1 << 31) .addRepeatedUint32(1 << 31) - .addRepeatedInt64 (1L << 63) - .addRepeatedUint64(1L << 63) + .addRepeatedInt64 (1l << 63) + .addRepeatedUint64(1l << 63) // Floats of various precisions and exponents. .addRepeatedDouble(123) @@ -390,40 +355,6 @@ public class TextFormatTest extends TestCase { TestMessageSetExtension2.messageSetExtension)); assertEquals("foo", messageSet.getExtension( TestMessageSetExtension2.messageSetExtension).getStr()); - - builder = TestMessageSet.newBuilder(); - TextFormat.merge(messageSetTextWithRepeatedExtension, extensionRegistry, - builder); - messageSet = builder.build(); - assertEquals(456, messageSet.getExtension( - TestMessageSetExtension1.messageSetExtension).getI()); - } - - public void testParseMessageSetWithOverwriteForbidden() throws Exception { - ExtensionRegistry extensionRegistry = ExtensionRegistry.newInstance(); - extensionRegistry.add(TestMessageSetExtension1.messageSetExtension); - extensionRegistry.add(TestMessageSetExtension2.messageSetExtension); - - TestMessageSet.Builder builder = TestMessageSet.newBuilder(); - parserWithOverwriteForbidden.merge( - messageSetText, extensionRegistry, builder); - TestMessageSet messageSet = builder.build(); - assertEquals(123, messageSet.getExtension( - TestMessageSetExtension1.messageSetExtension).getI()); - assertEquals("foo", messageSet.getExtension( - TestMessageSetExtension2.messageSetExtension).getStr()); - - builder = TestMessageSet.newBuilder(); - try { - parserWithOverwriteForbidden.merge( - messageSetTextWithRepeatedExtension, extensionRegistry, builder); - fail("expected parse exception"); - } catch (TextFormat.ParseException e) { - assertEquals("6:1: Non-repeated field " - + "\"protobuf_unittest.TestMessageSetExtension1.message_set_extension\"" - + " cannot be overwritten.", - e.getMessage()); - } } public void testParseNumericEnum() throws Exception { @@ -460,32 +391,12 @@ public class TextFormatTest extends TestCase { } } - private void assertParseErrorWithOverwriteForbidden(String error, - String text) { - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - try { - parserWithOverwriteForbidden.merge( - text, TestUtil.getExtensionRegistry(), builder); - fail("Expected parse exception."); - } catch (TextFormat.ParseException e) { - assertEquals(error, e.getMessage()); - } - } - - private TestAllTypes assertParseSuccessWithOverwriteForbidden( - String text) throws TextFormat.ParseException { - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - parserWithOverwriteForbidden.merge( - text, TestUtil.getExtensionRegistry(), builder); - return builder.build(); - } - public void testParseErrors() throws Exception { assertParseError( "1:16: Expected \":\".", "optional_int32 123"); assertParseError( - "1:23: Expected identifier. Found '?'", + "1:23: Expected identifier.", "optional_nested_enum: ?"); assertParseError( "1:18: Couldn't parse integer: Number must be positive: -1", @@ -498,9 +409,6 @@ public class TextFormatTest extends TestCase { "1:16: Expected \"true\" or \"false\".", "optional_bool: maybe"); assertParseError( - "1:16: Expected \"true\" or \"false\".", - "optional_bool: 2"); - assertParseError( "1:18: Expected string.", "optional_string: 123"); assertParseError( @@ -542,10 +450,10 @@ public class TextFormatTest extends TestCase { // Delimiters must match. assertParseError( - "1:22: Expected identifier. Found '}'", + "1:22: Expected identifier.", "OptionalGroup < a: 1 }"); assertParseError( - "1:22: Expected identifier. Found '>'", + "1:22: Expected identifier.", "OptionalGroup { a: 1 >"); } @@ -561,10 +469,6 @@ public class TextFormatTest extends TestCase { TextFormat.unescapeBytes("\\000\\001\\a\\b\\f\\n\\r\\t\\v\\\\\\'\\\"")); assertEquals("\0\001\007\b\f\n\r\t\013\\\'\"", TextFormat.unescapeText("\\000\\001\\a\\b\\f\\n\\r\\t\\v\\\\\\'\\\"")); - assertEquals(kEscapeTestStringEscaped, - TextFormat.escapeText(kEscapeTestString)); - assertEquals(kEscapeTestString, - TextFormat.unescapeText(kEscapeTestStringEscaped)); // Unicode handling. assertEquals("\\341\\210\\264", TextFormat.escapeText("\u1234")); @@ -577,11 +481,6 @@ public class TextFormatTest extends TestCase { assertEquals(bytes(0xe1, 0x88, 0xb4), TextFormat.unescapeBytes("\\xe1\\x88\\xb4")); - // Handling of strings with unescaped Unicode characters > 255. - final String zh = "\u9999\u6e2f\u4e0a\u6d77\ud84f\udf80\u8c50\u9280\u884c"; - ByteString zhByteString = ByteString.copyFromUtf8(zh); - assertEquals(zhByteString, TextFormat.unescapeBytes(zh)); - // Errors. try { TextFormat.unescapeText("\\x"); @@ -723,13 +622,6 @@ public class TextFormatTest extends TestCase { } } - public void testParseString() throws Exception { - final String zh = "\u9999\u6e2f\u4e0a\u6d77\ud84f\udf80\u8c50\u9280\u884c"; - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - TextFormat.merge("optional_string: \"" + zh + "\"", builder); - assertEquals(zh, builder.getOptionalString()); - } - public void testParseLongString() throws Exception { String longText = "123456789012345678901234567890123456789012345678901234567890" + @@ -758,237 +650,9 @@ public class TextFormatTest extends TestCase { assertEquals(longText, builder.getOptionalString()); } - public void testParseBoolean() throws Exception { - String goodText = - "repeated_bool: t repeated_bool : 0\n" + - "repeated_bool :f repeated_bool:1"; - String goodTextCanonical = - "repeated_bool: true\n" + - "repeated_bool: false\n" + - "repeated_bool: false\n" + - "repeated_bool: true\n"; - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - TextFormat.merge(goodText, builder); - assertEquals(goodTextCanonical, builder.build().toString()); - - try { - TestAllTypes.Builder badBuilder = TestAllTypes.newBuilder(); - TextFormat.merge("optional_bool:2", badBuilder); - fail("Should have thrown an exception."); - } catch (TextFormat.ParseException e) { - // success - } - try { - TestAllTypes.Builder badBuilder = TestAllTypes.newBuilder(); - TextFormat.merge("optional_bool: foo", badBuilder); - fail("Should have thrown an exception."); - } catch (TextFormat.ParseException e) { - // success - } - } - public void testParseAdjacentStringLiterals() throws Exception { TestAllTypes.Builder builder = TestAllTypes.newBuilder(); TextFormat.merge("optional_string: \"foo\" 'corge' \"grault\"", builder); assertEquals("foocorgegrault", builder.getOptionalString()); } - - public void testPrintFieldValue() throws Exception { - assertPrintFieldValue("\"Hello\"", "Hello", "repeated_string"); - assertPrintFieldValue("123.0", 123f, "repeated_float"); - assertPrintFieldValue("123.0", 123d, "repeated_double"); - assertPrintFieldValue("123", 123, "repeated_int32"); - assertPrintFieldValue("123", 123L, "repeated_int64"); - assertPrintFieldValue("true", true, "repeated_bool"); - assertPrintFieldValue("4294967295", 0xFFFFFFFF, "repeated_uint32"); - assertPrintFieldValue("18446744073709551615", 0xFFFFFFFFFFFFFFFFL, - "repeated_uint64"); - assertPrintFieldValue("\"\\001\\002\\003\"", - ByteString.copyFrom(new byte[] {1, 2, 3}), "repeated_bytes"); - } - - private void assertPrintFieldValue(String expect, Object value, - String fieldName) throws Exception { - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - StringBuilder sb = new StringBuilder(); - TextFormat.printFieldValue( - TestAllTypes.getDescriptor().findFieldByName(fieldName), - value, sb); - assertEquals(expect, sb.toString()); - } - - public void testShortDebugString() { - assertEquals("optional_nested_message { bb: 42 } repeated_int32: 1" - + " repeated_uint32: 2", - TextFormat.shortDebugString(TestAllTypes.newBuilder() - .addRepeatedInt32(1) - .addRepeatedUint32(2) - .setOptionalNestedMessage( - NestedMessage.newBuilder().setBb(42).build()) - .build())); - } - - public void testShortDebugString_unknown() { - assertEquals("5: 1 5: 0x00000002 5: 0x0000000000000003 5: \"4\" 5 { 10: 5 }" - + " 8: 1 8: 2 8: 3 15: 12379813812177893520 15: 0xabcd1234 15:" - + " 0xabcdef1234567890", - TextFormat.shortDebugString(makeUnknownFieldSet())); - } - - public void testPrintToUnicodeString() throws Exception { - assertEquals( - "optional_string: \"abc\u3042efg\"\n" + - "optional_bytes: \"\\343\\201\\202\"\n" + - "repeated_string: \"\u3093XYZ\"\n", - TextFormat.printToUnicodeString(TestAllTypes.newBuilder() - .setOptionalString("abc\u3042efg") - .setOptionalBytes(bytes(0xe3, 0x81, 0x82)) - .addRepeatedString("\u3093XYZ") - .build())); - - // Double quotes and backslashes should be escaped - assertEquals( - "optional_string: \"a\\\\bc\\\"ef\\\"g\"\n", - TextFormat.printToUnicodeString(TestAllTypes.newBuilder() - .setOptionalString("a\\bc\"ef\"g") - .build())); - - // Test escaping roundtrip - TestAllTypes message = TestAllTypes.newBuilder() - .setOptionalString("a\\bc\\\"ef\"g") - .build(); - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); - TextFormat.merge(TextFormat.printToUnicodeString(message), builder); - assertEquals(message.getOptionalString(), builder.getOptionalString()); - } - - public void testPrintToUnicodeStringWithNewlines() { - // No newlines at start and end - assertEquals("optional_string: \"test newlines\n\nin\nstring\"\n", - TextFormat.printToUnicodeString(TestAllTypes.newBuilder() - .setOptionalString("test newlines\n\nin\nstring") - .build())); - - // Newlines at start and end - assertEquals("optional_string: \"\ntest\nnewlines\n\nin\nstring\n\"\n", - TextFormat.printToUnicodeString(TestAllTypes.newBuilder() - .setOptionalString("\ntest\nnewlines\n\nin\nstring\n") - .build())); - - // Strings with 0, 1 and 2 newlines. - assertEquals("optional_string: \"\"\n", - TextFormat.printToUnicodeString(TestAllTypes.newBuilder() - .setOptionalString("") - .build())); - assertEquals("optional_string: \"\n\"\n", - TextFormat.printToUnicodeString(TestAllTypes.newBuilder() - .setOptionalString("\n") - .build())); - assertEquals("optional_string: \"\n\n\"\n", - TextFormat.printToUnicodeString(TestAllTypes.newBuilder() - .setOptionalString("\n\n") - .build())); - } - - public void testPrintToUnicodeString_unknown() { - assertEquals( - "1: \"\\343\\201\\202\"\n", - TextFormat.printToUnicodeString(UnknownFieldSet.newBuilder() - .addField(1, - UnknownFieldSet.Field.newBuilder() - .addLengthDelimited(bytes(0xe3, 0x81, 0x82)).build()) - .build())); - } - - public void testParseNonRepeatedFields() throws Exception { - assertParseSuccessWithOverwriteForbidden( - "repeated_int32: 1\n" + - "repeated_int32: 2\n"); - assertParseSuccessWithOverwriteForbidden( - "RepeatedGroup { a: 1 }\n" + - "RepeatedGroup { a: 2 }\n"); - assertParseSuccessWithOverwriteForbidden( - "repeated_nested_message { bb: 1 }\n" + - "repeated_nested_message { bb: 2 }\n"); - assertParseErrorWithOverwriteForbidden( - "3:17: Non-repeated field " + - "\"protobuf_unittest.TestAllTypes.optional_int32\" " + - "cannot be overwritten.", - "optional_int32: 1\n" + - "optional_bool: true\n" + - "optional_int32: 1\n"); - assertParseErrorWithOverwriteForbidden( - "2:17: Non-repeated field " + - "\"protobuf_unittest.TestAllTypes.optionalgroup\" " + - "cannot be overwritten.", - "OptionalGroup { a: 1 }\n" + - "OptionalGroup { }\n"); - assertParseErrorWithOverwriteForbidden( - "2:33: Non-repeated field " + - "\"protobuf_unittest.TestAllTypes.optional_nested_message\" " + - "cannot be overwritten.", - "optional_nested_message { }\n" + - "optional_nested_message { bb: 3 }\n"); - assertParseErrorWithOverwriteForbidden( - "2:16: Non-repeated field " + - "\"protobuf_unittest.TestAllTypes.default_int32\" " + - "cannot be overwritten.", - "default_int32: 41\n" + // the default value - "default_int32: 41\n"); - assertParseErrorWithOverwriteForbidden( - "2:17: Non-repeated field " + - "\"protobuf_unittest.TestAllTypes.default_string\" " + - "cannot be overwritten.", - "default_string: \"zxcv\"\n" + - "default_string: \"asdf\"\n"); - } - - public void testParseShortRepeatedFormOfRepeatedFields() throws Exception { - assertParseSuccessWithOverwriteForbidden("repeated_foreign_enum: [FOREIGN_FOO, FOREIGN_BAR]"); - assertParseSuccessWithOverwriteForbidden("repeated_int32: [ 1, 2 ]\n"); - assertParseSuccessWithOverwriteForbidden("RepeatedGroup [{ a: 1 },{ a: 2 }]\n"); - assertParseSuccessWithOverwriteForbidden("repeated_nested_message [{ bb: 1 }, { bb: 2 }]\n"); - } - - public void testParseShortRepeatedFormOfNonRepeatedFields() throws Exception { - assertParseErrorWithOverwriteForbidden( - "1:17: Couldn't parse integer: For input string: \"[\"", - "optional_int32: [1]\n"); - } - - // ======================================================================= - // test oneof - - public void testOneofTextFormat() throws Exception { - TestOneof2.Builder builder = TestOneof2.newBuilder(); - TestUtil.setOneof(builder); - TestOneof2 message = builder.build(); - TestOneof2.Builder dest = TestOneof2.newBuilder(); - TextFormat.merge(TextFormat.printToUnicodeString(message), dest); - TestUtil.assertOneofSet(dest.build()); - } - - public void testOneofOverwriteForbidden() throws Exception { - String input = "foo_string: \"stringvalue\" foo_int: 123"; - TestOneof2.Builder builder = TestOneof2.newBuilder(); - try { - parserWithOverwriteForbidden.merge( - input, TestUtil.getExtensionRegistry(), builder); - fail("Expected parse exception."); - } catch (TextFormat.ParseException e) { - assertEquals("1:36: Field \"protobuf_unittest.TestOneof2.foo_int\"" - + " is specified along with field \"protobuf_unittest.TestOneof2.foo_string\"," - + " another member of oneof \"foo\".", e.getMessage()); - } - } - - public void testOneofOverwriteAllowed() throws Exception { - String input = "foo_string: \"stringvalue\" foo_int: 123"; - TestOneof2.Builder builder = TestOneof2.newBuilder(); - defaultParser.merge(input, TestUtil.getExtensionRegistry(), builder); - // Only the last value sticks. - TestOneof2 oneof = builder.build(); - assertFalse(oneof.hasFooString()); - assertTrue(oneof.hasFooInt()); - } } diff --git a/java/src/test/java/com/google/protobuf/UnknownFieldSetTest.java b/java/src/test/java/com/google/protobuf/UnknownFieldSetTest.java index 93a5ee2..ea088b3 100644 --- a/java/src/test/java/com/google/protobuf/UnknownFieldSetTest.java +++ b/java/src/test/java/com/google/protobuf/UnknownFieldSetTest.java @@ -1,6 +1,6 @@ // Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ +// http://code.google.com/p/protobuf/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -31,13 +31,10 @@ package com.google.protobuf; import protobuf_unittest.UnittestProto; -import protobuf_unittest.UnittestProto.ForeignEnum; import protobuf_unittest.UnittestProto.TestAllExtensions; import protobuf_unittest.UnittestProto.TestAllTypes; import protobuf_unittest.UnittestProto.TestEmptyMessage; import protobuf_unittest.UnittestProto.TestEmptyMessageWithExtensions; -import protobuf_unittest.UnittestProto.TestPackedExtensions; -import protobuf_unittest.UnittestProto.TestPackedTypes; import junit.framework.TestCase; @@ -207,13 +204,6 @@ public class UnknownFieldSetTest extends TestCase { TestEmptyMessage.newBuilder().mergeFrom(emptyMessage).clear().build(); assertEquals(0, message.getSerializedSize()); } - - public void testClearField() throws Exception { - int fieldNumber = unknownFields.asMap().keySet().iterator().next(); - UnknownFieldSet fields = - UnknownFieldSet.newBuilder().mergeFrom(unknownFields).clearField(fieldNumber).build(); - assertFalse(fields.hasField(fieldNumber)); - } public void testParseKnownAndUnknown() throws Exception { // Test mixing known and unknown fields when parsing. @@ -444,210 +434,4 @@ public class UnknownFieldSetTest extends TestCase { assertEquals(copy, set); assertEquals(set.hashCode(), copy.hashCode()); } - - // ================================================================= - - public void testSerializeLite() throws Exception { - UnittestLite.TestEmptyMessageLite emptyMessageLite = - UnittestLite.TestEmptyMessageLite.parseFrom(allFieldsData); - assertEquals(allFieldsData.size(), emptyMessageLite.getSerializedSize()); - ByteString data = emptyMessageLite.toByteString(); - TestAllTypes message = TestAllTypes.parseFrom(data); - TestUtil.assertAllFieldsSet(message); - assertEquals(allFieldsData, data); - } - - public void testAllExtensionsLite() throws Exception { - TestAllExtensions allExtensions = TestUtil.getAllExtensionsSet(); - ByteString allExtensionsData = allExtensions.toByteString(); - UnittestLite.TestEmptyMessageLite emptyMessageLite = - UnittestLite.TestEmptyMessageLite.PARSER.parseFrom(allExtensionsData); - ByteString data = emptyMessageLite.toByteString(); - TestAllExtensions message = - TestAllExtensions.parseFrom(data, TestUtil.getExtensionRegistry()); - TestUtil.assertAllExtensionsSet(message); - assertEquals(allExtensionsData, data); - } - - public void testAllPackedFieldsLite() throws Exception { - TestPackedTypes allPackedFields = TestUtil.getPackedSet(); - ByteString allPackedData = allPackedFields.toByteString(); - UnittestLite.TestEmptyMessageLite emptyMessageLite = - UnittestLite.TestEmptyMessageLite.parseFrom(allPackedData); - ByteString data = emptyMessageLite.toByteString(); - TestPackedTypes message = - TestPackedTypes.parseFrom(data, TestUtil.getExtensionRegistry()); - TestUtil.assertPackedFieldsSet(message); - assertEquals(allPackedData, data); - } - - public void testAllPackedExtensionsLite() throws Exception { - TestPackedExtensions allPackedExtensions = TestUtil.getPackedExtensionsSet(); - ByteString allPackedExtensionsData = allPackedExtensions.toByteString(); - UnittestLite.TestEmptyMessageLite emptyMessageLite = - UnittestLite.TestEmptyMessageLite.parseFrom(allPackedExtensionsData); - ByteString data = emptyMessageLite.toByteString(); - TestPackedExtensions message = - TestPackedExtensions.parseFrom(data, TestUtil.getExtensionRegistry()); - TestUtil.assertPackedExtensionsSet(message); - assertEquals(allPackedExtensionsData, data); - } - - public void testCopyFromLite() throws Exception { - UnittestLite.TestEmptyMessageLite emptyMessageLite = - UnittestLite.TestEmptyMessageLite.parseFrom(allFieldsData); - UnittestLite.TestEmptyMessageLite emptyMessageLite2 = - UnittestLite.TestEmptyMessageLite.newBuilder() - .mergeFrom(emptyMessageLite).build(); - assertEquals(emptyMessageLite.toByteString(), emptyMessageLite2.toByteString()); - } - - public void testMergeFromLite() throws Exception { - TestAllTypes message1 = TestAllTypes.newBuilder() - .setOptionalInt32(1) - .setOptionalString("foo") - .addRepeatedString("bar") - .setOptionalNestedEnum(TestAllTypes.NestedEnum.BAZ) - .build(); - - TestAllTypes message2 = TestAllTypes.newBuilder() - .setOptionalInt64(2) - .setOptionalString("baz") - .addRepeatedString("qux") - .setOptionalForeignEnum(ForeignEnum.FOREIGN_BAZ) - .build(); - - ByteString data1 = message1.toByteString(); - UnittestLite.TestEmptyMessageLite emptyMessageLite1 = - UnittestLite.TestEmptyMessageLite.parseFrom(data1); - ByteString data2 = message2.toByteString(); - UnittestLite.TestEmptyMessageLite emptyMessageLite2 = - UnittestLite.TestEmptyMessageLite.parseFrom(data2); - - message1 = TestAllTypes.newBuilder(message1).mergeFrom(message2).build(); - emptyMessageLite1 = UnittestLite.TestEmptyMessageLite.newBuilder(emptyMessageLite1) - .mergeFrom(emptyMessageLite2).build(); - - data1 = emptyMessageLite1.toByteString(); - message2 = TestAllTypes.parseFrom(data1); - - assertEquals(message1, message2); - } - - public void testWrongTypeTreatedAsUnknownLite() throws Exception { - // Test that fields of the wrong wire type are treated like unknown fields - // when parsing. - - ByteString bizarroData = getBizarroData(); - TestAllTypes allTypesMessage = TestAllTypes.parseFrom(bizarroData); - UnittestLite.TestEmptyMessageLite emptyMessageLite = - UnittestLite.TestEmptyMessageLite.parseFrom(bizarroData); - ByteString data = emptyMessageLite.toByteString(); - TestAllTypes allTypesMessage2 = TestAllTypes.parseFrom(data); - - assertEquals(allTypesMessage.toString(), allTypesMessage2.toString()); - } - - public void testUnknownExtensionsLite() throws Exception { - // Make sure fields are properly parsed to the UnknownFieldSet even when - // they are declared as extension numbers. - - UnittestLite.TestEmptyMessageWithExtensionsLite message = - UnittestLite.TestEmptyMessageWithExtensionsLite.parseFrom(allFieldsData); - - assertEquals(allFieldsData, message.toByteString()); - } - - public void testWrongExtensionTypeTreatedAsUnknownLite() throws Exception { - // Test that fields of the wrong wire type are treated like unknown fields - // when parsing extensions. - - ByteString bizarroData = getBizarroData(); - TestAllExtensions allExtensionsMessage = - TestAllExtensions.parseFrom(bizarroData); - UnittestLite.TestEmptyMessageLite emptyMessageLite = - UnittestLite.TestEmptyMessageLite.parseFrom(bizarroData); - - // All fields should have been interpreted as unknown, so the byte strings - // should be the same. - assertEquals(emptyMessageLite.toByteString(), - allExtensionsMessage.toByteString()); - } - - public void testParseUnknownEnumValueLite() throws Exception { - Descriptors.FieldDescriptor singularField = - TestAllTypes.getDescriptor().findFieldByName("optional_nested_enum"); - Descriptors.FieldDescriptor repeatedField = - TestAllTypes.getDescriptor().findFieldByName("repeated_nested_enum"); - assertNotNull(singularField); - assertNotNull(repeatedField); - - ByteString data = - UnknownFieldSet.newBuilder() - .addField(singularField.getNumber(), - UnknownFieldSet.Field.newBuilder() - .addVarint(TestAllTypes.NestedEnum.BAR.getNumber()) - .addVarint(5) // not valid - .build()) - .addField(repeatedField.getNumber(), - UnknownFieldSet.Field.newBuilder() - .addVarint(TestAllTypes.NestedEnum.FOO.getNumber()) - .addVarint(4) // not valid - .addVarint(TestAllTypes.NestedEnum.BAZ.getNumber()) - .addVarint(6) // not valid - .build()) - .build() - .toByteString(); - - UnittestLite.TestEmptyMessageLite emptyMessageLite = - UnittestLite.TestEmptyMessageLite.parseFrom(data); - data = emptyMessageLite.toByteString(); - - { - TestAllTypes message = TestAllTypes.parseFrom(data); - assertEquals(TestAllTypes.NestedEnum.BAR, - message.getOptionalNestedEnum()); - assertEquals( - Arrays.asList(TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAZ), - message.getRepeatedNestedEnumList()); - assertEquals(Arrays.asList(5L), - message.getUnknownFields() - .getField(singularField.getNumber()) - .getVarintList()); - assertEquals(Arrays.asList(4L, 6L), - message.getUnknownFields() - .getField(repeatedField.getNumber()) - .getVarintList()); - } - - { - TestAllExtensions message = - TestAllExtensions.parseFrom(data, TestUtil.getExtensionRegistry()); - assertEquals(TestAllTypes.NestedEnum.BAR, - message.getExtension(UnittestProto.optionalNestedEnumExtension)); - assertEquals( - Arrays.asList(TestAllTypes.NestedEnum.FOO, TestAllTypes.NestedEnum.BAZ), - message.getExtension(UnittestProto.repeatedNestedEnumExtension)); - assertEquals(Arrays.asList(5L), - message.getUnknownFields() - .getField(singularField.getNumber()) - .getVarintList()); - assertEquals(Arrays.asList(4L, 6L), - message.getUnknownFields() - .getField(repeatedField.getNumber()) - .getVarintList()); - } - } - - public void testClearLite() throws Exception { - UnittestLite.TestEmptyMessageLite emptyMessageLite1 = - UnittestLite.TestEmptyMessageLite.parseFrom(allFieldsData); - UnittestLite.TestEmptyMessageLite emptyMessageLite2 = - UnittestLite.TestEmptyMessageLite.newBuilder() - .mergeFrom(emptyMessageLite1).clear().build(); - assertEquals(0, emptyMessageLite2.getSerializedSize()); - ByteString data = emptyMessageLite2.toByteString(); - assertEquals(0, data.size()); - } - } diff --git a/java/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java b/java/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java deleted file mode 100644 index b1c75fc..0000000 --- a/java/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java +++ /dev/null @@ -1,227 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package com.google.protobuf; - -import junit.framework.TestCase; - -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; - -/** - * Tests for {@link UnmodifiableLazyStringList}. - * - * @author jonp@google.com (Jon Perlow) - */ -public class UnmodifiableLazyStringListTest extends TestCase { - - private static String STRING_A = "A"; - private static String STRING_B = "B"; - private static String STRING_C = "C"; - - private static ByteString BYTE_STRING_A = ByteString.copyFromUtf8("A"); - private static ByteString BYTE_STRING_B = ByteString.copyFromUtf8("B"); - private static ByteString BYTE_STRING_C = ByteString.copyFromUtf8("C"); - - public void testReadOnlyMethods() { - LazyStringArrayList rawList = createSampleList(); - UnmodifiableLazyStringList list = new UnmodifiableLazyStringList(rawList); - assertEquals(3, list.size()); - assertSame(STRING_A, list.get(0)); - assertSame(STRING_B, list.get(1)); - assertSame(STRING_C, list.get(2)); - assertEquals(BYTE_STRING_A, list.getByteString(0)); - assertEquals(BYTE_STRING_B, list.getByteString(1)); - assertEquals(BYTE_STRING_C, list.getByteString(2)); - - List<ByteString> byteStringList = list.asByteStringList(); - assertSame(list.getByteString(0), byteStringList.get(0)); - assertSame(list.getByteString(1), byteStringList.get(1)); - assertSame(list.getByteString(2), byteStringList.get(2)); - } - - public void testModifyMethods() { - LazyStringArrayList rawList = createSampleList(); - UnmodifiableLazyStringList list = new UnmodifiableLazyStringList(rawList); - - try { - list.remove(0); - fail(); - } catch (UnsupportedOperationException e) { - // expected - } - assertEquals(3, list.size()); - - try { - list.add(STRING_B); - fail(); - } catch (UnsupportedOperationException e) { - // expected - } - assertEquals(3, list.size()); - - try { - list.set(1, STRING_B); - fail(); - } catch (UnsupportedOperationException e) { - // expected - } - assertEquals(3, list.size()); - - List<ByteString> byteStringList = list.asByteStringList(); - try { - byteStringList.remove(0); - fail(); - } catch (UnsupportedOperationException e) { - // expected - } - assertEquals(3, list.size()); - assertEquals(3, byteStringList.size()); - - try { - byteStringList.add(BYTE_STRING_B); - fail(); - } catch (UnsupportedOperationException e) { - // expected - } - assertEquals(3, list.size()); - assertEquals(3, byteStringList.size()); - - try { - byteStringList.set(1, BYTE_STRING_B); - fail(); - } catch (UnsupportedOperationException e) { - // expected - } - assertEquals(3, list.size()); - assertEquals(3, byteStringList.size()); - } - - public void testIterator() { - LazyStringArrayList rawList = createSampleList(); - UnmodifiableLazyStringList list = new UnmodifiableLazyStringList(rawList); - - Iterator<String> iter = list.iterator(); - int count = 0; - while (iter.hasNext()) { - iter.next(); - count++; - try { - iter.remove(); - fail(); - } catch (UnsupportedOperationException e) { - // expected - } - } - assertEquals(3, count); - - List<ByteString> byteStringList = list.asByteStringList(); - Iterator<ByteString> byteIter = byteStringList.iterator(); - count = 0; - while (byteIter.hasNext()) { - byteIter.next(); - count++; - try { - byteIter.remove(); - fail(); - } catch (UnsupportedOperationException e) { - // expected - } - } - assertEquals(3, count); - } - - public void testListIterator() { - LazyStringArrayList rawList = createSampleList(); - UnmodifiableLazyStringList list = new UnmodifiableLazyStringList(rawList); - - ListIterator<String> iter = list.listIterator(); - int count = 0; - while (iter.hasNext()) { - iter.next(); - count++; - try { - iter.remove(); - fail(); - } catch (UnsupportedOperationException e) { - // expected - } - try { - iter.set("bar"); - fail(); - } catch (UnsupportedOperationException e) { - // expected - } - try { - iter.add("bar"); - fail(); - } catch (UnsupportedOperationException e) { - // expected - } - } - assertEquals(3, count); - - List<ByteString> byteStringList = list.asByteStringList(); - ListIterator<ByteString> byteIter = byteStringList.listIterator(); - count = 0; - while (byteIter.hasNext()) { - byteIter.next(); - count++; - try { - byteIter.remove(); - fail(); - } catch (UnsupportedOperationException e) { - // expected - } - try { - byteIter.set(BYTE_STRING_A); - fail(); - } catch (UnsupportedOperationException e) { - // expected - } - try { - byteIter.add(BYTE_STRING_A); - fail(); - } catch (UnsupportedOperationException e) { - // expected - } - } - assertEquals(3, count); - } - - private LazyStringArrayList createSampleList() { - LazyStringArrayList rawList = new LazyStringArrayList(); - rawList.add(STRING_A); - rawList.add(STRING_B); - rawList.add(STRING_C); - return rawList; - } -} diff --git a/java/src/test/java/com/google/protobuf/WireFormatTest.java b/java/src/test/java/com/google/protobuf/WireFormatTest.java index 6858524..5ea1dd6 100644 --- a/java/src/test/java/com/google/protobuf/WireFormatTest.java +++ b/java/src/test/java/com/google/protobuf/WireFormatTest.java @@ -1,6 +1,6 @@ // Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ +// http://code.google.com/p/protobuf/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -34,14 +34,11 @@ import junit.framework.TestCase; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.util.List; import protobuf_unittest.UnittestProto; import protobuf_unittest.UnittestProto.TestAllExtensions; import protobuf_unittest.UnittestProto.TestAllTypes; import protobuf_unittest.UnittestProto.TestFieldOrderings; -import protobuf_unittest.UnittestProto.TestOneof2; -import protobuf_unittest.UnittestProto.TestOneofBackwardsCompatible; import protobuf_unittest.UnittestProto.TestPackedExtensions; import protobuf_unittest.UnittestProto.TestPackedTypes; import protobuf_unittest.UnittestMset.TestMessageSet; @@ -220,8 +217,8 @@ public class WireFormatTest extends TestCase { } public void testExtensionsSerializedSize() throws Exception { - assertNotSame(TestUtil.getAllSet().getSerializedSize(), - TestUtil.getAllExtensionsSet().getSerializedSize()); + assertEquals(TestUtil.getAllSet().getSerializedSize(), + TestUtil.getAllExtensionsSet().getSerializedSize()); } public void testSerializeDelimited() throws Exception { @@ -331,17 +328,7 @@ public class WireFormatTest extends TestCase { private static final int TYPE_ID_2 = TestMessageSetExtension2.getDescriptor().getExtensions().get(0).getNumber(); - public void testSerializeMessageSetEagerly() throws Exception { - testSerializeMessageSetWithFlag(true); - } - - public void testSerializeMessageSetNotEagerly() throws Exception { - testSerializeMessageSetWithFlag(false); - } - - private void testSerializeMessageSetWithFlag(boolean eagerParsing) - throws Exception { - ExtensionRegistryLite.setEagerlyParseMessageSets(eagerParsing); + public void testSerializeMessageSet() throws Exception { // Set up a TestMessageSet with two known messages and an unknown one. TestMessageSet messageSet = TestMessageSet.newBuilder() @@ -385,17 +372,7 @@ public class WireFormatTest extends TestCase { assertEquals("bar", raw.getItem(2).getMessage().toStringUtf8()); } - public void testParseMessageSetEagerly() throws Exception { - testParseMessageSetWithFlag(true); - } - - public void testParseMessageSetNotEagerly()throws Exception { - testParseMessageSetWithFlag(false); - } - - private void testParseMessageSetWithFlag(boolean eagerParsing) - throws Exception { - ExtensionRegistryLite.setEagerlyParseMessageSets(eagerParsing); + public void testParseMessageSet() throws Exception { ExtensionRegistry extensionRegistry = ExtensionRegistry.newInstance(); extensionRegistry.add(TestMessageSetExtension1.messageSetExtension); extensionRegistry.add(TestMessageSetExtension2.messageSetExtension); @@ -447,160 +424,4 @@ public class WireFormatTest extends TestCase { assertEquals(1, field.getLengthDelimitedList().size()); assertEquals("bar", field.getLengthDelimitedList().get(0).toStringUtf8()); } - - public void testParseMessageSetExtensionEagerly() throws Exception { - testParseMessageSetExtensionWithFlag(true); - } - - public void testParseMessageSetExtensionNotEagerly() throws Exception { - testParseMessageSetExtensionWithFlag(false); - } - - private void testParseMessageSetExtensionWithFlag(boolean eagerParsing) - throws Exception { - ExtensionRegistryLite.setEagerlyParseMessageSets(eagerParsing); - ExtensionRegistry extensionRegistry = ExtensionRegistry.newInstance(); - extensionRegistry.add(TestMessageSetExtension1.messageSetExtension); - - // Set up a RawMessageSet with a known messages. - int TYPE_ID_1 = - TestMessageSetExtension1 - .getDescriptor().getExtensions().get(0).getNumber(); - RawMessageSet raw = - RawMessageSet.newBuilder() - .addItem( - RawMessageSet.Item.newBuilder() - .setTypeId(TYPE_ID_1) - .setMessage( - TestMessageSetExtension1.newBuilder() - .setI(123) - .build().toByteString()) - .build()) - .build(); - - ByteString data = raw.toByteString(); - - // Parse as a TestMessageSet and check the contents. - TestMessageSet messageSet = - TestMessageSet.parseFrom(data, extensionRegistry); - assertEquals(123, messageSet.getExtension( - TestMessageSetExtension1.messageSetExtension).getI()); - } - - public void testMergeLazyMessageSetExtensionEagerly() throws Exception { - testMergeLazyMessageSetExtensionWithFlag(true); - } - - public void testMergeLazyMessageSetExtensionNotEagerly() throws Exception { - testMergeLazyMessageSetExtensionWithFlag(false); - } - - private void testMergeLazyMessageSetExtensionWithFlag(boolean eagerParsing) - throws Exception { - ExtensionRegistryLite.setEagerlyParseMessageSets(eagerParsing); - ExtensionRegistry extensionRegistry = ExtensionRegistry.newInstance(); - extensionRegistry.add(TestMessageSetExtension1.messageSetExtension); - - // Set up a RawMessageSet with a known messages. - int TYPE_ID_1 = - TestMessageSetExtension1 - .getDescriptor().getExtensions().get(0).getNumber(); - RawMessageSet raw = - RawMessageSet.newBuilder() - .addItem( - RawMessageSet.Item.newBuilder() - .setTypeId(TYPE_ID_1) - .setMessage( - TestMessageSetExtension1.newBuilder() - .setI(123) - .build().toByteString()) - .build()) - .build(); - - ByteString data = raw.toByteString(); - - // Parse as a TestMessageSet and store value into lazy field - TestMessageSet messageSet = - TestMessageSet.parseFrom(data, extensionRegistry); - // Merge lazy field check the contents. - messageSet = - messageSet.toBuilder().mergeFrom(data, extensionRegistry).build(); - assertEquals(123, messageSet.getExtension( - TestMessageSetExtension1.messageSetExtension).getI()); - } - - public void testMergeMessageSetExtensionEagerly() throws Exception { - testMergeMessageSetExtensionWithFlag(true); - } - - public void testMergeMessageSetExtensionNotEagerly() throws Exception { - testMergeMessageSetExtensionWithFlag(false); - } - - private void testMergeMessageSetExtensionWithFlag(boolean eagerParsing) - throws Exception { - ExtensionRegistryLite.setEagerlyParseMessageSets(eagerParsing); - ExtensionRegistry extensionRegistry = ExtensionRegistry.newInstance(); - extensionRegistry.add(TestMessageSetExtension1.messageSetExtension); - - // Set up a RawMessageSet with a known messages. - int TYPE_ID_1 = - TestMessageSetExtension1 - .getDescriptor().getExtensions().get(0).getNumber(); - RawMessageSet raw = - RawMessageSet.newBuilder() - .addItem( - RawMessageSet.Item.newBuilder() - .setTypeId(TYPE_ID_1) - .setMessage( - TestMessageSetExtension1.newBuilder() - .setI(123) - .build().toByteString()) - .build()) - .build(); - - // Serialize RawMessageSet unnormally (message value before type id) - ByteString.CodedBuilder out = ByteString.newCodedBuilder( - raw.getSerializedSize()); - CodedOutputStream output = out.getCodedOutput(); - List<RawMessageSet.Item> items = raw.getItemList(); - for (int i = 0; i < items.size(); i++) { - RawMessageSet.Item item = items.get(i); - output.writeTag(1, WireFormat.WIRETYPE_START_GROUP); - output.writeBytes(3, item.getMessage()); - output.writeInt32(2, item.getTypeId()); - output.writeTag(1, WireFormat.WIRETYPE_END_GROUP); - } - ByteString data = out.build(); - - // Merge bytes into TestMessageSet and check the contents. - TestMessageSet messageSet = - TestMessageSet.newBuilder().mergeFrom(data, extensionRegistry).build(); - assertEquals(123, messageSet.getExtension( - TestMessageSetExtension1.messageSetExtension).getI()); - } - - // ================================================================ - // oneof - public void testOneofWireFormat() throws Exception { - TestOneof2.Builder builder = TestOneof2.newBuilder(); - TestUtil.setOneof(builder); - TestOneof2 message = builder.build(); - ByteString rawBytes = message.toByteString(); - - assertEquals(rawBytes.size(), message.getSerializedSize()); - - TestOneof2 message2 = TestOneof2.parseFrom(rawBytes); - TestUtil.assertOneofSet(message2); - } - - public void testOneofOnlyLastSet() throws Exception { - TestOneofBackwardsCompatible source = TestOneofBackwardsCompatible - .newBuilder().setFooInt(100).setFooString("101").build(); - - ByteString rawBytes = source.toByteString(); - TestOneof2 message = TestOneof2.parseFrom(rawBytes); - assertFalse(message.hasFooInt()); - assertTrue(message.hasFooString()); - } } diff --git a/java/src/test/java/com/google/protobuf/lazy_fields_lite.proto b/java/src/test/java/com/google/protobuf/lazy_fields_lite.proto deleted file mode 100644 index baed4e1..0000000 --- a/java/src/test/java/com/google/protobuf/lazy_fields_lite.proto +++ /dev/null @@ -1,61 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: Naoki Iwasaki (niwasaki@google.com) -// -// A proto file with lazy fields - - -package protobuf_unittest; - -option optimize_for = LITE_RUNTIME; - -message LazyMessageLite { - optional int32 num = 1; - optional int32 num_with_default = 2 [default = 421]; - optional LazyInnerMessageLite inner = 3 [lazy = true]; - repeated LazyInnerMessageLite repeated_inner = 4 [lazy = true]; - - oneof oneof_field { - int32 oneof_num = 5; - LazyInnerMessageLite oneof_inner = 6 [lazy = true]; - } -} - -message LazyInnerMessageLite { - optional int32 num = 1; - optional int32 num_with_default = 2 [default = 42]; - optional LazyNestedInnerMessageLite nested = 3 [lazy = true]; -} - -message LazyNestedInnerMessageLite { - optional int32 num = 1; - optional int32 num_with_default = 2 [default = 4]; -} diff --git a/java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto b/java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto deleted file mode 100644 index 6861567..0000000 --- a/java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto +++ /dev/null @@ -1,55 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: pbogle@google.com (Phil Bogle) - - -package protobuf_unittest.lite_equals_and_hash; - -// This proto definition is used to test that java_generate_equals_and_hash -// works correctly with the LITE_RUNTIME. -option java_generate_equals_and_hash = true; -option optimize_for = LITE_RUNTIME; - -message Foo { - optional int32 value = 1; - repeated Bar bar = 2; -} - -message Bar { - optional string name = 1; -} - -message BarPrime { - optional string name = 1; -} - -message Empty { -} diff --git a/java/src/test/java/com/google/protobuf/multiple_files_test.proto b/java/src/test/java/com/google/protobuf/multiple_files_test.proto index 7ec89a0..060f159 100644 --- a/java/src/test/java/com/google/protobuf/multiple_files_test.proto +++ b/java/src/test/java/com/google/protobuf/multiple_files_test.proto @@ -1,6 +1,6 @@ // Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ +// http://code.google.com/p/protobuf/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -33,19 +33,13 @@ // A proto file which tests the java_multiple_files option. -// Some generic_services option(s) added automatically. -// See: http://go/proto2-generic-services-default -option java_generic_services = true; // auto-added - import "google/protobuf/unittest.proto"; -import "google/protobuf/descriptor.proto"; package protobuf_unittest; option java_multiple_files = true; option java_outer_classname = "MultipleFilesTestProto"; - message MessageWithNoOuter { message NestedMessage { optional int32 i = 1; @@ -59,12 +53,8 @@ message MessageWithNoOuter { optional EnumWithNoOuter foreign_enum = 4; } -extend google.protobuf.EnumValueOptions { - optional int32 enum_value_option = 7654321; -} - enum EnumWithNoOuter { - FOO = 1 [(enum_value_option) = 12345]; + FOO = 1; BAR = 2; } diff --git a/java/src/test/java/com/google/protobuf/nested_builders_test.proto b/java/src/test/java/com/google/protobuf/nested_builders_test.proto deleted file mode 100644 index 8ab4a43..0000000 --- a/java/src/test/java/com/google/protobuf/nested_builders_test.proto +++ /dev/null @@ -1,53 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: jonp@google.com (Jon Perlow) -// - -package protobuf_unittest; - -option java_multiple_files = true; -option java_outer_classname = "NestedBuilders"; - - -message Vehicle { - optional Engine engine = 1; - repeated Wheel wheel = 2; -} - -message Engine { - optional int32 cylinder = 1; - optional int32 liters = 2; -} - -message Wheel { - optional int32 radius = 1; - optional int32 width = 2; -} diff --git a/java/src/test/java/com/google/protobuf/nested_extension.proto b/java/src/test/java/com/google/protobuf/nested_extension.proto deleted file mode 100644 index 8649286..0000000 --- a/java/src/test/java/com/google/protobuf/nested_extension.proto +++ /dev/null @@ -1,46 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: Darick Tong (darick@google.com) -// -// A proto file with nested extensions. Note that this must be defined in -// a separate file to properly test the initialization of the outer class. - - -import "com/google/protobuf/non_nested_extension.proto"; - -package protobuf_unittest; - - -message MyNestedExtension { - extend MessageToBeExtended { - optional MessageToBeExtended recursiveExtension = 2; - } -} diff --git a/java/src/test/java/com/google/protobuf/nested_extension_lite.proto b/java/src/test/java/com/google/protobuf/nested_extension_lite.proto deleted file mode 100644 index 9c68682..0000000 --- a/java/src/test/java/com/google/protobuf/nested_extension_lite.proto +++ /dev/null @@ -1,48 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: Darick Tong (darick@google.com) -// -// A proto file with nested extensions for a MessageLite messages. Note that -// this must be defined in a separate file to properly test the initialization -// of the outer class. - - -package protobuf_unittest; - -option optimize_for = LITE_RUNTIME; - -import "com/google/protobuf/non_nested_extension_lite.proto"; - -message MyNestedExtensionLite { - extend MessageLiteToBeExtended { - optional MessageLiteToBeExtended recursiveExtensionLite = 3; - } -} diff --git a/java/src/test/java/com/google/protobuf/non_nested_extension.proto b/java/src/test/java/com/google/protobuf/non_nested_extension.proto deleted file mode 100644 index cb2f8b0..0000000 --- a/java/src/test/java/com/google/protobuf/non_nested_extension.proto +++ /dev/null @@ -1,49 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: Darick Tong (darick@google.com) -// -// A proto file with extensions. - - -package protobuf_unittest; - - -message MessageToBeExtended { - extensions 1 to max; -} - -message MyNonNestedExtension { -} - -extend MessageToBeExtended { - optional MyNonNestedExtension nonNestedExtension = 1; -} - diff --git a/java/src/test/java/com/google/protobuf/non_nested_extension_lite.proto b/java/src/test/java/com/google/protobuf/non_nested_extension_lite.proto deleted file mode 100644 index c1f744b..0000000 --- a/java/src/test/java/com/google/protobuf/non_nested_extension_lite.proto +++ /dev/null @@ -1,50 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: Darick Tong (darick@google.com) -// -// A proto file with extensions for a MessageLite messages. - - -package protobuf_unittest; - -option optimize_for = LITE_RUNTIME; - -message MessageLiteToBeExtended { - extensions 1 to max; -} - -message MyNonNestedExtensionLite { -} - -extend MessageLiteToBeExtended { - optional MyNonNestedExtensionLite nonNestedExtensionLite = 1; -} - diff --git a/java/src/test/java/com/google/protobuf/outer_class_name_test.proto b/java/src/test/java/com/google/protobuf/outer_class_name_test.proto deleted file mode 100644 index c5114f8..0000000 --- a/java/src/test/java/com/google/protobuf/outer_class_name_test.proto +++ /dev/null @@ -1,38 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package protobuf_unittest; - - -// This message's name is the same with the default outer class name of this -// proto file. It's used to test if the compiler can avoid this conflict -// correctly. -message OuterClassNameTest { -} diff --git a/java/src/test/java/com/google/protobuf/outer_class_name_test2.proto b/java/src/test/java/com/google/protobuf/outer_class_name_test2.proto deleted file mode 100644 index 741cd28..0000000 --- a/java/src/test/java/com/google/protobuf/outer_class_name_test2.proto +++ /dev/null @@ -1,42 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package protobuf_unittest; - - -message TestMessage2 { - message NestedMessage { - // This message's name is the same with the default outer class name of this - // proto file. It's used to test if the compiler can avoid this conflict - // correctly. - message OuterClassNameTest2 { - } - } -} diff --git a/java/src/test/java/com/google/protobuf/outer_class_name_test3.proto b/java/src/test/java/com/google/protobuf/outer_class_name_test3.proto deleted file mode 100644 index 5d5d4ac..0000000 --- a/java/src/test/java/com/google/protobuf/outer_class_name_test3.proto +++ /dev/null @@ -1,43 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package protobuf_unittest; - - -message TestMessage3 { - message NestedMessage { - // This enum's name is the same with the default outer class name of this - // proto file. It's used to test if the compiler can avoid this conflict - // correctly. - enum OuterClassNameTest3 { - DUMMY_VALUE = 1; - } - } -} diff --git a/java/src/test/java/com/google/protobuf/test_bad_identifiers.proto b/java/src/test/java/com/google/protobuf/test_bad_identifiers.proto deleted file mode 100644 index 202e8c9..0000000 --- a/java/src/test/java/com/google/protobuf/test_bad_identifiers.proto +++ /dev/null @@ -1,157 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: jonp@google.com (Jon Perlow) - -// This file tests that various identifiers work as field and type names even -// though the same identifiers are used internally by the java code generator. - - -// Some generic_services option(s) added automatically. -// See: http://go/proto2-generic-services-default -option java_generic_services = true; // auto-added - -package io_protocol_tests; - -option java_package = "com.google.protobuf"; -option java_outer_classname = "TestBadIdentifiersProto"; -option java_generate_equals_and_hash = true; - -message TestMessage { - optional string cached_size = 1; - optional string serialized_size = 2; - optional string class = 3; -} - -message Descriptor { - option no_standard_descriptor_accessor = true; - optional string descriptor = 1; - message NestedDescriptor { - option no_standard_descriptor_accessor = true; - optional string descriptor = 1; - } - optional NestedDescriptor nested_descriptor = 2; - enum NestedEnum { - FOO = 1; - } -} - -message Parser { - enum ParserEnum { - PARSER = 1; - } - optional ParserEnum parser = 1; -} - -message Deprecated { - enum TestEnum { - FOO = 1; - - // Test if @Deprecated annotation conflicts with Deprecated message name. - BAR = 2 [ deprecated = true ]; - } - - optional int32 field1 = 1 [deprecated=true]; - optional TestEnum field2 = 2 [deprecated=true]; - optional TestMessage field3 = 3 [deprecated=true]; -} - -message Override { - optional int32 override = 1; -} - -message Object { - optional int32 object = 1; - optional string string_object = 2; -} - -message String { - optional string string = 1; -} - -message Integer { - optional int32 integer = 1; -} - -message Long { - optional int32 long = 1; -} - -message Float { - optional float float = 1; -} - -message Double { - optional double double = 1; -} - -service TestConflictingMethodNames { - rpc Override(TestMessage) returns (TestMessage); -} - -message TestConflictingFieldNames { - enum TestEnum { - FOO = 1; - } - message TestMessage { - } - repeated int32 int32_field = 1; - repeated TestEnum enum_field = 2; - repeated string string_field = 3; - repeated bytes bytes_field = 4; - repeated TestMessage message_field = 5; - - optional int32 int32_field_count = 11; - optional TestEnum enum_field_count = 12; - optional string string_field_count = 13; - optional bytes bytes_field_count = 14; - optional TestMessage message_field_count = 15; - - repeated int32 Int32Field = 21; - repeated TestEnum EnumField = 22; - repeated string StringField = 23; - repeated bytes BytesField = 24; - repeated TestMessage MessageField = 25; - - // This field conflicts with "int32_field" as they both generate - // the method getInt32FieldList(). - required int32 int32_field_list = 31; - - extensions 1000 to max; - - repeated int64 int64_field = 41; - extend TestConflictingFieldNames { - // We don't generate accessors for extensions so the following extension - // fields don't conflict with the repeated field "int64_field". - optional int64 int64_field_count = 1001; - optional int64 int64_field_list = 1002; - } -} - diff --git a/java/src/test/java/com/google/protobuf/test_check_utf8.proto b/java/src/test/java/com/google/protobuf/test_check_utf8.proto deleted file mode 100644 index 206946d..0000000 --- a/java/src/test/java/com/google/protobuf/test_check_utf8.proto +++ /dev/null @@ -1,50 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: Jacob Butcher (jbaum@google.com) -// -// Test file option java_string_check_utf8. - -package proto2_test_check_utf8; - -option java_outer_classname = "TestCheckUtf8"; -option java_string_check_utf8 = true; - -message StringWrapper { - required string req = 1; - optional string opt = 2; - repeated string rep = 3; -} - -message BytesWrapper { - required bytes req = 1; - optional bytes opt = 2; - repeated bytes rep = 3; -} diff --git a/java/src/test/java/com/google/protobuf/test_check_utf8_size.proto b/java/src/test/java/com/google/protobuf/test_check_utf8_size.proto deleted file mode 100644 index fa057a8..0000000 --- a/java/src/test/java/com/google/protobuf/test_check_utf8_size.proto +++ /dev/null @@ -1,51 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: Jacob Butcher (jbaum@google.com) -// -// Test file option java_string_check_utf8. - -package proto2_test_check_utf8_size; - -option java_outer_classname = "TestCheckUtf8Size"; -option java_string_check_utf8 = true; -option optimize_for = CODE_SIZE; - -message StringWrapperSize { - required string req = 1; - optional string opt = 2; - repeated string rep = 3; -} - -message BytesWrapperSize { - required bytes req = 1; - optional bytes opt = 2; - repeated bytes rep = 3; -} diff --git a/java/src/test/java/com/google/protobuf/test_custom_options.proto b/java/src/test/java/com/google/protobuf/test_custom_options.proto deleted file mode 100644 index f6a5ecd..0000000 --- a/java/src/test/java/com/google/protobuf/test_custom_options.proto +++ /dev/null @@ -1,43 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: Feng Xiao (xiaofeng@google.com) -// -// Test that custom options defined in a proto file's dependencies are properly -// initialized. - -package protobuf_unittest; - - -import "google/protobuf/unittest_custom_options.proto"; - -message TestMessageWithCustomOptionsContainer { - optional TestMessageWithCustomOptions field = 1; -} diff --git a/java/src/test/java/com/google/protobuf/test_extra_interfaces.proto b/java/src/test/java/com/google/protobuf/test_extra_interfaces.proto deleted file mode 100644 index 72e05a3..0000000 --- a/java/src/test/java/com/google/protobuf/test_extra_interfaces.proto +++ /dev/null @@ -1,60 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: Darick Tong (darick@google.com) - -package protobuf_unittest; - -message Proto1 { - option experimental_java_message_interface = - "com.google.protobuf.ExtraInterfaces.HasBoolValue"; - - option experimental_java_interface_extends = - "com.google.protobuf.ExtraInterfaces.HasByteValue"; - - option experimental_java_message_interface = - "com.google.protobuf.ExtraInterfaces.HasStringValue<Proto1>"; - - option experimental_java_builder_interface = - "com.google.protobuf.ExtraInterfaces.HasStringValueBuilder" - "<Proto1, Builder>"; - - optional string string_value = 1; - optional bool bool_value = 2; - optional bytes byte_value = 3; - optional int32 int_value = 4; -} - -message Proto2 { - option experimental_java_message_interface = - "com.google.protobuf.ExtraInterfaces.HasBoolValue"; - - optional bool bool_value = 1; -} |