1 package com.fasterxml.jackson.databind.ser; 2 3 import java.util.*; 4 5 import com.fasterxml.jackson.annotation.*; 6 7 import com.fasterxml.jackson.databind.*; 8 import com.fasterxml.jackson.databind.introspect.VisibilityChecker; 9 10 /** 11 * Unit tests for checking extended auto-detect configuration, 12 * in context of serialization 13 */ 14 public class TestAutoDetect 15 extends BaseMapTest 16 { 17 static class FieldBean 18 { 19 public String p1 = "public"; 20 protected String p2 = "protected"; 21 @SuppressWarnings("unused") 22 private String p3 = "private"; 23 } 24 25 @JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.PROTECTED_AND_PUBLIC) 26 static class ProtFieldBean extends FieldBean { } 27 28 static class MethodBean 29 { getA()30 public String getA() { return "a"; } getB()31 protected String getB() { return "b"; } 32 @SuppressWarnings("unused") getC()33 private String getC() { return "c"; } 34 } 35 36 @JsonAutoDetect(getterVisibility=JsonAutoDetect.Visibility.PROTECTED_AND_PUBLIC) 37 static class ProtMethodBean extends MethodBean { } 38 39 /* 40 /********************************************************* 41 /* Test methods 42 /********************************************************* 43 */ 44 45 private final ObjectMapper MAPPER = newJsonMapper(); 46 testDefaults()47 public void testDefaults() throws Exception 48 { 49 // by default, only public fields and getters are detected 50 assertEquals("{\"p1\":\"public\"}", 51 MAPPER.writeValueAsString(new FieldBean())); 52 assertEquals("{\"a\":\"a\"}", 53 MAPPER.writeValueAsString(new MethodBean())); 54 } 55 testProtectedViaAnnotations()56 public void testProtectedViaAnnotations() throws Exception 57 { 58 Map<String,Object> result = writeAndMap(MAPPER, new ProtFieldBean()); 59 assertEquals(2, result.size()); 60 assertEquals("public", result.get("p1")); 61 assertEquals("protected", result.get("p2")); 62 assertNull(result.get("p3")); 63 64 result = writeAndMap(MAPPER, new ProtMethodBean()); 65 assertEquals(2, result.size()); 66 assertEquals("a", result.get("a")); 67 assertEquals("b", result.get("b")); 68 assertNull(result.get("c")); 69 } 70 testPrivateUsingGlobals()71 public void testPrivateUsingGlobals() throws Exception 72 { 73 ObjectMapper m = new ObjectMapper(); 74 VisibilityChecker<?> vc = m.getVisibilityChecker(); 75 vc = vc.withFieldVisibility(JsonAutoDetect.Visibility.ANY); 76 m.setVisibility(vc); 77 78 Map<String,Object> result = writeAndMap(m, new FieldBean()); 79 assertEquals(3, result.size()); 80 assertEquals("public", result.get("p1")); 81 assertEquals("protected", result.get("p2")); 82 assertEquals("private", result.get("p3")); 83 84 m = new ObjectMapper(); 85 vc = m.getVisibilityChecker(); 86 vc = vc.withGetterVisibility(JsonAutoDetect.Visibility.ANY); 87 m.setVisibility(vc); 88 result = writeAndMap(m, new MethodBean()); 89 assertEquals(3, result.size()); 90 assertEquals("a", result.get("a")); 91 assertEquals("b", result.get("b")); 92 assertEquals("c", result.get("c")); 93 } 94 testBasicSetup()95 public void testBasicSetup() throws Exception 96 { 97 ObjectMapper m = new ObjectMapper(); 98 VisibilityChecker<?> vc = m.getVisibilityChecker(); 99 vc = vc.with(JsonAutoDetect.Visibility.ANY); 100 m.setVisibility(vc); 101 102 Map<String,Object> result = writeAndMap(m, new FieldBean()); 103 assertEquals(3, result.size()); 104 assertEquals("public", result.get("p1")); 105 assertEquals("protected", result.get("p2")); 106 assertEquals("private", result.get("p3")); 107 } 108 testMapperShortcutMethods()109 public void testMapperShortcutMethods() throws Exception 110 { 111 ObjectMapper m = new ObjectMapper(); 112 m.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); 113 114 Map<String,Object> result = writeAndMap(m, new FieldBean()); 115 assertEquals(3, result.size()); 116 assertEquals("public", result.get("p1")); 117 assertEquals("protected", result.get("p2")); 118 assertEquals("private", result.get("p3")); 119 } 120 } 121