1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.hc.core5.http.message;
28
29 import java.util.Iterator;
30 import java.util.NoSuchElementException;
31
32 import org.apache.hc.core5.http.Header;
33 import org.junit.jupiter.api.Assertions;
34 import org.junit.jupiter.api.Test;
35
36
37
38
39
40
41 public class TestBasicHeaderIterator {
42
43 @Test
44 public void testAllSame() {
45 final Header[] headers = new Header[]{
46 new BasicHeader("Name", "value0"),
47 new BasicHeader("nAme", "value1, value1.1"),
48 new BasicHeader("naMe", "value2=whatever"),
49 new BasicHeader("namE", "value3;tag=nil"),
50 };
51
52
53 Iterator<Header> hit = new BasicHeaderIterator(headers, null);
54 Assertions.assertTrue(hit.hasNext());
55 Assertions.assertEquals(headers[0], hit.next(), "0");
56 Assertions.assertTrue(hit.hasNext());
57 Assertions.assertEquals(headers[1], hit.next(), "1");
58 Assertions.assertTrue(hit.hasNext());
59 Assertions.assertEquals(headers[2], hit.next(), "2");
60 Assertions.assertTrue(hit.hasNext());
61 Assertions.assertEquals(headers[3], hit.next(), "3");
62 Assertions.assertFalse(hit.hasNext());
63
64
65 hit = new BasicHeaderIterator(headers, "name");
66 Assertions.assertTrue(hit.hasNext());
67 Assertions.assertEquals(headers[0], hit.next(), "0");
68 Assertions.assertTrue(hit.hasNext());
69 Assertions.assertEquals(headers[1], hit.next(), "1");
70 Assertions.assertTrue(hit.hasNext());
71 Assertions.assertEquals(headers[2], hit.next(), "2");
72 Assertions.assertTrue(hit.hasNext());
73 Assertions.assertEquals(headers[3], hit.next(), "3");
74 Assertions.assertFalse(hit.hasNext());
75 }
76
77
78 @Test
79 public void testFirstLastOneNone() {
80 final Header[] headers = new Header[]{
81 new BasicHeader("match" , "value0"),
82 new BasicHeader("mismatch", "value1, value1.1"),
83 new BasicHeader("single" , "value2=whatever"),
84 new BasicHeader("match" , "value3;tag=nil"),
85 };
86
87
88 Iterator<Header> hit = new BasicHeaderIterator(headers, null);
89 Assertions.assertTrue(hit.hasNext());
90 Assertions.assertEquals(headers[0], hit.next(), "0");
91 Assertions.assertTrue(hit.hasNext());
92 Assertions.assertEquals(headers[1], hit.next(), "1");
93 Assertions.assertTrue(hit.hasNext());
94 Assertions.assertEquals(headers[2], hit.next(), "2");
95 Assertions.assertTrue(hit.hasNext());
96 Assertions.assertEquals(headers[3], hit.next(), "3");
97 Assertions.assertFalse(hit.hasNext());
98
99
100 hit = new BasicHeaderIterator(headers, "match");
101 Assertions.assertTrue(hit.hasNext());
102 Assertions.assertEquals(headers[0], hit.next());
103 Assertions.assertTrue(hit.hasNext());
104 Assertions.assertEquals(headers[3], hit.next());
105 Assertions.assertFalse(hit.hasNext());
106
107
108 hit = new BasicHeaderIterator(headers, "single");
109 Assertions.assertTrue(hit.hasNext());
110 Assertions.assertEquals(headers[2], hit.next());
111 Assertions.assertFalse(hit.hasNext());
112
113
114 hit = new BasicHeaderIterator(headers, "way-off");
115 Assertions.assertFalse(hit.hasNext());
116 }
117
118
119 @Test
120 public void testInterspersed() {
121 final Header[] headers = new Header[]{
122 new BasicHeader("yellow", "00"),
123 new BasicHeader("maroon", "01"),
124 new BasicHeader("orange", "02"),
125 new BasicHeader("orange", "03"),
126 new BasicHeader("orange", "04"),
127 new BasicHeader("yellow", "05"),
128 new BasicHeader("maroon", "06"),
129 new BasicHeader("maroon", "07"),
130 new BasicHeader("maroon", "08"),
131 new BasicHeader("yellow", "09"),
132 new BasicHeader("maroon", "0a"),
133 new BasicHeader("yellow", "0b"),
134 new BasicHeader("orange", "0c"),
135 new BasicHeader("yellow", "0d"),
136 new BasicHeader("orange", "0e"),
137 };
138
139
140 Iterator<Header> hit = new BasicHeaderIterator(headers, null);
141 Assertions.assertTrue(hit.hasNext());
142 Assertions.assertEquals(headers[0], hit.next(), "0");
143 Assertions.assertTrue(hit.hasNext());
144 Assertions.assertEquals(headers[1], hit.next(), "1");
145 Assertions.assertTrue(hit.hasNext());
146 Assertions.assertEquals(headers[2], hit.next(), "2");
147 Assertions.assertTrue(hit.hasNext());
148 Assertions.assertEquals(headers[3], hit.next(), "3");
149 Assertions.assertTrue(hit.hasNext());
150 Assertions.assertEquals(headers[4], hit.next(), "4");
151 Assertions.assertTrue(hit.hasNext());
152 Assertions.assertEquals(headers[5], hit.next(), "5");
153 Assertions.assertTrue(hit.hasNext());
154 Assertions.assertEquals(headers[6], hit.next(), "6");
155 Assertions.assertTrue(hit.hasNext());
156 Assertions.assertEquals(headers[7], hit.next(), "7");
157 Assertions.assertTrue(hit.hasNext());
158 Assertions.assertEquals(headers[8], hit.next(), "8");
159 Assertions.assertTrue(hit.hasNext());
160 Assertions.assertEquals(headers[9], hit.next(), "9");
161 Assertions.assertTrue(hit.hasNext());
162 Assertions.assertEquals(headers[10], hit.next(), "a");
163 Assertions.assertTrue(hit.hasNext());
164 Assertions.assertEquals(headers[11], hit.next(), "b");
165 Assertions.assertTrue(hit.hasNext());
166 Assertions.assertEquals(headers[12], hit.next(), "c");
167 Assertions.assertTrue(hit.hasNext());
168 Assertions.assertEquals(headers[13], hit.next(), "d");
169 Assertions.assertTrue(hit.hasNext());
170 Assertions.assertEquals(headers[14], hit.next(), "e");
171 Assertions.assertFalse(hit.hasNext());
172
173
174 hit = new BasicHeaderIterator(headers, "Yellow");
175 Assertions.assertTrue(hit.hasNext());
176 Assertions.assertEquals(headers[0], hit.next());
177 Assertions.assertTrue(hit.hasNext());
178 Assertions.assertEquals(headers[5], hit.next(), "5");
179 Assertions.assertTrue(hit.hasNext());
180 Assertions.assertEquals(headers[9], hit.next(), "9");
181 Assertions.assertTrue(hit.hasNext());
182 Assertions.assertEquals(headers[11], hit.next(), "b");
183 Assertions.assertTrue(hit.hasNext());
184 Assertions.assertEquals(headers[13], hit.next(), "d");
185 Assertions.assertFalse(hit.hasNext());
186
187
188 hit = new BasicHeaderIterator(headers, "marOOn");
189 Assertions.assertTrue(hit.hasNext());
190 Assertions.assertEquals(headers[1], hit.next(),"1");
191 Assertions.assertTrue(hit.hasNext());
192 Assertions.assertEquals(headers[6], hit.next(),"6");
193 Assertions.assertTrue(hit.hasNext());
194 Assertions.assertEquals(headers[7], hit.next(), "7");
195 Assertions.assertTrue(hit.hasNext());
196 Assertions.assertEquals(headers[8], hit.next(), "8");
197 Assertions.assertTrue(hit.hasNext());
198 Assertions.assertEquals(headers[10], hit.next(), "a");
199 Assertions.assertFalse(hit.hasNext());
200
201
202 hit = new BasicHeaderIterator(headers, "OranGe");
203 Assertions.assertTrue(hit.hasNext());
204 Assertions.assertEquals(headers[2], hit.next());
205 Assertions.assertTrue(hit.hasNext());
206 Assertions.assertEquals(headers[3], hit.next());
207 Assertions.assertTrue(hit.hasNext());
208 Assertions.assertEquals(headers[4], hit.next(), "4");
209 Assertions.assertTrue(hit.hasNext());
210 Assertions.assertEquals(headers[12], hit.next(), "b");
211 Assertions.assertTrue(hit.hasNext());
212 Assertions.assertEquals(headers[14], hit.next(), "e");
213 Assertions.assertFalse(hit.hasNext());
214 }
215
216
217 @Test
218 public void testInvalid() {
219 Assertions.assertThrows(NullPointerException.class, () -> new BasicHeaderIterator(null, "whatever"));
220
221 final Iterator<Header> hit = new BasicHeaderIterator(new Header[0], "whatever");
222 Assertions.assertFalse(hit.hasNext());
223
224
225 Assertions.assertThrows(NoSuchElementException.class, () -> hit.next());
226 }
227
228 @Test
229 public void testRemaining() {
230
231
232 final Header[] headers = new Header[]{
233 new BasicHeader("Name", "value0"),
234 new BasicHeader("nAme", "value1, value1.1"),
235 new BasicHeader("naMe", "value2=whatever"),
236 new BasicHeader("namE", "value3;tag=nil"),
237 };
238
239
240 final Iterator<Header> hit = new BasicHeaderIterator(headers, null);
241 Assertions.assertTrue(hit.hasNext());
242 Assertions.assertEquals(headers[0], hit.next(), "0");
243 Assertions.assertTrue(hit.hasNext());
244 Assertions.assertEquals(headers[1], hit.next(), "1");
245 Assertions.assertTrue(hit.hasNext());
246 Assertions.assertEquals(headers[2], hit.next(), "2");
247 Assertions.assertTrue(hit.hasNext());
248 Assertions.assertEquals(headers[3], hit.next(), "3");
249 Assertions.assertFalse(hit.hasNext());
250
251 final Iterator<Header> hit2 = new BasicHeaderIterator(headers, null);
252 Assertions.assertTrue(hit2.hasNext());
253 Assertions.assertThrows(UnsupportedOperationException.class, () -> hit2.remove());
254 }
255 }