• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.fasterxml.jackson.annotation;
2 
3 import java.util.*;
4 
5 /**
6  * Tests to verify that it is possibly to merge {@link JsonIgnoreProperties.Value}
7  * instances for overrides
8  */
9 public class JsonIgnorePropertiesTest extends TestBase
10 {
11     @JsonIgnoreProperties(value={ "foo", "bar" }, ignoreUnknown=true)
12     private final static class Bogus {
13     }
14 
15     private final JsonIgnoreProperties.Value EMPTY = JsonIgnoreProperties.Value.empty();
16 
testEmpty()17     public void testEmpty() {
18         // ok to try to create from null; gives empty
19         assertSame(EMPTY, JsonIgnoreProperties.Value.from(null));
20 
21         assertEquals(0, EMPTY.getIgnored().size());
22         assertFalse(EMPTY.getAllowGetters());
23         assertFalse(EMPTY.getAllowSetters());
24     }
25 
testEquality()26     public void testEquality() {
27         assertEquals(EMPTY, EMPTY);
28 
29         // empty has "merge" set to 'true' so:
30         assertSame(EMPTY, EMPTY.withMerge());
31 
32         JsonIgnoreProperties.Value v = EMPTY.withoutMerge();
33         assertEquals(v, v);
34         assertFalse(EMPTY.equals(v));
35         assertFalse(v.equals(EMPTY));
36     }
37 
testFromAnnotation()38     public void testFromAnnotation() throws Exception
39     {
40         JsonIgnoreProperties.Value v = JsonIgnoreProperties.Value.from(
41                 Bogus.class.getAnnotation(JsonIgnoreProperties.class));
42         assertNotNull(v);
43         assertFalse(v.getMerge());
44         assertFalse(v.getAllowGetters());
45         assertFalse(v.getAllowSetters());
46         Set<String> ign = v.getIgnored();
47         assertEquals(2, v.getIgnored().size());
48         assertEquals(_set("foo", "bar"), ign);
49     }
50 
testFactories()51     public void testFactories() {
52         assertSame(EMPTY, JsonIgnoreProperties.Value.forIgnoreUnknown(false));
53         assertSame(EMPTY, JsonIgnoreProperties.Value.forIgnoredProperties());
54         assertSame(EMPTY, JsonIgnoreProperties.Value.forIgnoredProperties(Collections.<String>emptySet()));
55 
56         JsonIgnoreProperties.Value v = JsonIgnoreProperties.Value.forIgnoredProperties("a", "b");
57         assertEquals(_set("a", "b"), v.getIgnored());
58 
59         JsonIgnoreProperties.Value vser = v.withAllowGetters();
60         assertTrue(vser.getAllowGetters());
61         assertFalse(vser.getAllowSetters());
62         assertEquals(_set("a", "b"), vser.getIgnored());
63         assertEquals(_set("a", "b"), vser.findIgnoredForDeserialization());
64         assertEquals(_set(), vser.findIgnoredForSerialization());
65 
66         JsonIgnoreProperties.Value vdeser = v.withAllowSetters();
67         assertFalse(vdeser.getAllowGetters());
68         assertTrue(vdeser.getAllowSetters());
69         assertEquals(_set("a", "b"), vdeser.getIgnored());
70         assertEquals(_set(), vdeser.findIgnoredForDeserialization());
71         assertEquals(_set("a", "b"), vdeser.findIgnoredForSerialization());
72     }
73 
testMutantFactories()74     public void testMutantFactories()
75     {
76         assertEquals(2, EMPTY.withIgnored("a", "b").getIgnored().size());
77         assertEquals(1, EMPTY.withIgnored(Collections.singleton("x")).getIgnored().size());
78         assertEquals(0, EMPTY.withIgnored((Set<String>) null).getIgnored().size());
79 
80         assertTrue(EMPTY.withIgnoreUnknown().getIgnoreUnknown());
81         assertFalse(EMPTY.withoutIgnoreUnknown().getIgnoreUnknown());
82 
83         assertTrue(EMPTY.withAllowGetters().getAllowGetters());
84         assertFalse(EMPTY.withoutAllowGetters().getAllowGetters());
85         assertTrue(EMPTY.withAllowSetters().getAllowSetters());
86         assertFalse(EMPTY.withoutAllowSetters().getAllowSetters());
87 
88         assertTrue(EMPTY.withMerge().getMerge());
89         assertFalse(EMPTY.withoutMerge().getMerge());
90     }
91 
testSimpleMerge()92     public void testSimpleMerge()
93     {
94         JsonIgnoreProperties.Value v1 = EMPTY.withIgnoreUnknown().withAllowGetters();
95         JsonIgnoreProperties.Value v2a = EMPTY.withMerge()
96                 .withIgnored("a");
97         JsonIgnoreProperties.Value v2b = EMPTY.withoutMerge();
98 
99         // when merging, should just have union of things
100         JsonIgnoreProperties.Value v3a = v1.withOverrides(v2a);
101         assertEquals(Collections.singleton("a"), v3a.getIgnored());
102         assertTrue(v3a.getIgnoreUnknown());
103         assertTrue(v3a.getAllowGetters());
104         assertFalse(v3a.getAllowSetters());
105 
106         // when NOT merging, simply replacing values
107         JsonIgnoreProperties.Value v3b = JsonIgnoreProperties.Value.merge(v1, v2b);
108         assertEquals(Collections.emptySet(), v3b.getIgnored());
109         assertFalse(v3b.getIgnoreUnknown());
110         assertFalse(v3b.getAllowGetters());
111         assertFalse(v3b.getAllowSetters());
112 
113         // and effectively really just uses overrides as is
114         assertEquals(v2b, v3b);
115 
116         assertSame(v2b, v2b.withOverrides(null));
117         assertSame(v2b, v2b.withOverrides(EMPTY));
118     }
119 
testMergeIgnoreProperties()120     public void testMergeIgnoreProperties()
121     {
122         JsonIgnoreProperties.Value v1 = EMPTY.withIgnored("a");
123         JsonIgnoreProperties.Value v2 = EMPTY.withIgnored("b");
124         JsonIgnoreProperties.Value v3 = EMPTY.withIgnored("c");
125 
126         JsonIgnoreProperties.Value merged = JsonIgnoreProperties.Value.mergeAll(v1, v2, v3);
127         Set<String> all = merged.getIgnored();
128         assertEquals(3, all.size());
129         assertTrue(all.contains("a"));
130         assertTrue(all.contains("b"));
131         assertTrue(all.contains("c"));
132     }
133 
testToString()134     public void testToString() {
135         assertEquals(
136                 "JsonIgnoreProperties.Value(ignored=[],ignoreUnknown=false,allowGetters=false,allowSetters=true,merge=true)",
137                 EMPTY.withAllowSetters()
138                     .withMerge()
139                     .toString());
140         int hash = EMPTY.hashCode();
141         // no real good way to test but...
142         if (hash == 0) {
143             fail("Should not get 0 for hash");
144         }
145     }
146 
_set(String... args)147     private Set<String> _set(String... args) {
148         return new LinkedHashSet<String>(Arrays.asList(args));
149     }
150 }
151