feat: Add a test related to the challenge https://github.com/jakartaee/jsonb-api/issues/347

Signed-off-by: Jean-Louis Monteiro <jlmonteiro@tomitribe.com>
diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/polymorphism/JsonbPolymorphismTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/polymorphism/JsonbPolymorphismTest.java
index e3ebaf7..87d8389 100644
--- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/polymorphism/JsonbPolymorphismTest.java
+++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/polymorphism/JsonbPolymorphismTest.java
@@ -18,13 +18,22 @@
  */
 package org.apache.johnzon.jsonb.polymorphism;
 
+import jakarta.json.bind.annotation.JsonbCreator;
+import jakarta.json.bind.annotation.JsonbDateFormat;
+import jakarta.json.bind.annotation.JsonbProperty;
 import org.apache.johnzon.jsonb.test.JsonbRule;
+import org.hamcrest.CoreMatchers;
 import org.junit.Rule;
 import org.junit.Test;
 
 import jakarta.json.bind.annotation.JsonbSubtype;
 import jakarta.json.bind.annotation.JsonbTypeInfo;
 
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.Locale;
+
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
@@ -74,6 +83,23 @@
         assertEquals(3, dog.dogAge);
     }
 
+    @Test
+    public void testCreatorDeserialization() {
+        SomeDateType deserialized = jsonb.fromJson("{\"@dateType\":\"constructor\",\"localDate\":\"26-02-2021\"}",
+                                                   SomeDateType.class);
+
+        assertThat("Incorrectly deserialized according to the type information. Expected was DateConstructor instance. "
+                   + "Got instance of class " + deserialized.getClass(),
+                   deserialized, CoreMatchers.instanceOf(DateConstructor.class));
+
+        final DateTimeFormatter formatter =
+            DateTimeFormatter.ofPattern("dd-MM-yyyy").withLocale(Locale.forLanguageTag("nl-NL"));
+        assertThat("Date isn't the expected one",
+                   ((DateConstructor) deserialized).getLocalDate(),
+                   CoreMatchers.equalTo(LocalDate.parse("26-02-2021", formatter)));
+
+    }
+
     @JsonbTypeInfo(key = "@animal", value = @JsonbSubtype(alias = "dog", type = Dog.class))
     public interface Animal {
     }
@@ -89,4 +115,25 @@
     public static class Labrador extends Dog {
         public String labradorName;
     }
+
+    @JsonbTypeInfo(key = "@dateType", value = {
+        @JsonbSubtype(alias = "constructor", type = DateConstructor.class)
+    })
+    public interface SomeDateType {
+
+    }
+
+    public static final class DateConstructor implements SomeDateType {
+
+        private LocalDate localDate;
+
+        @JsonbCreator
+        public DateConstructor(@JsonbProperty("localDate") @JsonbDateFormat(value = "dd-MM-yyyy", locale = "nl-NL") LocalDate localDate) {
+            this.localDate = localDate;
+        }
+
+        public LocalDate getLocalDate() {
+            return localDate;
+        }
+    }
 }