• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc.  All rights reserved.
3 //
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file or at
6 // https://developers.google.com/open-source/licenses/bsd
7 
8 package com.google.protobuf;
9 
10 import static com.google.common.truth.Truth.assertThat;
11 
12 import protobuf_unittest.UnittestProto.TestAllExtensions;
13 import protobuf_unittest.UnittestProto.TestAllTypes;
14 import org.junit.Test;
15 import org.junit.runner.RunWith;
16 import org.junit.runners.JUnit4;
17 
18 /** Unit test for {@link LazyField}. */
19 @RunWith(JUnit4.class)
20 public class LazyFieldTest {
21 
22   @Test
testHashCode()23   public void testHashCode() {
24     MessageLite message = TestUtil.getAllSet();
25     LazyField lazyField = createLazyFieldFromMessage(message);
26     assertThat(message.hashCode()).isEqualTo(lazyField.hashCode());
27     lazyField.getValue();
28     assertThat(message.hashCode()).isEqualTo(lazyField.hashCode());
29     changeValue(lazyField);
30     // make sure two messages have different hash code
31     assertNotEqual(message.hashCode(), lazyField.hashCode());
32   }
33 
34   @Test
testHashCodeEx()35   public void testHashCodeEx() throws Exception {
36     TestAllExtensions message = TestUtil.getAllExtensionsSet();
37     LazyField lazyField = createLazyFieldFromMessage(message);
38     assertThat(message.hashCode()).isEqualTo(lazyField.hashCode());
39     lazyField.getValue();
40     assertThat(message.hashCode()).isEqualTo(lazyField.hashCode());
41     changeValue(lazyField);
42     // make sure two messages have different hash code
43     assertNotEqual(message.hashCode(), lazyField.hashCode());
44   }
45 
46   @Test
testGetValue()47   public void testGetValue() {
48     MessageLite message = TestUtil.getAllSet();
49     LazyField lazyField = createLazyFieldFromMessage(message);
50     assertThat(message).isEqualTo(lazyField.getValue());
51     changeValue(lazyField);
52     assertNotEqual(message, lazyField.getValue());
53   }
54 
55   @Test
testGetValueEx()56   public void testGetValueEx() throws Exception {
57     TestAllExtensions message = TestUtil.getAllExtensionsSet();
58     LazyField lazyField = createLazyFieldFromMessage(message);
59     assertThat(message).isEqualTo(lazyField.getValue());
60     changeValue(lazyField);
61     assertNotEqual(message, lazyField.getValue());
62   }
63 
64   @Test
testEqualsObject()65   public void testEqualsObject() {
66     MessageLite message = TestUtil.getAllSet();
67     LazyField lazyField = createLazyFieldFromMessage(message);
68     assertThat(lazyField).isEqualTo(message);
69     changeValue(lazyField);
70     assertThat(lazyField).isNotEqualTo(message);
71     assertThat(message).isNotEqualTo(lazyField.getValue());
72   }
73 
74   @Test
75   @SuppressWarnings("TruthIncompatibleType") // LazyField.equals() is not symmetric
testEqualsObjectEx()76   public void testEqualsObjectEx() throws Exception {
77     TestAllExtensions message = TestUtil.getAllExtensionsSet();
78     LazyField lazyField = createLazyFieldFromMessage(message);
79     assertThat(lazyField).isEqualTo(message);
80     changeValue(lazyField);
81     assertThat(lazyField).isNotEqualTo(message);
82     assertThat(message).isNotEqualTo(lazyField.getValue());
83   }
84 
85   // Help methods.
86 
createLazyFieldFromMessage(MessageLite message)87   private LazyField createLazyFieldFromMessage(MessageLite message) {
88     ByteString bytes = message.toByteString();
89     return new LazyField(
90         message.getDefaultInstanceForType(), TestUtil.getExtensionRegistry(), bytes);
91   }
92 
changeValue(LazyField lazyField)93   private void changeValue(LazyField lazyField) {
94     TestAllTypes.Builder builder = TestUtil.getAllSet().toBuilder();
95     builder.addRepeatedBool(true);
96     MessageLite newMessage = builder.build();
97     lazyField.setValue(newMessage);
98   }
99 
assertNotEqual(Object unexpected, Object actual)100   private void assertNotEqual(Object unexpected, Object actual) {
101     assertThat(unexpected).isNotSameInstanceAs(actual);
102     assertThat((unexpected != null && unexpected.equals(actual))).isFalse();
103   }
104 }
105