CAY-2370 ValueObjectType for byte[] fails lookup with tests
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/f731a4a3 Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/f731a4a3 Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/f731a4a3 Branch: refs/heads/master Commit: f731a4a3f353c03c2d3728742c7b34b93deb9526 Parents: d226eee Author: Arseni Bulatski <ancars...@gmail.com> Authored: Wed Oct 11 13:33:40 2017 +0300 Committer: Arseni Bulatski <ancars...@gmail.com> Committed: Wed Oct 11 13:33:40 2017 +0300 ---------------------------------------------------------------------- .../access/types/ValueObjectTypeFactory.java | 9 +- .../types/ValueObjectTypeFactoryOrderTest.java | 73 +++++++++++++++ .../types/ValueObjectTypeFactoryTest.java | 96 ++++++++++++++++++++ 3 files changed, 174 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/f731a4a3/cayenne-server/src/main/java/org/apache/cayenne/access/types/ValueObjectTypeFactory.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ValueObjectTypeFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ValueObjectTypeFactory.java index f67b621..bdcf863 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ValueObjectTypeFactory.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ValueObjectTypeFactory.java @@ -22,6 +22,7 @@ package org.apache.cayenne.access.types; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.util.Objects; /** * @since 4.0 @@ -52,12 +53,12 @@ public class ValueObjectTypeFactory implements ExtendedTypeFactory { static class ExtendedTypeConverter<T, E> implements ExtendedType<T> { - private ExtendedType<E> extendedType; - private ValueObjectType<T, E> valueObjectType; + ExtendedType<E> extendedType; + ValueObjectType<T, E> valueObjectType; ExtendedTypeConverter(ExtendedType<E> extendedType, ValueObjectType<T, E> valueObjectType) { - this.extendedType = extendedType; - this.valueObjectType = valueObjectType; + this.extendedType = Objects.requireNonNull(extendedType); + this.valueObjectType = Objects.requireNonNull(valueObjectType); } @Override http://git-wip-us.apache.org/repos/asf/cayenne/blob/f731a4a3/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryOrderTest.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryOrderTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryOrderTest.java new file mode 100644 index 0000000..94ed3b7 --- /dev/null +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryOrderTest.java @@ -0,0 +1,73 @@ +package org.apache.cayenne.access.types; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class ValueObjectTypeFactoryOrderTest { + ExtendedTypeMap map; + DefaultValueObjectTypeRegistry registry; + ValueObjectTypeFactory factory; + ValueObjectType valueObjectType1, valueObjectType2; + ExtendedType tstType1, tstType2; + + @Before + public void setUpRegistry(){ + valueObjectType1 = mock(ValueObjectType.class); + when(valueObjectType1.getValueType()).thenReturn(UUID.class); + when(valueObjectType1.getTargetType()).thenReturn(byte[].class); + + valueObjectType2 = mock(ValueObjectType.class); + when(valueObjectType2.getValueType()).thenReturn(UUID.class); + when(valueObjectType2.getTargetType()).thenReturn(String.class); + + map = new ExtendedTypeMap(); + + tstType1 = mock(ExtendedType.class); + when(tstType1.getClassName()).thenReturn("byte[]"); + map.registerType(tstType1); + + tstType2 = new MockExtendedType(String.class); + map.registerType(tstType2); + } + + @Test + public void testByteFirstOrder(){ + List<ValueObjectType<?, ?>> list = new ArrayList<>(); + list.add(valueObjectType1); + list.add(valueObjectType2); + + registry = new DefaultValueObjectTypeRegistry(list); + + factory = new ValueObjectTypeFactory(map,registry); + + ValueObjectTypeFactory.ExtendedTypeConverter converter = (ValueObjectTypeFactory.ExtendedTypeConverter) factory.getType(UUID.class); + assertNotNull(converter); + assertNotSame(tstType1, converter.extendedType); + assertSame(tstType2,converter.extendedType); + } + + @Test + public void testStringFirstOrder(){ + List<ValueObjectType<?, ?>> list = new ArrayList<>(); + list.add(valueObjectType2); + list.add(valueObjectType1); + + registry = new DefaultValueObjectTypeRegistry(list); + + factory = new ValueObjectTypeFactory(map,registry); + + ValueObjectTypeFactory.ExtendedTypeConverter converter = (ValueObjectTypeFactory.ExtendedTypeConverter) factory.getType(UUID.class); + assertNotNull(converter); + assertNotSame(tstType2, converter.extendedType); + assertSame(tstType1,converter.extendedType); + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/f731a4a3/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryTest.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryTest.java new file mode 100644 index 0000000..caf4d59 --- /dev/null +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryTest.java @@ -0,0 +1,96 @@ +package org.apache.cayenne.access.types; + +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertSame; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class ValueObjectTypeFactoryTest { + + ExtendedTypeMap map; + DefaultValueObjectTypeRegistry registry; + ValueObjectType valueObjectType1, valueObjectType2, valueObjectType3, valueObjectType4; + ExtendedType tstType1, tstType2, tstType3, tstType4; + ValueObjectTypeFactory factory; + + @Before + public void setUpRegistry(){ + valueObjectType1 = mock(ValueObjectType.class); + when(valueObjectType1.getValueType()).thenReturn(UUID.class); + when(valueObjectType1.getTargetType()).thenReturn(byte[].class); + + valueObjectType2 = mock(ValueObjectType.class); + when(valueObjectType2.getValueType()).thenReturn(String.class); + when(valueObjectType2.getTargetType()).thenReturn(String.class); + + valueObjectType3 = mock(ValueObjectType.class); + when(valueObjectType3.getValueType()).thenReturn(int.class); + when(valueObjectType3.getTargetType()).thenReturn(int.class); + + valueObjectType4 = mock(ValueObjectType.class); + when(valueObjectType4.getValueType()).thenReturn(String[].class); + when(valueObjectType4.getTargetType()).thenReturn(String[].class); + + List<ValueObjectType<?, ?>> list = new ArrayList<>(); + list.add(valueObjectType1); + list.add(valueObjectType2); + list.add(valueObjectType3); + list.add(valueObjectType4); + + + registry = new DefaultValueObjectTypeRegistry(list); + + map = new ExtendedTypeMap(); + + tstType1 = mock(ExtendedType.class); + when(tstType1.getClassName()).thenReturn("byte[]"); + map.registerType(tstType1); + + tstType2 = new MockExtendedType(String.class); + map.registerType(tstType2); + + tstType3 = new MockExtendedType(int.class); + map.registerType(tstType3); + + tstType4 = mock(ExtendedType.class); + when(tstType4.getClassName()).thenReturn(String[].class.getCanonicalName()); + map.registerType(tstType4); + + factory = new ValueObjectTypeFactory(map,registry); + } + + @Test + public void testUUIDtoByteArray(){ + ValueObjectTypeFactory.ExtendedTypeConverter converter1 = (ValueObjectTypeFactory.ExtendedTypeConverter) factory.getType(UUID.class); + assertNotNull(converter1); + assertSame(tstType1, converter1.extendedType); + } + + @Test + public void testString(){ + ValueObjectTypeFactory.ExtendedTypeConverter converter2 = (ValueObjectTypeFactory.ExtendedTypeConverter) factory.getType(String.class); + assertNotNull(converter2); + assertSame(tstType2, converter2.extendedType); + } + + @Test + public void testInt(){ + ValueObjectTypeFactory.ExtendedTypeConverter converter3 = (ValueObjectTypeFactory.ExtendedTypeConverter) factory.getType(int.class); + assertNotNull(converter3); + assertSame(tstType3, converter3.extendedType); + } + + @Test + public void testStringArray(){ + ValueObjectTypeFactory.ExtendedTypeConverter converter4 = (ValueObjectTypeFactory.ExtendedTypeConverter) factory.getType(String[].class); + assertNotNull(converter4); + assertSame(tstType4, converter4.extendedType); + } +}