1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.collections4.bidimap;
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.assertThrows;
22
23 import java.util.ArrayList;
24 import java.util.Collections;
25 import java.util.Iterator;
26 import java.util.List;
27 import java.util.Map;
28 import java.util.NoSuchElementException;
29
30 import org.apache.commons.collections4.BulkTest;
31 import org.apache.commons.collections4.MapIterator;
32 import org.apache.commons.collections4.OrderedBidiMap;
33 import org.apache.commons.collections4.iterators.AbstractMapIteratorTest;
34 import org.junit.jupiter.api.Test;
35
36
37
38
39 public abstract class AbstractOrderedBidiMapTest<K, V> extends AbstractBidiMapTest<K, V> {
40
41 public class TestBidiOrderedMapIterator extends AbstractMapIteratorTest<K, V> {
42
43 @Override
44 public V[] addSetValues() {
45 return getNewSampleValues();
46 }
47
48 @Override
49 public Map<K, V> getConfirmedMap() {
50
51 return AbstractOrderedBidiMapTest.this.confirmed;
52 }
53
54 @Override
55 public Map<K, V> getMap() {
56
57 return AbstractOrderedBidiMapTest.this.map;
58 }
59
60 @Override
61 public MapIterator<K, V> makeEmptyIterator() {
62 resetEmpty();
63 return AbstractOrderedBidiMapTest.this.getMap().mapIterator();
64 }
65
66 @Override
67 public MapIterator<K, V> makeObject() {
68 resetFull();
69 return AbstractOrderedBidiMapTest.this.getMap().mapIterator();
70 }
71
72 @Override
73 public boolean supportsRemove() {
74 return isRemoveSupported();
75 }
76
77 @Override
78 public boolean supportsSetValue() {
79 return isSetValueSupported();
80 }
81
82 @Override
83 public void verify() {
84 super.verify();
85 AbstractOrderedBidiMapTest.this.verify();
86 }
87
88 }
89
90 public BulkTest bulkTestOrderedMapIterator() {
91 return new TestBidiOrderedMapIterator();
92 }
93
94
95
96
97 @Override
98 public OrderedBidiMap<K, V> getMap() {
99 return (OrderedBidiMap<K, V>) super.getMap();
100 }
101
102 @Test
103 public void testFirstKey() {
104 resetEmpty();
105 OrderedBidiMap<K, V> bidi = getMap();
106
107 final OrderedBidiMap<K, V> finalBidi = bidi;
108 assertThrows(NoSuchElementException.class, () -> finalBidi.firstKey());
109
110 resetFull();
111 bidi = getMap();
112 final K confirmedFirst = confirmed.keySet().iterator().next();
113 assertEquals(confirmedFirst, bidi.firstKey());
114 }
115
116 @Test
117 public void testLastKey() {
118 resetEmpty();
119 OrderedBidiMap<K, V> bidi = getMap();
120
121 final OrderedBidiMap<K, V> finalBidi = bidi;
122 assertThrows(NoSuchElementException.class, () -> finalBidi.lastKey());
123
124 resetFull();
125 bidi = getMap();
126 K confirmedLast = null;
127 for (final Iterator<K> it = confirmed.keySet().iterator(); it.hasNext();) {
128 confirmedLast = it.next();
129 }
130 assertEquals(confirmedLast, bidi.lastKey());
131 }
132
133 @Test
134 public void testNextKey() {
135 resetEmpty();
136 OrderedBidiMap<K, V> bidi = (OrderedBidiMap<K, V>) map;
137 assertNull(bidi.nextKey(getOtherKeys()[0]));
138 if (!isAllowNullKey()) {
139 try {
140 assertNull(bidi.nextKey(null));
141 } catch (final NullPointerException ignore) {
142
143 }
144 } else {
145 assertNull(bidi.nextKey(null));
146 }
147
148 resetFull();
149 bidi = (OrderedBidiMap<K, V>) map;
150 final Iterator<K> it = confirmed.keySet().iterator();
151 K confirmedLast = it.next();
152 while (it.hasNext()) {
153 final K confirmedObject = it.next();
154 assertEquals(confirmedObject, bidi.nextKey(confirmedLast));
155 confirmedLast = confirmedObject;
156 }
157 assertNull(bidi.nextKey(confirmedLast));
158
159 if (!isAllowNullKey()) {
160 final OrderedBidiMap<K, V> finalBidi = bidi;
161 assertThrows(NullPointerException.class, () -> finalBidi.nextKey(null));
162
163 } else {
164 assertNull(bidi.nextKey(null));
165 }
166 }
167
168 @Test
169 public void testPreviousKey() {
170 resetEmpty();
171 OrderedBidiMap<K, V> bidi = getMap();
172 assertNull(bidi.previousKey(getOtherKeys()[0]));
173 if (!isAllowNullKey()) {
174 try {
175 assertNull(bidi.previousKey(null));
176 } catch (final NullPointerException ignore) {
177
178 }
179 } else {
180 assertNull(bidi.previousKey(null));
181 }
182
183 resetFull();
184 bidi = getMap();
185 final List<K> list = new ArrayList<>(confirmed.keySet());
186 Collections.reverse(list);
187 final Iterator<K> it = list.iterator();
188 K confirmedLast = it.next();
189 while (it.hasNext()) {
190 final K confirmedObject = it.next();
191 assertEquals(confirmedObject, bidi.previousKey(confirmedLast));
192 confirmedLast = confirmedObject;
193 }
194 assertNull(bidi.previousKey(confirmedLast));
195
196 if (!isAllowNullKey()) {
197 final OrderedBidiMap<K, V> finalBidi = bidi;
198 assertThrows(NullPointerException.class, () -> finalBidi.previousKey(null));
199
200 } else {
201 assertNull(bidi.previousKey(null));
202 }
203 }
204
205 }