1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.collections4.keyvalue;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertNull;
21 import static org.junit.jupiter.api.Assertions.assertSame;
22 import static org.junit.jupiter.api.Assertions.assertThrows;
23 import static org.junit.jupiter.api.Assertions.assertTrue;
24
25 import java.util.HashMap;
26 import java.util.Map;
27
28 import org.junit.jupiter.api.Test;
29
30
31
32
33 public class DefaultKeyValueTest<K, V> {
34
35 private final String key = "name";
36 private final String value = "duke";
37
38
39
40
41
42
43 protected DefaultKeyValue<K, V> makeDefaultKeyValue() {
44 return new DefaultKeyValue<>(null, null);
45 }
46
47
48
49
50
51
52 protected DefaultKeyValue<K, V> makeDefaultKeyValue(final K key, final V value) {
53 return new DefaultKeyValue<>(key, value);
54 }
55
56 @Test
57 @SuppressWarnings("unchecked")
58 public void testAccessorsAndMutators() {
59 final DefaultKeyValue<K, V> kv = makeDefaultKeyValue();
60
61 kv.setKey((K) key);
62 assertSame(key, kv.getKey());
63
64 kv.setValue((V) value);
65 assertSame(value, kv.getValue());
66
67
68 kv.setKey(null);
69 assertNull(kv.getKey());
70
71 kv.setValue(null);
72 assertNull(kv.getValue());
73 }
74
75
76
77
78 @Test
79 @SuppressWarnings("unchecked")
80 public void testConstructors() {
81
82 DefaultKeyValue<K, V> kv = new DefaultKeyValue<>();
83 assertTrue(kv.getKey() == null && kv.getValue() == null);
84
85
86 kv = new DefaultKeyValue<>((K) key, (V) value);
87 assertTrue(kv.getKey() == key && kv.getValue() == value);
88
89
90 final DefaultKeyValue<K, V> kv2 = new DefaultKeyValue<>(kv);
91 assertTrue(kv2.getKey() == key && kv2.getValue() == value);
92
93
94 kv.setKey(null);
95 kv.setValue(null);
96
97 assertTrue(kv2.getKey() == key && kv2.getValue() == value);
98
99
100 final Map<K, V> map = new HashMap<>();
101 map.put((K) key, (V) value);
102 final Map.Entry<K, V> entry = map.entrySet().iterator().next();
103
104 kv = new DefaultKeyValue<>(entry);
105 assertTrue(kv.getKey() == key && kv.getValue() == value);
106
107
108 entry.setValue(null);
109 assertSame(value, kv.getValue());
110 }
111
112 @Test
113 @SuppressWarnings("unchecked")
114 public void testEqualsAndHashCode() {
115
116 DefaultKeyValue<K, V> kv = makeDefaultKeyValue((K) key, (V) value);
117 DefaultKeyValue<K, V> kv2 = makeDefaultKeyValue((K) key, (V) value);
118
119 assertEquals(kv, kv);
120 assertEquals(kv, kv2);
121 assertEquals(kv.hashCode(), kv2.hashCode());
122
123
124 kv = makeDefaultKeyValue(null, null);
125 kv2 = makeDefaultKeyValue(null, null);
126
127 assertEquals(kv, kv);
128 assertEquals(kv, kv2);
129 assertEquals(kv.hashCode(), kv2.hashCode());
130 }
131
132 @Test
133 @SuppressWarnings("unchecked")
134 public void testSelfReferenceHandling() {
135
136
137
138
139 final DefaultKeyValue<K, V> kv = makeDefaultKeyValue();
140
141 assertThrows(IllegalArgumentException.class, () -> kv.setKey((K) kv));
142
143 assertTrue(kv.getKey() == null && kv.getValue() == null);
144 }
145
146 @Test
147 @SuppressWarnings("unchecked")
148 public void testToMapEntry() {
149 final DefaultKeyValue<K, V> kv = makeDefaultKeyValue((K) key, (V) value);
150
151 final Map<K, V> map = new HashMap<>();
152 map.put(kv.getKey(), kv.getValue());
153 final Map.Entry<K, V> entry = map.entrySet().iterator().next();
154
155 assertEquals(entry, kv.toMapEntry());
156 assertEquals(entry.hashCode(), kv.hashCode());
157 }
158
159 @Test
160 @SuppressWarnings("unchecked")
161 public void testToString() {
162 DefaultKeyValue<K, V> kv = makeDefaultKeyValue((K) key, (V) value);
163 assertEquals(kv.toString(), kv.getKey() + "=" + kv.getValue());
164
165
166 kv = makeDefaultKeyValue(null, null);
167 assertEquals(kv.toString(), kv.getKey() + "=" + kv.getValue());
168 }
169
170 }