• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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