• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.fasterxml.jackson.annotation;
2 
3 import com.fasterxml.jackson.annotation.JsonInclude.Include;
4 
5 /**
6  * Tests to verify that it is possibly to merge {@link JsonInclude.Value}
7  * instances for overrides
8  */
9 public class IncludeTest extends TestBase
10 {
11     private final JsonInclude.Value EMPTY = JsonInclude.Value.empty();
12 
13     @JsonInclude(value=JsonInclude.Include.NON_EMPTY, content=JsonInclude.Include.NON_DEFAULT)
14     private final static class Bogus { }
15 
16     @JsonInclude(value=JsonInclude.Include.CUSTOM, valueFilter=Integer.class,
17             content=JsonInclude.Include.CUSTOM, contentFilter=Long.class)
18     private final static class Custom { }
19 
testEquality()20     public void testEquality() {
21         assertTrue(EMPTY.equals(EMPTY));
22 
23         JsonInclude.Value v1 = JsonInclude.Value.construct(Include.NON_ABSENT, null);
24         JsonInclude.Value v2 = JsonInclude.Value.construct(Include.NON_ABSENT, null);
25         JsonInclude.Value v3 = JsonInclude.Value.construct(Include.NON_ABSENT, Include.NON_EMPTY);
26 
27         assertTrue(v1.equals(v2));
28         assertTrue(v2.equals(v1));
29 
30         assertFalse(v1.equals(v3));
31         assertFalse(v3.equals(v1));
32         assertFalse(v2.equals(v3));
33         assertFalse(v3.equals(v2));
34     }
35 
testFromAnnotation()36     public void testFromAnnotation()
37     {
38         JsonInclude ann = Bogus.class.getAnnotation(JsonInclude.class);
39         JsonInclude.Value v = JsonInclude.Value.from(ann);
40         assertEquals(Include.NON_EMPTY, v.getValueInclusion());
41         assertEquals(Include.NON_DEFAULT, v.getContentInclusion());
42     }
43 
testFromAnnotationWithCustom()44     public void testFromAnnotationWithCustom()
45     {
46         JsonInclude ann = Custom.class.getAnnotation(JsonInclude.class);
47         JsonInclude.Value v = JsonInclude.Value.from(ann);
48         assertEquals(Include.CUSTOM, v.getValueInclusion());
49         assertEquals(Include.CUSTOM, v.getContentInclusion());
50         assertEquals(Integer.class, v.getValueFilter());
51         assertEquals(Long.class, v.getContentFilter());
52 
53         assertEquals(
54 "JsonInclude.Value(value=CUSTOM,content=CUSTOM,valueFilter=java.lang.Integer.class,contentFilter=java.lang.Long.class)",
55                 v.toString());
56     }
57 
testStdOverrides()58     public void testStdOverrides() {
59         assertEquals("JsonInclude.Value(value=NON_ABSENT,content=USE_DEFAULTS)",
60                 JsonInclude.Value.construct(Include.NON_ABSENT, null).toString());
61         int x = EMPTY.hashCode();
62         if (x == 0) {
63             fail();
64         }
65         assertFalse(EMPTY.equals(null));
66         assertFalse(EMPTY.equals(""));
67     }
68 
testSimpleMerge()69     public void testSimpleMerge()
70     {
71         JsonInclude.Value empty = JsonInclude.Value.empty();
72 
73         assertEquals(Include.USE_DEFAULTS, empty.getValueInclusion());
74         assertEquals(Include.USE_DEFAULTS, empty.getContentInclusion());
75 
76         JsonInclude.Value v2 = empty.withValueInclusion(Include.NON_ABSENT);
77 
78         assertEquals(Include.NON_ABSENT, v2.getValueInclusion());
79         assertEquals(Include.USE_DEFAULTS, v2.getContentInclusion());
80 
81         JsonInclude.Value v3 = new JsonInclude.Value(Include.NON_EMPTY, Include.ALWAYS,
82                 null, null);
83         assertEquals(Include.NON_EMPTY, v3.getValueInclusion());
84         assertEquals(Include.ALWAYS, v3.getContentInclusion());
85 
86         // Ok; but then overrides, which should skip 'USE_DEFAULT' overrides
87         JsonInclude.Value merged = v3.withOverrides(empty);
88         // no overrides with "empty":
89         assertEquals(v3.getValueInclusion(), merged.getValueInclusion());
90         assertEquals(v3.getContentInclusion(), merged.getContentInclusion());
91 
92         // but other values ought to be overridden (value, yes, content, no because it's default)
93         merged = JsonInclude.Value.merge(v3, v2);
94         assertEquals(v2.getValueInclusion(), merged.getValueInclusion());
95         assertEquals(v3.getContentInclusion(), merged.getContentInclusion());
96 
97         merged = JsonInclude.Value.mergeAll(empty, v3);
98         assertEquals(v3.getValueInclusion(), merged.getValueInclusion());
99         assertEquals(v3.getContentInclusion(), merged.getContentInclusion());
100     }
101 
102     // for [annotations#76]
testContentMerge76()103     public void testContentMerge76()
104     {
105         JsonInclude.Value v1 = JsonInclude.Value.empty()
106                 .withContentInclusion(JsonInclude.Include.ALWAYS)
107                 .withValueInclusion(JsonInclude.Include.NON_ABSENT);
108         JsonInclude.Value v2 = JsonInclude.Value.empty()
109                 .withContentInclusion(JsonInclude.Include.NON_EMPTY)
110                 .withValueInclusion(JsonInclude.Include.USE_DEFAULTS);
111 
112         JsonInclude.Value v12 = v2.withOverrides(v1); // v1 priority
113         JsonInclude.Value v21 = v1.withOverrides(v2); // v2 priority
114 
115         assertEquals(JsonInclude.Include.ALWAYS, v12.getContentInclusion());
116         assertEquals(JsonInclude.Include.NON_ABSENT, v12.getValueInclusion());
117 
118         assertEquals(JsonInclude.Include.NON_EMPTY, v21.getContentInclusion());
119         assertEquals(JsonInclude.Include.NON_ABSENT, v21.getValueInclusion());
120     }
121 
testFilters()122     public void testFilters()
123     {
124         JsonInclude.Value empty = JsonInclude.Value.empty();
125         assertNull(empty.getValueFilter());
126         assertNull(empty.getContentFilter());
127 
128         // note: filter class choices are arbitrary, just confirming assingments
129         JsonInclude.Value v1 = empty.withValueFilter(String.class);
130         assertEquals(JsonInclude.Include.CUSTOM, v1.getValueInclusion());
131         assertEquals(String.class, v1.getValueFilter());
132         assertNull(v1.withValueFilter(null).getValueFilter());
133         assertNull(v1.withValueFilter(Void.class).getValueFilter());
134 
135         JsonInclude.Value v2 = empty.withContentFilter(Long.class);
136         assertEquals(JsonInclude.Include.CUSTOM, v2.getContentInclusion());
137         assertEquals(Long.class, v2.getContentFilter());
138         assertNull(v2.withContentFilter(null).getContentFilter());
139         assertNull(v2.withContentFilter(Void.class).getContentFilter());
140     }
141 }
142