package com.fasterxml.jackson.databind.ser; import java.util.*; import com.fasterxml.jackson.annotation.*; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.introspect.VisibilityChecker; /** * Unit tests for checking extended auto-detect configuration, * in context of serialization */ public class TestAutoDetect extends BaseMapTest { static class FieldBean { public String p1 = "public"; protected String p2 = "protected"; @SuppressWarnings("unused") private String p3 = "private"; } @JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.PROTECTED_AND_PUBLIC) static class ProtFieldBean extends FieldBean { } static class MethodBean { public String getA() { return "a"; } protected String getB() { return "b"; } @SuppressWarnings("unused") private String getC() { return "c"; } } @JsonAutoDetect(getterVisibility=JsonAutoDetect.Visibility.PROTECTED_AND_PUBLIC) static class ProtMethodBean extends MethodBean { } /* /********************************************************* /* Test methods /********************************************************* */ public void testDefaults() throws Exception { ObjectMapper m = new ObjectMapper(); // by default, only public fields and getters are detected assertEquals("{\"p1\":\"public\"}", m.writeValueAsString(new FieldBean())); assertEquals("{\"a\":\"a\"}", m.writeValueAsString(new MethodBean())); } public void testProtectedViaAnnotations() throws Exception { ObjectMapper m = new ObjectMapper(); Map<String,Object> result = writeAndMap(m, new ProtFieldBean()); assertEquals(2, result.size()); assertEquals("public", result.get("p1")); assertEquals("protected", result.get("p2")); assertNull(result.get("p3")); result = writeAndMap(m, new ProtMethodBean()); assertEquals(2, result.size()); assertEquals("a", result.get("a")); assertEquals("b", result.get("b")); assertNull(result.get("c")); } public void testPrivateUsingGlobals() throws Exception { ObjectMapper m = new ObjectMapper(); VisibilityChecker<?> vc = m.getVisibilityChecker(); vc = vc.withFieldVisibility(JsonAutoDetect.Visibility.ANY); m.setVisibility(vc); Map<String,Object> result = writeAndMap(m, new FieldBean()); assertEquals(3, result.size()); assertEquals("public", result.get("p1")); assertEquals("protected", result.get("p2")); assertEquals("private", result.get("p3")); m = new ObjectMapper(); vc = m.getVisibilityChecker(); vc = vc.withGetterVisibility(JsonAutoDetect.Visibility.ANY); m.setVisibility(vc); result = writeAndMap(m, new MethodBean()); assertEquals(3, result.size()); assertEquals("a", result.get("a")); assertEquals("b", result.get("b")); assertEquals("c", result.get("c")); } // [JACKSON-621] public void testBasicSetup() throws Exception { ObjectMapper m = new ObjectMapper(); VisibilityChecker<?> vc = m.getVisibilityChecker(); vc = vc.with(JsonAutoDetect.Visibility.ANY); m.setVisibility(vc); Map<String,Object> result = writeAndMap(m, new FieldBean()); assertEquals(3, result.size()); assertEquals("public", result.get("p1")); assertEquals("protected", result.get("p2")); assertEquals("private", result.get("p3")); } // [JACKSON-595] public void testMapperShortcutMethods() throws Exception { ObjectMapper m = new ObjectMapper(); m.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); Map<String,Object> result = writeAndMap(m, new FieldBean()); assertEquals(3, result.size()); assertEquals("public", result.get("p1")); assertEquals("protected", result.get("p2")); assertEquals("private", result.get("p3")); } }