|
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