1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.collections4.multimap;
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.assertNotNull;
22 import static org.junit.jupiter.api.Assertions.assertTrue;
23
24 import java.util.Collection;
25
26 import org.apache.commons.collections4.MultiValuedMap;
27 import org.apache.commons.collections4.Transformer;
28 import org.apache.commons.collections4.TransformerUtils;
29 import org.apache.commons.collections4.collection.AbstractCollectionTest;
30 import org.apache.commons.collections4.collection.TransformedCollectionTest;
31 import org.junit.jupiter.api.Test;
32
33
34
35
36 public class TransformedMultiValuedMapTest<K, V> extends AbstractMultiValuedMapTest<K, V> {
37
38 public TransformedMultiValuedMapTest() {
39 super(TransformedMultiValuedMapTest.class.getSimpleName());
40 }
41
42 @Override
43 protected int getIterationBehaviour() {
44 return AbstractCollectionTest.UNORDERED;
45 }
46
47 @Override
48 public MultiValuedMap<K, V> makeObject() {
49 return TransformedMultiValuedMap.transformingMap(new ArrayListValuedHashMap<>(),
50 TransformerUtils.<K>nopTransformer(), TransformerUtils.<V>nopTransformer());
51 }
52
53 @Test
54 @SuppressWarnings("unchecked")
55 public void testFactory_Decorate() {
56 final MultiValuedMap<K, V> base = new ArrayListValuedHashMap<>();
57 base.put((K) "A", (V) "1");
58 base.put((K) "B", (V) "2");
59 base.put((K) "C", (V) "3");
60
61 final MultiValuedMap<K, V> trans = TransformedMultiValuedMap
62 .transformingMap(
63 base,
64 null,
65 (Transformer<? super V, ? extends V>) TransformedCollectionTest.STRING_TO_INTEGER_TRANSFORMER);
66 assertEquals(3, trans.size());
67 assertTrue(trans.get((K) "A").contains("1"));
68 assertTrue(trans.get((K) "B").contains("2"));
69 assertTrue(trans.get((K) "C").contains("3"));
70 trans.put((K) "D", (V) "4");
71 assertTrue(trans.get((K) "D").contains(Integer.valueOf(4)));
72 }
73
74 @Test
75 @SuppressWarnings("unchecked")
76 public void testFactory_decorateTransform() {
77 final MultiValuedMap<K, V> base = new ArrayListValuedHashMap<>();
78 base.put((K) "A", (V) "1");
79 base.put((K) "B", (V) "2");
80 base.put((K) "C", (V) "3");
81
82 final MultiValuedMap<K, V> trans = TransformedMultiValuedMap
83 .transformedMap(
84 base,
85 null,
86 (Transformer<? super V, ? extends V>) TransformedCollectionTest.STRING_TO_INTEGER_TRANSFORMER);
87 assertEquals(3, trans.size());
88 assertTrue(trans.get((K) "A").contains(Integer.valueOf(1)));
89 assertTrue(trans.get((K) "B").contains(Integer.valueOf(2)));
90 assertTrue(trans.get((K) "C").contains(Integer.valueOf(3)));
91 trans.put((K) "D", (V) "4");
92 assertTrue(trans.get((K) "D").contains(Integer.valueOf(4)));
93
94 final MultiValuedMap<K, V> baseMap = new ArrayListValuedHashMap<>();
95 final MultiValuedMap<K, V> transMap = TransformedMultiValuedMap
96 .transformedMap(
97 baseMap,
98 null,
99 (Transformer<? super V, ? extends V>) TransformedCollectionTest.STRING_TO_INTEGER_TRANSFORMER);
100 assertEquals(0, transMap.size());
101 transMap.put((K) "D", (V) "4");
102 assertEquals(1, transMap.size());
103 assertTrue(transMap.get((K) "D").contains(Integer.valueOf(4)));
104 }
105
106 @Test
107 @SuppressWarnings("unchecked")
108 public void testKeyTransformedMap() {
109 final Object[] els = { "1", "3", "5", "7", "2", "4", "6" };
110
111 final MultiValuedMap<K, V> map = TransformedMultiValuedMap.transformingMap(
112 new ArrayListValuedHashMap<>(),
113 (Transformer<? super K, ? extends K>) TransformedCollectionTest.STRING_TO_INTEGER_TRANSFORMER,
114 null);
115 assertEquals(0, map.size());
116 for (int i = 0; i < els.length; i++) {
117 map.put((K) els[i], (V) els[i]);
118 assertEquals(i + 1, map.size());
119 assertTrue(map.containsKey(Integer.valueOf((String) els[i])));
120 assertFalse(map.containsKey(els[i]));
121 assertTrue(map.containsValue(els[i]));
122 assertTrue(map.get((K) Integer.valueOf((String) els[i])).contains(els[i]));
123 }
124
125 final Collection<V> coll = map.remove(els[0]);
126 assertNotNull(coll);
127 assertEquals(0, coll.size());
128 assertTrue(map.remove(Integer.valueOf((String) els[0])).contains(els[0]));
129 }
130
131 @Test
132 @SuppressWarnings("unchecked")
133 public void testValueTransformedMap() {
134 final Object[] els = { "1", "3", "5", "7", "2", "4", "6" };
135
136 final MultiValuedMap<K, V> map = TransformedMultiValuedMap.transformingMap(
137 new ArrayListValuedHashMap<>(), null,
138 (Transformer<? super V, ? extends V>) TransformedCollectionTest.STRING_TO_INTEGER_TRANSFORMER);
139 assertEquals(0, map.size());
140 for (int i = 0; i < els.length; i++) {
141 map.put((K) els[i], (V) els[i]);
142 assertEquals(i + 1, map.size());
143 assertTrue(map.containsValue(Integer.valueOf((String) els[i])));
144 assertFalse(map.containsValue(els[i]));
145 assertTrue(map.containsKey(els[i]));
146 assertTrue(map.get((K) els[i]).contains(Integer.valueOf((String) els[i])));
147 }
148 assertTrue(map.remove(els[0]).contains(Integer.valueOf((String) els[0])));
149 }
150
151
152
153
154
155
156
157
158 }