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