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