Index: third_party/protobuf/java/core/src/test/java/com/google/protobuf/LazyMessageLiteTest.java |
diff --git a/third_party/protobuf/java/core/src/test/java/com/google/protobuf/LazyMessageLiteTest.java b/third_party/protobuf/java/core/src/test/java/com/google/protobuf/LazyMessageLiteTest.java |
index afe0fffd5164ab6924c1b3a94e443b31c70a85d2..968ca2065cdabde138e066b0696f7d84be5c753b 100644 |
--- a/third_party/protobuf/java/core/src/test/java/com/google/protobuf/LazyMessageLiteTest.java |
+++ b/third_party/protobuf/java/core/src/test/java/com/google/protobuf/LazyMessageLiteTest.java |
@@ -34,10 +34,8 @@ import protobuf_unittest.LazyFieldsLite.LazyExtension; |
import protobuf_unittest.LazyFieldsLite.LazyInnerMessageLite; |
import protobuf_unittest.LazyFieldsLite.LazyMessageLite; |
import protobuf_unittest.LazyFieldsLite.LazyNestedInnerMessageLite; |
- |
-import junit.framework.TestCase; |
- |
import java.util.ArrayList; |
+import junit.framework.TestCase; |
/** |
* Unit test for messages with lazy fields. |
@@ -103,6 +101,19 @@ public class LazyMessageLiteTest extends TestCase { |
assertEquals(119, outer.getRepeatedInner(0).getNum()); |
assertEquals(122, outer.getRepeatedInner(1).getNum()); |
} |
+ |
+ public void testRepeatedMutability() throws Exception { |
+ LazyMessageLite outer = LazyMessageLite.newBuilder() |
+ .addRepeatedInner(LazyInnerMessageLite.newBuilder().setNum(119)) |
+ .addRepeatedInner(LazyInnerMessageLite.newBuilder().setNum(122)) |
+ .build(); |
+ |
+ outer = LazyMessageLite.parseFrom(outer.toByteArray()); |
+ try { |
+ outer.getRepeatedInnerList().set(1, null); |
+ fail(); |
+ } catch (UnsupportedOperationException expected) {} |
+ } |
public void testAddAll() { |
ArrayList<LazyInnerMessageLite> inners = new ArrayList<LazyInnerMessageLite>(); |
@@ -251,6 +262,23 @@ public class LazyMessageLiteTest extends TestCase { |
assertEquals(42, merged.getOneofInner().getNumWithDefault()); |
} |
+ // Regression test for b/28198805. |
+ public void testMergeOneofMessages() throws Exception { |
+ LazyInnerMessageLite inner = LazyInnerMessageLite.newBuilder().build(); |
+ LazyMessageLite outer = LazyMessageLite.newBuilder().setOneofInner(inner).build(); |
+ ByteString data1 = outer.toByteString(); |
+ |
+ // The following should not alter the content of the 'outer' message. |
+ LazyMessageLite.Builder merged = LazyMessageLite.newBuilder().mergeFrom(outer); |
+ LazyInnerMessageLite anotherInner = LazyInnerMessageLite.newBuilder().setNum(12345).build(); |
+ merged.setOneofInner(anotherInner); |
+ |
+ // Check that the 'outer' stays the same. |
+ ByteString data2 = outer.toByteString(); |
+ assertEquals(data1, data2); |
+ assertEquals(0, outer.getOneofInner().getNum()); |
+ } |
+ |
public void testSerialize() throws InvalidProtocolBufferException { |
LazyNestedInnerMessageLite nested = LazyNestedInnerMessageLite.newBuilder() |
.setNum(3) |