1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.collections4.splitmap;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertFalse;
21 import static org.junit.jupiter.api.Assertions.assertNull;
22 import static org.junit.jupiter.api.Assertions.assertTrue;
23
24 import java.io.IOException;
25 import java.io.ObjectInputStream;
26 import java.math.BigInteger;
27 import java.nio.file.Files;
28 import java.nio.file.Paths;
29 import java.util.HashMap;
30
31 import org.apache.commons.collections4.BulkTest;
32 import org.apache.commons.collections4.MapIterator;
33 import org.apache.commons.collections4.Transformer;
34 import org.apache.commons.collections4.functors.NOPTransformer;
35 import org.apache.commons.lang3.StringUtils;
36 import org.junit.jupiter.api.Test;
37
38
39
40
41 @SuppressWarnings("boxing")
42 public class TransformedSplitMapTest extends BulkTest {
43
44 private final Transformer<Integer, String> intToString = String::valueOf;
45
46 private final Transformer<Object, Class<?>> objectToClass = input -> input == null ? null : input.getClass();
47
48 private final Transformer<String, Integer> stringToInt = Integer::valueOf;
49
50 @Test
51 public void testEmptyMap() throws IOException, ClassNotFoundException {
52 final TransformedSplitMap<String, String, String, String> map =
53 TransformedSplitMap.transformingMap(new HashMap<>(),
54 NOPTransformer.<String>nopTransformer(),
55 NOPTransformer.<String>nopTransformer());
56
57 final ObjectInputStream in = new ObjectInputStream(Files.newInputStream(Paths.get(TEST_DATA_PATH + "/TransformedSplitMap.emptyCollection.version4.obj")));
58 final Object readObject = in.readObject();
59 in.close();
60
61 final TransformedSplitMap<?, ?, ?, ?> readMap = (TransformedSplitMap<?, ?, ?, ?>) readObject;
62 assertTrue(readMap.isEmpty(), "Map should be empty");
63 assertEquals(map.entrySet(), readMap.entrySet());
64 }
65
66 @Test
67 public void testFullMap() throws IOException, ClassNotFoundException {
68 final TransformedSplitMap<String, String, String, String> map = TransformedSplitMap.transformingMap(new HashMap<>(),
69 NOPTransformer.<String>nopTransformer(), NOPTransformer.<String>nopTransformer());
70 map.put("a", "b");
71 map.put("c", "d");
72 map.put("e", "f");
73 map.put("g", "h");
74
75 final ObjectInputStream in = new ObjectInputStream(Files.newInputStream(Paths.get(TEST_DATA_PATH + "TransformedSplitMap.fullCollection.version4.obj")));
76 final Object readObject = in.readObject();
77 in.close();
78
79 final TransformedSplitMap<?, ?, ?, ?> readMap = (TransformedSplitMap<?, ?, ?, ?>) readObject;
80 assertFalse(readMap.isEmpty(), "Map should not be empty");
81 assertEquals(map.entrySet(), readMap.entrySet());
82 }
83
84 @Test
85 public void testMapIterator() {
86 final TransformedSplitMap<String, String, String, Integer> map =
87 TransformedSplitMap.transformingMap(new HashMap<>(),
88 NOPTransformer.<String>nopTransformer(), stringToInt);
89 assertEquals(0, map.size());
90 for (int i = 0; i < 6; i++) {
91 map.put(String.valueOf(i), String.valueOf(i));
92 }
93
94 for (final MapIterator<String, Integer> it = map.mapIterator(); it.hasNext();) {
95 final String k = it.next();
96 assertEquals(k, it.getKey());
97 assertEquals(map.get(k), it.getValue());
98 }
99 }
100
101 @Test
102 public void testTransformedMap() {
103 final TransformedSplitMap<Integer, String, Object, Class<?>> map = TransformedSplitMap.transformingMap(
104 new HashMap<>(), intToString, objectToClass);
105
106 final Integer[] k = { 0, 1, 2, 3, 4, 5, 6 };
107 final Object[] v = { StringUtils.EMPTY, new Object(), new HashMap<>(), 0, BigInteger.TEN, null,
108 new Object[0] };
109
110 assertEquals(0, map.size());
111 for (int i = 0; i < k.length; i++) {
112 map.put(k[i], v[i]);
113 assertEquals(i + 1, map.size());
114 assertTrue(map.containsKey(intToString.transform(k[i])));
115 assertFalse(map.containsKey(k[i]));
116 assertTrue(map.containsValue(objectToClass.transform(v[i])));
117 assertTrue(objectToClass.transform(v[i]) != v[i] ^ map.containsValue(v[i]));
118 assertEquals(objectToClass.transform(v[i]), map.get(intToString.transform(k[i])));
119 }
120
121 int sz = map.size();
122 assertNull(map.remove(k[0]));
123 assertEquals(sz, map.size());
124 assertEquals(objectToClass.transform(v[0]), map.remove(intToString.transform(k[0])));
125 assertEquals(--sz, map.size());
126
127 final TransformedSplitMap<String, String, String, Integer> map2 = TransformedSplitMap.transformingMap(
128 new HashMap<>(), NOPTransformer.<String>nopTransformer(), stringToInt);
129 assertEquals(0, map2.size());
130 for (int i = 0; i < 6; i++) {
131 map2.put(String.valueOf(i), String.valueOf(i));
132 assertEquals(i + 1, map2.size());
133 assertTrue(map2.containsValue(i));
134 assertFalse(map2.containsValue(String.valueOf(i)));
135 assertTrue(map2.containsKey(String.valueOf(i)));
136 assertEquals(i, map2.get(String.valueOf(i)).intValue());
137 }
138
139 int sz2 = map2.size();
140 assertEquals(Integer.valueOf(0), map2.remove("0"));
141 assertEquals(--sz2, map2.size());
142 }
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163 }