From 85288a0652669f88f6f6589a938abddc27562a3a Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Sat, 30 Jul 2016 13:13:54 +0200 Subject: [PATCH] Added a testcase that checks if meta-annotations are recognized --- .../avaje/tests/basic/TestMetaAnnotation.java | 68 +++++++++++++++++++ .../com/avaje/tests/model/basic/Address.java | 7 +- .../basic/metaannotation/SizeMedium.java | 20 ++++++ 3 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/avaje/tests/basic/TestMetaAnnotation.java create mode 100644 src/test/java/com/avaje/tests/model/basic/metaannotation/SizeMedium.java diff --git a/src/test/java/com/avaje/tests/basic/TestMetaAnnotation.java b/src/test/java/com/avaje/tests/basic/TestMetaAnnotation.java new file mode 100644 index 000000000..c09da8ace --- /dev/null +++ b/src/test/java/com/avaje/tests/basic/TestMetaAnnotation.java @@ -0,0 +1,68 @@ +package com.avaje.tests.basic; + +import javax.persistence.PersistenceException; + +import org.junit.Test; + +import com.avaje.ebean.BaseTestCase; +import com.avaje.ebean.Ebean; +import com.avaje.tests.model.basic.Address; +import com.avaje.tests.model.basic.metaannotation.SizeMedium; +/** + * Very simple test case to check if Ebean recognizes meta-annotation correctly. + * + * @author Roland Praml, FOCONIS AG + */ +public class TestMetaAnnotation extends BaseTestCase { + private static final String spaces100 = new String(new char[100]).replace('\0', ' '); + private static final String spaces101 = new String(new char[101]).replace('\0', ' '); + + /** + * This test writes 100 spaces to "line1" which is annotated with @Size(max=100) + */ + @Test + public void testWrite100SpacesToLine1() { + Ebean.createUpdate(Address.class, "delete from address"); + + Address address = new Address(); + address.setLine1(spaces100); + Ebean.save(address); + } + + /** + * This test writes 101 spaces to "line1" which is annotated with @Size(max=100). + */ + @Test(expected=PersistenceException.class) + public void testWrite101SpacesToLine1() { + Ebean.createUpdate(Address.class, "delete from address"); + + Address address = new Address(); + address.setLine1(spaces101); + Ebean.save(address); + } + + /** + * This test writes 100 spaces to "line1" which is meta-annotated with {@link SizeMedium}. + */ + @Test + public void testWrite100SpacesToLine2() { + Ebean.createUpdate(Address.class, "delete from address"); + + Address address = new Address(); + address.setLine2(spaces100); + Ebean.save(address); + } + + /** + * This test writes 101 spaces to "line1" which is meta-annotated with {@link SizeMedium}. + */ + @Test(expected=PersistenceException.class) + public void testWrite101SpacesToLine2() { + Ebean.createUpdate(Address.class, "delete from address"); + + Address address = new Address(); + address.setLine2(spaces101); + Ebean.save(address); + } + +} diff --git a/src/test/java/com/avaje/tests/model/basic/Address.java b/src/test/java/com/avaje/tests/model/basic/Address.java index 92c056a80..aefa53bb5 100644 --- a/src/test/java/com/avaje/tests/model/basic/Address.java +++ b/src/test/java/com/avaje/tests/model/basic/Address.java @@ -7,6 +7,9 @@ import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.Version; import javax.validation.constraints.Size; + +import com.avaje.tests.model.basic.metaannotation.SizeMedium; + import java.sql.Timestamp; /** @@ -23,11 +26,11 @@ public class Address { @Column(name = "line_1") String line1; - @Size(max = 100) + @SizeMedium @Column(name = "line_2") String line2; - @Size(max = 100) + @SizeMedium String city; Timestamp cretime; diff --git a/src/test/java/com/avaje/tests/model/basic/metaannotation/SizeMedium.java b/src/test/java/com/avaje/tests/model/basic/metaannotation/SizeMedium.java new file mode 100644 index 000000000..72ef9773d --- /dev/null +++ b/src/test/java/com/avaje/tests/model/basic/metaannotation/SizeMedium.java @@ -0,0 +1,20 @@ +package com.avaje.tests.model.basic.metaannotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import javax.validation.constraints.Size; + +/** + * Meta-Annotation that defines @Size(max=100) + * @author Roland Praml, FOCONIS AG + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Size(max=100) +public @interface SizeMedium { +} \ No newline at end of file