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