This is an automated email from the ASF dual-hosted git repository. abulatski pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push: new 46ad6bc CAY-2586 add test 46ad6bc is described below commit 46ad6bc9e5cb0c66d994dc01ad0f59f67fc788c9 Author: Arseni Bulatski <ancars...@gmail.com> AuthorDate: Mon Jul 8 10:30:54 2019 +0300 CAY-2586 add test --- .../java/org/apache/cayenne/access/EnumIT.java | 16 ++++ .../cayenne/testdo/enum_test/EnumEntity3.java | 9 +++ .../testdo/enum_test/auto/_EnumEntity3.java | 88 ++++++++++++++++++++++ cayenne-server/src/test/resources/cayenne-enum.xml | 2 +- cayenne-server/src/test/resources/enum.map.xml | 9 ++- 5 files changed, 122 insertions(+), 2 deletions(-) diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/EnumIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/EnumIT.java index 6d5fd2c..a294173 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/EnumIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/EnumIT.java @@ -18,10 +18,13 @@ ****************************************************************/ package org.apache.cayenne.access; +import java.util.List; + import org.apache.cayenne.Cayenne; import org.apache.cayenne.ObjectContext; import org.apache.cayenne.di.Inject; import org.apache.cayenne.query.CapsStrategy; +import org.apache.cayenne.query.ObjectSelect; import org.apache.cayenne.query.SQLTemplate; import org.apache.cayenne.query.SelectQuery; import org.apache.cayenne.test.jdbc.DBHelper; @@ -29,6 +32,7 @@ import org.apache.cayenne.test.jdbc.TableHelper; import org.apache.cayenne.testdo.enum_test.Enum1; import org.apache.cayenne.testdo.enum_test.EnumEntity; import org.apache.cayenne.testdo.enum_test.EnumEntity2; +import org.apache.cayenne.testdo.enum_test.EnumEntity3; import org.apache.cayenne.unit.di.server.CayenneProjects; import org.apache.cayenne.unit.di.server.ServerCase; import org.apache.cayenne.unit.di.server.UseServerRuntime; @@ -95,4 +99,16 @@ public class EnumIT extends ServerCase { assertEquals(Enum1.two, test.getEnumAttribute()); } + + @Test + public void testEnumMappedToChar() { + EnumEntity3 enumEntity3 = context.newObject(EnumEntity3.class); + enumEntity3.setEnumAttribute(Enum1.two); + context.commitChanges(); + + List<EnumEntity3> enumEntity3s = ObjectSelect.query(EnumEntity3.class) + .select(context); + assertEquals(1, enumEntity3s.size()); + assertEquals(Enum1.two, enumEntity3s.get(0).getEnumAttribute()); + } } diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/enum_test/EnumEntity3.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/enum_test/EnumEntity3.java new file mode 100644 index 0000000..97029f5 --- /dev/null +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/enum_test/EnumEntity3.java @@ -0,0 +1,9 @@ +package org.apache.cayenne.testdo.enum_test; + +import org.apache.cayenne.testdo.enum_test.auto._EnumEntity3; + +public class EnumEntity3 extends _EnumEntity3 { + + private static final long serialVersionUID = 1L; + +} diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/enum_test/auto/_EnumEntity3.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/enum_test/auto/_EnumEntity3.java new file mode 100644 index 0000000..d7f7ec3 --- /dev/null +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/enum_test/auto/_EnumEntity3.java @@ -0,0 +1,88 @@ +package org.apache.cayenne.testdo.enum_test.auto; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +import org.apache.cayenne.BaseDataObject; +import org.apache.cayenne.exp.property.BaseProperty; +import org.apache.cayenne.exp.property.PropertyFactory; +import org.apache.cayenne.testdo.enum_test.Enum1; + +/** + * Class _EnumEntity3 was generated by Cayenne. + * It is probably a good idea to avoid changing this class manually, + * since it may be overwritten next time code is regenerated. + * If you need to make any customizations, please use subclass. + */ +public abstract class _EnumEntity3 extends BaseDataObject { + + private static final long serialVersionUID = 1L; + + public static final String ID_PK_COLUMN = "ID"; + + public static final BaseProperty<Enum1> ENUM_ATTRIBUTE = PropertyFactory.createBase("enumAttribute", Enum1.class); + + protected Enum1 enumAttribute; + + + public void setEnumAttribute(Enum1 enumAttribute) { + beforePropertyWrite("enumAttribute", this.enumAttribute, enumAttribute); + this.enumAttribute = enumAttribute; + } + + public Enum1 getEnumAttribute() { + beforePropertyRead("enumAttribute"); + return this.enumAttribute; + } + + @Override + public Object readPropertyDirectly(String propName) { + if(propName == null) { + throw new IllegalArgumentException(); + } + + switch(propName) { + case "enumAttribute": + return this.enumAttribute; + default: + return super.readPropertyDirectly(propName); + } + } + + @Override + public void writePropertyDirectly(String propName, Object val) { + if(propName == null) { + throw new IllegalArgumentException(); + } + + switch (propName) { + case "enumAttribute": + this.enumAttribute = (Enum1)val; + break; + default: + super.writePropertyDirectly(propName, val); + } + } + + private void writeObject(ObjectOutputStream out) throws IOException { + writeSerialized(out); + } + + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { + readSerialized(in); + } + + @Override + protected void writeState(ObjectOutputStream out) throws IOException { + super.writeState(out); + out.writeObject(this.enumAttribute); + } + + @Override + protected void readState(ObjectInputStream in) throws IOException, ClassNotFoundException { + super.readState(in); + this.enumAttribute = (Enum1)in.readObject(); + } + +} diff --git a/cayenne-server/src/test/resources/cayenne-enum.xml b/cayenne-server/src/test/resources/cayenne-enum.xml index de50894..8fea14b 100644 --- a/cayenne-server/src/test/resources/cayenne-enum.xml +++ b/cayenne-server/src/test/resources/cayenne-enum.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <domain xmlns="http://cayenne.apache.org/schema/10/domain" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://cayenne.apache.org/schema/10/domain http://cayenne.apache.org/schema/10/domain.xsd" + xsi:schemaLocation="http://cayenne.apache.org/schema/10/domain https://cayenne.apache.org/schema/10/domain.xsd" project-version="10"> <map name="enum"/> </domain> diff --git a/cayenne-server/src/test/resources/enum.map.xml b/cayenne-server/src/test/resources/enum.map.xml index 56b340b..b4138b3 100644 --- a/cayenne-server/src/test/resources/enum.map.xml +++ b/cayenne-server/src/test/resources/enum.map.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <data-map xmlns="http://cayenne.apache.org/schema/10/modelMap" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap http://cayenne.apache.org/schema/10/modelMap.xsd" + xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap https://cayenne.apache.org/schema/10/modelMap.xsd" project-version="10"> <property name="defaultPackage" value="org.apache.cayenne.testdo.enum_test"/> <property name="clientSupported" value="true"/> @@ -15,6 +15,10 @@ <db-attribute name="ENUM_ATTRIBUTE" type="VARCHAR" length="250"/> <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/> </db-entity> + <db-entity name="ENUM_ENTITY_3"> + <db-attribute name="ENUM_ATTRIBUTE" type="CHAR" length="5"/> + <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/> + </db-entity> <obj-entity name="EnumEntity" className="org.apache.cayenne.testdo.enum_test.EnumEntity" dbEntityName="ENUM_ENTITY"> <obj-attribute name="enumAttribute" type="org.apache.cayenne.testdo.enum_test.Enum1" db-attribute-path="ENUM_ATTRIBUTE"/> </obj-entity> @@ -22,4 +26,7 @@ <qualifier><![CDATA[enumAttribute = enum:org.apache.cayenne.testdo.enum_test.Enum1.two]]></qualifier> <obj-attribute name="enumAttribute" type="org.apache.cayenne.testdo.enum_test.Enum1" db-attribute-path="ENUM_ATTRIBUTE"/> </obj-entity> + <obj-entity name="EnumEntity3" className="org.apache.cayenne.testdo.enum_test.EnumEntity3" dbEntityName="ENUM_ENTITY_3"> + <obj-attribute name="enumAttribute" type="org.apache.cayenne.testdo.enum_test.Enum1" db-attribute-path="ENUM_ATTRIBUTE"/> + </obj-entity> </data-map>