1 package com.fasterxml.jackson.annotation; 2 3 import java.lang.reflect.Member; 4 5 import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; 6 7 // Silly test for JsonAutoDetect.Visibility type, for code coverage 8 public class VisibilityTest extends TestBase 9 { 10 static class Bogus { 11 public String value; 12 } 13 14 @JsonAutoDetect(fieldVisibility=Visibility.NON_PRIVATE, 15 getterVisibility=Visibility.PROTECTED_AND_PUBLIC, 16 isGetterVisibility=Visibility.NONE, 17 setterVisibility=Visibility.PUBLIC_ONLY, 18 creatorVisibility=Visibility.ANY) 19 private final static class Custom { } 20 21 private final static JsonAutoDetect.Value NO_OVERRIDES = JsonAutoDetect.Value.noOverrides(); 22 private final static JsonAutoDetect.Value DEFAULTS = JsonAutoDetect.Value.defaultVisibility(); 23 testAnnotationProperties()24 public void testAnnotationProperties() throws Exception 25 { 26 Member m = Bogus.class.getField("value"); 27 28 assertTrue(JsonAutoDetect.Visibility.ANY.isVisible(m)); 29 assertFalse(JsonAutoDetect.Visibility.NONE.isVisible(m)); 30 31 assertTrue(JsonAutoDetect.Visibility.NON_PRIVATE.isVisible(m)); 32 assertTrue(JsonAutoDetect.Visibility.PUBLIC_ONLY.isVisible(m)); 33 assertTrue(JsonAutoDetect.Visibility.PROTECTED_AND_PUBLIC.isVisible(m)); 34 assertTrue(JsonAutoDetect.Visibility.NON_PRIVATE.isVisible(m)); 35 36 // forget why DEFAULT would give false but 37 assertFalse(JsonAutoDetect.Visibility.DEFAULT.isVisible(m)); 38 } 39 testBasicValueProperties()40 public void testBasicValueProperties() { 41 JsonAutoDetect.Value v = JsonAutoDetect.Value.DEFAULT; 42 assertEquals(JsonAutoDetect.class, v.valueFor()); 43 44 // and then standard method override basics... 45 int x = v.hashCode(); 46 if (x == 0) { // not guaranteed in theory but... 47 fail(); 48 } 49 50 assertTrue(v.equals(v)); 51 // mostly to ensure no NPE or class cast exception: 52 assertFalse(v.equals(null)); 53 assertFalse(v.equals("foo")); 54 } 55 testEquality()56 public void testEquality() { 57 assertEquals(NO_OVERRIDES, NO_OVERRIDES); 58 assertEquals(DEFAULTS, DEFAULTS); 59 assertFalse(DEFAULTS.equals(NO_OVERRIDES)); 60 assertFalse(NO_OVERRIDES.equals(DEFAULTS)); 61 } 62 testFromAnnotation()63 public void testFromAnnotation() 64 { 65 JsonAutoDetect ann = Custom.class.getAnnotation(JsonAutoDetect.class); 66 JsonAutoDetect.Value v = JsonAutoDetect.Value.from(ann); 67 JsonAutoDetect.Value v2 = JsonAutoDetect.Value.from(ann); 68 assertNotSame(v, v2); 69 assertEquals(v, v2); 70 assertEquals(v2, v); 71 72 assertEquals(ann.fieldVisibility(), v.getFieldVisibility()); 73 assertEquals(ann.getterVisibility(), v.getGetterVisibility()); 74 assertEquals(ann.isGetterVisibility(), v.getIsGetterVisibility()); 75 assertEquals(ann.setterVisibility(), v.getSetterVisibility()); 76 assertEquals(ann.creatorVisibility(), v.getCreatorVisibility()); 77 } 78 testToString()79 public void testToString() { 80 assertEquals( 81 "JsonAutoDetect.Value(fields=PUBLIC_ONLY,getters=PUBLIC_ONLY,"+ 82 "isGetters=PUBLIC_ONLY,setters=ANY,creators=PUBLIC_ONLY)", 83 JsonAutoDetect.Value.defaultVisibility().toString()); 84 assertEquals( 85 "JsonAutoDetect.Value(fields=DEFAULT,getters=DEFAULT,"+ 86 "isGetters=DEFAULT,setters=DEFAULT,creators=DEFAULT)", 87 JsonAutoDetect.Value.noOverrides().toString()); 88 } 89 testSimpleMerge()90 public void testSimpleMerge() { 91 JsonAutoDetect.Value base = JsonAutoDetect.Value.construct( 92 Visibility.ANY, 93 Visibility.PUBLIC_ONLY, 94 Visibility.ANY, 95 Visibility.NONE, 96 Visibility.ANY); 97 JsonAutoDetect.Value overrides = JsonAutoDetect.Value.construct( 98 Visibility.NON_PRIVATE, 99 Visibility.DEFAULT, 100 Visibility.PUBLIC_ONLY, 101 Visibility.DEFAULT, 102 Visibility.DEFAULT); 103 JsonAutoDetect.Value merged = JsonAutoDetect.Value.merge(base, overrides); 104 assertFalse(merged.equals(base)); 105 assertFalse(merged.equals(overrides)); 106 assertEquals(merged, merged); 107 108 assertEquals(Visibility.NON_PRIVATE, merged.getFieldVisibility()); 109 assertEquals(Visibility.PUBLIC_ONLY, merged.getGetterVisibility()); 110 assertEquals(Visibility.PUBLIC_ONLY, merged.getIsGetterVisibility()); 111 assertEquals(Visibility.NONE, merged.getSetterVisibility()); 112 assertEquals(Visibility.ANY, merged.getCreatorVisibility()); 113 114 // try the other way around too 115 merged = JsonAutoDetect.Value.merge(overrides, base); 116 assertEquals(Visibility.ANY, merged.getFieldVisibility()); 117 assertEquals(Visibility.PUBLIC_ONLY, merged.getGetterVisibility()); 118 assertEquals(Visibility.ANY, merged.getIsGetterVisibility()); 119 assertEquals(Visibility.NONE, merged.getSetterVisibility()); 120 assertEquals(Visibility.ANY, merged.getCreatorVisibility()); 121 122 // plus, special cases 123 assertSame(overrides, JsonAutoDetect.Value.merge(null, overrides)); 124 assertSame(overrides, JsonAutoDetect.Value.merge(overrides, null)); 125 } 126 testFactoryMethods()127 public void testFactoryMethods() { 128 JsonAutoDetect.Value v = JsonAutoDetect.Value.construct(PropertyAccessor.FIELD, 129 Visibility.ANY); 130 assertEquals(Visibility.ANY, v.getFieldVisibility()); 131 assertEquals(Visibility.DEFAULT, v.getGetterVisibility()); 132 assertEquals(Visibility.DEFAULT, v.getIsGetterVisibility()); 133 assertEquals(Visibility.DEFAULT, v.getSetterVisibility()); 134 assertEquals(Visibility.DEFAULT, v.getCreatorVisibility()); 135 136 JsonAutoDetect.Value all = JsonAutoDetect.Value.construct(PropertyAccessor.ALL, 137 Visibility.NONE); 138 assertEquals(Visibility.NONE, all.getFieldVisibility()); 139 assertEquals(Visibility.NONE, all.getGetterVisibility()); 140 assertEquals(Visibility.NONE, all.getIsGetterVisibility()); 141 assertEquals(Visibility.NONE, all.getSetterVisibility()); 142 assertEquals(Visibility.NONE, all.getCreatorVisibility()); 143 } 144 testSimpleChanges()145 public void testSimpleChanges() { 146 assertSame(NO_OVERRIDES, NO_OVERRIDES.withFieldVisibility(Visibility.DEFAULT)); 147 JsonAutoDetect.Value v = NO_OVERRIDES.withCreatorVisibility(Visibility.PUBLIC_ONLY); 148 assertNotSame(NO_OVERRIDES, v); 149 assertEquals(Visibility.PUBLIC_ONLY, v.getCreatorVisibility()); 150 151 v = NO_OVERRIDES.withFieldVisibility(Visibility.ANY); 152 assertEquals(Visibility.ANY, v.getFieldVisibility()); 153 154 v = NO_OVERRIDES.withGetterVisibility(Visibility.NON_PRIVATE); 155 assertEquals(Visibility.NON_PRIVATE, v.getGetterVisibility()); 156 157 v = NO_OVERRIDES.withIsGetterVisibility(Visibility.PROTECTED_AND_PUBLIC); 158 assertEquals(Visibility.PROTECTED_AND_PUBLIC, v.getIsGetterVisibility()); 159 160 v = NO_OVERRIDES.withSetterVisibility(Visibility.PUBLIC_ONLY); 161 assertEquals(Visibility.PUBLIC_ONLY, v.getSetterVisibility()); 162 } 163 } 164