This is an automated email from the ASF dual-hosted git repository.

jlmonteiro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/johnzon.git

commit 6aaded98fa8faa2d9b5bf69f3d672a76705066cc
Author: Jean-Louis Monteiro <jlmonte...@tomitribe.com>
AuthorDate: Wed Oct 11 15:15:59 2023 +0200

    feat: Add a test related to the challenge 
https://github.com/jakartaee/jsonb-api/issues/347
    
    Signed-off-by: Jean-Louis Monteiro <jlmonte...@tomitribe.com>
---
 .../jsonb/polymorphism/JsonbPolymorphismTest.java  | 47 ++++++++++++++++++++++
 1 file changed, 47 insertions(+)

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 e3ebaf76..87d83899 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 @@ public class JsonbPolymorphismTest {
         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 class JsonbPolymorphismTest {
     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;
+        }
+    }
 }

Reply via email to