From e7ef3f44240718a04a3e114946a821b0a87eded4 Mon Sep 17 00:00:00 2001 From: robbytx Date: Wed, 2 Sep 2020 20:21:24 -0500 Subject: [PATCH 1/4] Verify default methods in interface are supported --- .../TestSimpleMaterializedInterfaces.java | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestSimpleMaterializedInterfaces.java b/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestSimpleMaterializedInterfaces.java index f4d252a9..f80fc571 100644 --- a/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestSimpleMaterializedInterfaces.java +++ b/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestSimpleMaterializedInterfaces.java @@ -26,13 +26,13 @@ public interface BeanWithY extends Bean { public int getY(); } - + public interface PartialBean { public boolean isOk(); // and then non-getter/setter one: public int foobar(); } - + public interface BeanHolder { public Bean getBean(); } @@ -53,7 +53,13 @@ public interface ArrayBean { interface NonPublicBean { public abstract int getX(); } - + + public interface ExtendedBean extends Bean { + public default boolean anyValuePresent() { + return getX() > 0 || getA() != null; + } + } + /* /********************************************************** /* Unit tests, low level @@ -149,8 +155,8 @@ public void testBeanHolder() throws Exception assertNotNull(bean); assertEquals("b", bean.getA()); assertEquals(-4, bean.getX()); - } - + } + public void testArrayInterface() throws Exception { ObjectMapper mapper = new ObjectMapper(); @@ -172,7 +178,17 @@ public void testSubInterface() throws Exception assertEquals(1, bean.getX()); assertEquals(2, bean.getY()); } - + + public void testDefaultMethods() throws Exception + { + ObjectMapper mapper = newMrBeanMapper(); + ExtendedBean bean = mapper.readValue("{\"a\":\"value\",\"x\":123 }", ExtendedBean.class); + assertNotNull(bean); + assertEquals("value", bean.getA()); + assertEquals(123, bean.getX()); + assertTrue(bean.anyValuePresent()); + } + /* /********************************************************** /* Unit tests, higher level, error handling @@ -212,6 +228,6 @@ public void testNonPublic() throws Exception } catch (JsonMappingException e) { verifyException(e, "is not public"); } - } - + } + } From d534aac192a8fb3ad714699ddcf10d8c4c06455e Mon Sep 17 00:00:00 2001 From: robbytx Date: Fri, 4 Sep 2020 16:03:05 -0500 Subject: [PATCH 2/4] Compile test sources against Java 1.8 --- mrbean/pom.xml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/mrbean/pom.xml b/mrbean/pom.xml index c03867a4..de7236b0 100644 --- a/mrbean/pom.xml +++ b/mrbean/pom.xml @@ -5,7 +5,7 @@ - 4.0.0 + 4.0.0 com.fasterxml.jackson.module jackson-modules-base @@ -56,6 +56,16 @@ ${project.groupId}.mrbean.*;version=${project.version} replacer + + org.apache.maven.plugins + maven-compiler-plugin + + + 1.8 + 1.8 + + + org.apache.maven.plugins From ad159519cfa48736c2ee09f4d9754ff1fecb7751 Mon Sep 17 00:00:00 2001 From: robbytx Date: Wed, 2 Sep 2020 20:44:36 -0500 Subject: [PATCH 3/4] Verify non-public class method behavior --- .../jackson/module/mrbean/TestAbstractClasses.java | 10 ++++++++-- .../mrbean/TestAbstractClassesWithOverrides.java | 12 +++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClasses.java b/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClasses.java index 9d4ffda5..68169699 100644 --- a/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClasses.java +++ b/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClasses.java @@ -16,11 +16,15 @@ public abstract static class Bean int y; protected Bean() { } - + public abstract String getX(); public String getFoo() { return "Foo!"; } public void setY(int value) { y = value; } + + // also verify non-public methods + protected abstract String getZ(); + private Object customMethod() { return new Object(); } } /* @@ -32,10 +36,12 @@ protected Bean() { } public void testSimpleInteface() throws Exception { ObjectMapper mapper = newMrBeanMapper(); - Bean bean = mapper.readValue("{ \"x\" : \"abc\", \"y\" : 13 }", Bean.class); + Bean bean = mapper.readValue("{ \"x\" : \"abc\", \"y\" : 13, \"z\" : \"def\" }", Bean.class); assertNotNull(bean); assertEquals("abc", bean.getX()); assertEquals(13, bean.y); assertEquals("Foo!", bean.getFoo()); + assertEquals("def", bean.getZ()); + assertNotNull(bean.customMethod()); } } diff --git a/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClassesWithOverrides.java b/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClassesWithOverrides.java index a3938c0a..9ca0f6e1 100644 --- a/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClassesWithOverrides.java +++ b/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClassesWithOverrides.java @@ -16,13 +16,17 @@ public abstract static class Bean int y; protected Bean() { } - + public abstract String getX(); public abstract String roast(int temperature); public String getFoo() { return "Foo!"; } public void setY(int value) { y = value; } + + // also verify non-public methods + protected abstract String getZ(); + private Object customMethod() { return new Object(); } } public abstract static class CoffeeBean extends Bean { @@ -45,10 +49,10 @@ public void testOverrides() throws Exception ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new MrBeanModule()); - Bean bean = mapper.readValue("{ \"x\" : \"abc\", \"y\" : 13 }", CoffeeBean.class); + Bean bean = mapper.readValue("{ \"x\" : \"abc\", \"y\" : 13, \"z\" : \"def\" }", CoffeeBean.class); verifyBean(bean); - Bean bean2 = mapper.readValue("{ \"x\" : \"abc\", \"y\" : 13 }", PeruvianCoffeeBean.class); + Bean bean2 = mapper.readValue("{ \"x\" : \"abc\", \"y\" : 13, \"z\" : \"def\" }", PeruvianCoffeeBean.class); verifyBean(bean2); } @@ -57,6 +61,8 @@ private void verifyBean(Bean bean) { assertEquals("abc", bean.getX()); assertEquals(13, bean.y); assertEquals("Foo!", bean.getFoo()); + assertEquals("def", bean.getZ()); + assertNotNull(bean.customMethod()); assertEquals("The coffee beans are roasting at 123 degrees now, yummy", bean.roast(123)); } } From 3e15ced6aea2a3155950c6173178493e9993e2b2 Mon Sep 17 00:00:00 2001 From: robbytx Date: Wed, 2 Sep 2020 20:56:41 -0500 Subject: [PATCH 4/4] Verify current behavior of non-public methods --- .../jackson/module/mrbean/TestAbstractClasses.java | 4 ++-- .../module/mrbean/TestAbstractClassesWithOverrides.java | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClasses.java b/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClasses.java index 68169699..1307a412 100644 --- a/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClasses.java +++ b/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClasses.java @@ -24,7 +24,7 @@ protected Bean() { } // also verify non-public methods protected abstract String getZ(); - private Object customMethod() { return new Object(); } + private String customMethod() { return "Private methods rock!"; } } /* @@ -42,6 +42,6 @@ public void testSimpleInteface() throws Exception assertEquals(13, bean.y); assertEquals("Foo!", bean.getFoo()); assertEquals("def", bean.getZ()); - assertNotNull(bean.customMethod()); + assertEquals("Private methods rock!", bean.customMethod()); } } diff --git a/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClassesWithOverrides.java b/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClassesWithOverrides.java index 9ca0f6e1..82deaac4 100644 --- a/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClassesWithOverrides.java +++ b/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClassesWithOverrides.java @@ -26,13 +26,18 @@ protected Bean() { } // also verify non-public methods protected abstract String getZ(); - private Object customMethod() { return new Object(); } + private Object customMethod() { return protectedAbstractMethod(); } + protected abstract Object protectedAbstractMethod(); } public abstract static class CoffeeBean extends Bean { @Override public String roast(int temperature) { return "The coffee beans are roasting at " + temperature + " degrees now, yummy"; } + + @Override protected Object protectedAbstractMethod() { + return "Private methods invoking protected abstract methods is the bomb!"; + } } public abstract static class PeruvianCoffeeBean extends CoffeeBean {} @@ -62,7 +67,7 @@ private void verifyBean(Bean bean) { assertEquals(13, bean.y); assertEquals("Foo!", bean.getFoo()); assertEquals("def", bean.getZ()); - assertNotNull(bean.customMethod()); assertEquals("The coffee beans are roasting at 123 degrees now, yummy", bean.roast(123)); + assertEquals("Private methods invoking protected abstract methods is the bomb!", bean.customMethod()); } }