|
24 | 24 | import com.esotericsoftware.kryo.Kryo;
|
25 | 25 | import com.esotericsoftware.kryo.KryoException;
|
26 | 26 | import com.esotericsoftware.kryo.KryoTestCase;
|
| 27 | +import com.esotericsoftware.kryo.Serializer; |
| 28 | +import com.esotericsoftware.kryo.SerializerFactory; |
27 | 29 | import com.esotericsoftware.kryo.SerializerFactory.CompatibleFieldSerializerFactory;
|
28 | 30 |
|
| 31 | +import java.io.File; |
| 32 | +import java.io.FileInputStream; |
| 33 | +import java.io.FileOutputStream; |
| 34 | +import java.io.IOException; |
29 | 35 | import java.io.Serializable;
|
30 | 36 | import java.util.Arrays;
|
31 | 37 | import java.util.List;
|
32 | 38 | import java.util.Objects;
|
33 | 39 |
|
| 40 | +import com.esotericsoftware.kryo.io.Input; |
| 41 | +import com.esotericsoftware.kryo.io.Output; |
| 42 | +import com.esotericsoftware.kryo.util.DefaultInstantiatorStrategy; |
34 | 43 | import org.apache.commons.lang.builder.EqualsBuilder;
|
| 44 | +import org.junit.Assert; |
35 | 45 | import org.junit.Rule;
|
36 | 46 | import org.junit.Test;
|
37 | 47 | import org.junit.rules.ExpectedException;
|
| 48 | +import org.objenesis.strategy.SerializingInstantiatorStrategy; |
38 | 49 |
|
39 | 50 | /** @author Nathan Sweet */
|
40 | 51 | public class CompatibleFieldSerializerTest extends KryoTestCase {
|
@@ -642,4 +653,35 @@ public int hashCode () {
|
642 | 653 | return Objects.hash(value, list, serializable);
|
643 | 654 | }
|
644 | 655 | }
|
| 656 | + |
| 657 | + @Test |
| 658 | + public void testLogWarningOnDuplicateFieldInClassHierarchy() { |
| 659 | + kryo.setReferences(true); |
| 660 | + CompatibleFieldSerializer serializer = new CompatibleFieldSerializer(kryo, ClassWithDuplicateField.class); |
| 661 | + serializer.getCompatibleFieldSerializerConfig().setChunkedEncoding(true); |
| 662 | + serializer.getCompatibleFieldSerializerConfig().setExtendedFieldNames(false); |
| 663 | + serializer.updateFields(); |
| 664 | + kryo.register(ClassWithDuplicateField.class, serializer); |
| 665 | + |
| 666 | + final ClassWithDuplicateField duplicateField = new ClassWithDuplicateField(); |
| 667 | + roundTrip(31, duplicateField); |
| 668 | + |
| 669 | + ClassWithDuplicateField object2 = (ClassWithDuplicateField) kryo.readClassAndObject(input); |
| 670 | + assertEquals(duplicateField, object2); |
| 671 | + } |
| 672 | + |
| 673 | + static class ClassWithDuplicateField extends SuperClassWithDuplicateField { |
| 674 | + private Boolean customNote = true; |
| 675 | + } |
| 676 | + |
| 677 | + static class SuperClassWithDuplicateField implements Serializable { |
| 678 | + private Boolean customNote = false; |
| 679 | + |
| 680 | + public boolean equals(Object obj) { |
| 681 | + if (this == obj) return true; |
| 682 | + if (obj == null) return false; |
| 683 | + if (getClass() != obj.getClass()) return false; |
| 684 | + return true; |
| 685 | + } |
| 686 | + } |
645 | 687 | }
|
0 commit comments