1a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// Protocol Buffers - Google's data interchange format 2a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// Copyright 2008 Google Inc. All rights reserved. 3afb4b72037e3f13db208590fc782c4bc8e27f862Jeff Davidson// https://developers.google.com/protocol-buffers/ 4a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// 5a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// Redistribution and use in source and binary forms, with or without 6a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// modification, are permitted provided that the following conditions are 7a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// met: 8a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// 9a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// * Redistributions of source code must retain the above copyright 10a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// notice, this list of conditions and the following disclaimer. 11a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// * Redistributions in binary form must reproduce the above 12a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// copyright notice, this list of conditions and the following disclaimer 13a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// in the documentation and/or other materials provided with the 14a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// distribution. 15a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// * Neither the name of Google Inc. nor the names of its 16a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// contributors may be used to endorse or promote products derived from 17a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// this software without specific prior written permission. 18a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// 19a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 31a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonpackage com.google.protobuf; 32a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 33a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonimport protobuf_unittest.LazyFieldsLite.LazyInnerMessageLite; 34a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonimport protobuf_unittest.LazyFieldsLite.LazyMessageLite; 35a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonimport protobuf_unittest.LazyFieldsLite.LazyNestedInnerMessageLite; 36a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 37a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonimport junit.framework.TestCase; 38a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 39a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonimport org.easymock.classextension.EasyMock; 40a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 41a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonimport java.util.ArrayList; 42a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 43a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson/** 44a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson * Unit test for messages with lazy fields. 45a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson * 46a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson * @author niwasaki@google.com (Naoki Iwasaki) 47a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson */ 48a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonpublic class LazyMessageLiteTest extends TestCase { 49a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 50a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson private Parser<LazyInnerMessageLite> originalLazyInnerMessageLiteParser; 51a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 52a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson @Override 53a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protected void setUp() throws Exception { 54a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson super.setUp(); 55a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 56a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson originalLazyInnerMessageLiteParser = LazyInnerMessageLite.PARSER; 57a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 58a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 59a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson @Override 60a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protected void tearDown() throws Exception { 61a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyInnerMessageLite.PARSER = originalLazyInnerMessageLiteParser; 62a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 63a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson super.tearDown(); 64a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 65a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 66a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson public void testSetValues() { 67a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyNestedInnerMessageLite nested = LazyNestedInnerMessageLite.newBuilder() 68a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNum(3) 69a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 70a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyInnerMessageLite inner = LazyInnerMessageLite.newBuilder() 71a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNum(2) 72a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNested(nested) 73a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 74a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyMessageLite outer = LazyMessageLite.newBuilder() 75a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNum(1) 76a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setInner(inner) 77a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setOneofNum(123) 78a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setOneofInner(inner) 79a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 80a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 81a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(1, outer.getNum()); 82a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(421, outer.getNumWithDefault()); 83a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 84a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(2, outer.getInner().getNum()); 85a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(42, outer.getInner().getNumWithDefault()); 86a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 87a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(3, outer.getInner().getNested().getNum()); 88a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(4, outer.getInner().getNested().getNumWithDefault()); 89a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 90a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertFalse(outer.hasOneofNum()); 91a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertTrue(outer.hasOneofInner()); 92a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 93a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(2, outer.getOneofInner().getNum()); 94a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(42, outer.getOneofInner().getNumWithDefault()); 95a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(3, outer.getOneofInner().getNested().getNum()); 96a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(4, outer.getOneofInner().getNested().getNumWithDefault()); 97a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 98a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 99a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson public void testSetRepeatedValues() { 100a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyMessageLite outer = LazyMessageLite.newBuilder() 101a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNum(1) 102a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .addRepeatedInner(LazyInnerMessageLite.newBuilder().setNum(119)) 103a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .addRepeatedInner(LazyInnerMessageLite.newBuilder().setNum(122)) 104a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 105a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 106a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(1, outer.getNum()); 107a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(2, outer.getRepeatedInnerCount()); 108a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(119, outer.getRepeatedInner(0).getNum()); 109a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(122, outer.getRepeatedInner(1).getNum()); 110a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 111a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 112a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson public void testAddAll() { 113a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ArrayList<LazyInnerMessageLite> inners = new ArrayList<LazyInnerMessageLite>(); 114a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson int count = 4; 115a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson for (int i = 0; i < count; i++) { 116a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyInnerMessageLite inner = LazyInnerMessageLite.newBuilder() 117a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNum(i) 118a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 119a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson inners.add(inner); 120a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 121a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 122a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyMessageLite outer = LazyMessageLite.newBuilder() 123a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .addAllRepeatedInner(inners) 124a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 125a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(count, outer.getRepeatedInnerCount()); 126a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson for (int i = 0; i < count; i++) { 127a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(i, outer.getRepeatedInner(i).getNum()); 128a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 129a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 130a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 131a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson public void testGetDefaultValues() { 132a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyMessageLite outer = LazyMessageLite.newBuilder() 133a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 134a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 135a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(0, outer.getNum()); 136a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(421, outer.getNumWithDefault()); 137a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 138a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(0, outer.getInner().getNum()); 139a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(42, outer.getInner().getNumWithDefault()); 140a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 141a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(0, outer.getInner().getNested().getNum()); 142a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(4, outer.getInner().getNested().getNumWithDefault()); 143a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 144a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(0, outer.getOneofNum()); 145a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 146a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(0, outer.getOneofInner().getNum()); 147a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(42, outer.getOneofInner().getNumWithDefault()); 148a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(0, outer.getOneofInner().getNested().getNum()); 149a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(4, outer.getOneofInner().getNested().getNumWithDefault()); 150a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 151a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 152a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson public void testClearValues() { 153a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyInnerMessageLite inner = LazyInnerMessageLite.newBuilder() 154a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNum(115) 155a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 156a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 157a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyMessageLite.Builder outerBuilder = LazyMessageLite.newBuilder(); 158a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 159a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(0, outerBuilder.build().getNum()); 160a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 161a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 162a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Set/Clear num 163a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson outerBuilder.setNum(100); 164a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 165a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(100, outerBuilder.build().getNum()); 166a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(421, outerBuilder.build().getNumWithDefault()); 167a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertFalse(outerBuilder.build().hasInner()); 168a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 169a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson outerBuilder.clearNum(); 170a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 171a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(0, outerBuilder.build().getNum()); 172a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(421, outerBuilder.build().getNumWithDefault()); 173a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertFalse(outerBuilder.build().hasInner()); 174a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 175a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 176a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Set/Clear all 177a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson outerBuilder.setNum(100) 178a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setInner(inner) 179a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .addRepeatedInner(LazyInnerMessageLite.newBuilder().setNum(119)) 180a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .addRepeatedInner(LazyInnerMessageLite.newBuilder().setNum(122)) 181a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setOneofInner(LazyInnerMessageLite.newBuilder().setNum(123)); 182a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 183a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyMessageLite outer = outerBuilder.build(); 184a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(100, outer.getNum()); 185a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(421, outer.getNumWithDefault()); 186a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertTrue(outer.hasInner()); 187a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(115, outer.getInner().getNum()); 188a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(2, outer.getRepeatedInnerCount()); 189a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(119, outer.getRepeatedInner(0).getNum()); 190a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(122, outer.getRepeatedInner(1).getNum()); 191a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertTrue(outer.hasOneofInner()); 192a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(123, outer.getOneofInner().getNum()); 193a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 194a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson outerBuilder.clear(); 195a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 196a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson outer = outerBuilder.build(); 197a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 198a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(0, outer.getNum()); 199a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(421, outer.getNumWithDefault()); 200a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertFalse(outer.hasInner()); 201a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(0, outer.getRepeatedInnerCount()); 202a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertFalse(outer.hasOneofInner()); 203a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(0, outer.getOneofInner().getNum()); 204a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 205a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 206a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson public void testMergeValues() { 207a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyMessageLite outerBase = LazyMessageLite.newBuilder() 208a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNumWithDefault(122) 209a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 210a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 211a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyInnerMessageLite innerMerging = LazyInnerMessageLite.newBuilder() 212a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNum(115) 213a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 214a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyMessageLite outerMerging = LazyMessageLite.newBuilder() 215a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNum(119) 216a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setInner(innerMerging) 217a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setOneofInner(innerMerging) 218a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 219a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 220a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyMessageLite merged = LazyMessageLite 221a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .newBuilder(outerBase) 222a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .mergeFrom(outerMerging) 223a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 224a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(119, merged.getNum()); 225a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(122, merged.getNumWithDefault()); 226a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(115, merged.getInner().getNum()); 227a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(42, merged.getInner().getNumWithDefault()); 228a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(115, merged.getOneofInner().getNum()); 229a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(42, merged.getOneofInner().getNumWithDefault()); 230a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 231a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 232a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson public void testMergeDefaultValues() { 233a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyInnerMessageLite innerBase = LazyInnerMessageLite.newBuilder() 234a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNum(115) 235a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 236a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyMessageLite outerBase = LazyMessageLite.newBuilder() 237a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNum(119) 238a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNumWithDefault(122) 239a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setInner(innerBase) 240a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setOneofInner(innerBase) 241a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 242a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 243a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyMessageLite outerMerging = LazyMessageLite.newBuilder() 244a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 245a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 246a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyMessageLite merged = LazyMessageLite 247a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .newBuilder(outerBase) 248a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .mergeFrom(outerMerging) 249a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 250a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Merging default-instance shouldn't overwrite values in the base message. 251a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(119, merged.getNum()); 252a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(122, merged.getNumWithDefault()); 253a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(115, merged.getInner().getNum()); 254a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(42, merged.getInner().getNumWithDefault()); 255a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(115, merged.getOneofInner().getNum()); 256a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(42, merged.getOneofInner().getNumWithDefault()); 257a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 258a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 259a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson public void testSerialize() throws InvalidProtocolBufferException { 260a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyNestedInnerMessageLite nested = LazyNestedInnerMessageLite.newBuilder() 261a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNum(3) 262a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 263a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyInnerMessageLite inner = LazyInnerMessageLite.newBuilder() 264a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNum(2) 265a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNested(nested) 266a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 267a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyMessageLite outer = LazyMessageLite.newBuilder() 268a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNum(1) 269a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setInner(inner) 270a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setOneofInner(inner) 271a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 272a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 273a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ByteString bytes = outer.toByteString(); 274a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(bytes.size(), outer.getSerializedSize()); 275a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 276a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyMessageLite deserialized = LazyMessageLite.parseFrom(bytes); 277a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 278a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(1, deserialized.getNum()); 279a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(421, deserialized.getNumWithDefault()); 280a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 281a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(2, deserialized.getInner().getNum()); 282a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(42, deserialized.getInner().getNumWithDefault()); 283a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 284a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(3, deserialized.getInner().getNested().getNum()); 285a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(4, deserialized.getInner().getNested().getNumWithDefault()); 286a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 287a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(2, deserialized.getOneofInner().getNum()); 288a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(42, deserialized.getOneofInner().getNumWithDefault()); 289a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(3, deserialized.getOneofInner().getNested().getNum()); 290a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(4, deserialized.getOneofInner().getNested().getNumWithDefault()); 291a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 292a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(bytes, deserialized.toByteString()); 293a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 294a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 295a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson public void testLaziness() throws InvalidProtocolBufferException { 296a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyInnerMessageLite inner = LazyInnerMessageLite.newBuilder() 297a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNum(2) 298a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 299a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyMessageLite outer = LazyMessageLite.newBuilder() 300a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setNum(1) 301a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setInner(inner) 302a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .setOneofInner(inner) 303a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .build(); 304a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ByteString bytes = outer.toByteString(); 305a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 306a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 307a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // The parser for inner / oneofInner message shouldn't be used if 308a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // getInner / getOneofInner is not called. 309a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyInnerMessageLite.PARSER = EasyMock.createStrictMock(Parser.class); 310a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 311a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson EasyMock.replay(LazyInnerMessageLite.PARSER); 312a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 313a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson LazyMessageLite deserialized = LazyMessageLite.parseFrom(bytes); 314a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(1, deserialized.getNum()); 315a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson assertEquals(421, deserialized.getNumWithDefault()); 316a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 317a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson EasyMock.verify(LazyInnerMessageLite.PARSER); 318a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 319a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 320