View Javadoc
1   /*
2    * ====================================================================
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *   http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing,
14   * software distributed under the License is distributed on an
15   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16   * KIND, either express or implied.  See the License for the
17   * specific language governing permissions and limitations
18   * under the License.
19   * ====================================================================
20   *
21   * This software consists of voluntary contributions made by many
22   * individuals on behalf of the Apache Software Foundation.  For more
23   * information on the Apache Software Foundation, please see
24   * <http://www.apache.org/>.
25   *
26   */
27  
28  package org.apache.hc.core5.http.message;
29  
30  import java.util.Iterator;
31  import java.util.NoSuchElementException;
32  
33  import org.apache.hc.core5.http.Header;
34  import org.junit.jupiter.api.Assertions;
35  import org.junit.jupiter.api.Test;
36  
37  
38  /**
39   * Tests for {@link BasicTokenIterator}.
40   *
41   */
42  public class TestBasicTokenIterator {
43  
44      @Test
45      public void testSingleHeader() {
46          Header[] headers = new Header[]{
47              new BasicHeader("Name", "token0,token1, token2 , token3")
48          };
49          Iterator<Header> hit = new BasicHeaderIterator(headers, null);
50          Iterator<String>  ti  = new BasicTokenIterator(hit);
51  
52          Assertions.assertTrue(ti.hasNext());
53          Assertions.assertEquals("token0", "token0", ti.next());
54          Assertions.assertTrue(ti.hasNext());
55          Assertions.assertEquals("token1", "token1", ti.next());
56          Assertions.assertTrue(ti.hasNext());
57          Assertions.assertEquals("token2", "token2", ti.next());
58          Assertions.assertTrue(ti.hasNext());
59          Assertions.assertEquals("token3", "token3", ti.next());
60          Assertions.assertFalse(ti.hasNext());
61  
62  
63          headers = new Header[]{
64              new BasicHeader("Name", "token0")
65          };
66          hit = new BasicHeaderIterator(headers, null);
67          ti  = new BasicTokenIterator(hit);
68  
69          Assertions.assertTrue(ti.hasNext());
70          Assertions.assertEquals("token0", "token0", ti.next());
71          Assertions.assertFalse(ti.hasNext());
72      }
73  
74  
75      @Test
76      public void testMultiHeader() {
77          final Header[] headers = new Header[]{
78              new BasicHeader("Name", "token0,token1"),
79              new BasicHeader("Name", ""),
80              new BasicHeader("Name", "token2"),
81              new BasicHeader("Name", " "),
82              new BasicHeader("Name", "token3 "),
83              new BasicHeader("Name", ","),
84              new BasicHeader("Name", "token4"),
85          };
86          final Iterator<Header> hit = new BasicHeaderIterator(headers, null);
87          final Iterator<String>  ti  = new BasicTokenIterator(hit);
88  
89          Assertions.assertTrue(ti.hasNext());
90          Assertions.assertEquals("token0", "token0", ti.next());
91          Assertions.assertTrue(ti.hasNext());
92          Assertions.assertEquals("token1", "token1", ti.next());
93          Assertions.assertTrue(ti.hasNext());
94          Assertions.assertEquals("token2", "token2", ti.next());
95          Assertions.assertTrue(ti.hasNext());
96          Assertions.assertEquals("token3", "token3", ti.next());
97          Assertions.assertTrue(ti.hasNext());
98          Assertions.assertEquals("token4", "token4", ti.next());
99          Assertions.assertFalse(ti.hasNext());
100     }
101 
102 
103     @Test
104     public void testEmpty() {
105         final Header[] headers = new Header[]{
106             new BasicHeader("Name", " "),
107             new BasicHeader("Name", ""),
108             new BasicHeader("Name", ","),
109             new BasicHeader("Name", " ,, "),
110         };
111         Iterator<Header> hit = new BasicHeaderIterator(headers, null);
112         Iterator<String>  ti  = new BasicTokenIterator(hit);
113 
114         Assertions.assertFalse(ti.hasNext());
115 
116 
117         hit = new BasicHeaderIterator(headers, "empty");
118         ti  = new BasicTokenIterator(hit);
119 
120         Assertions.assertFalse(ti.hasNext());
121     }
122 
123 
124     @Test
125     public void testValueStart() {
126         final Header[] headers = new Header[]{
127             new BasicHeader("Name", "token0"),
128             new BasicHeader("Name", " token1"),
129             new BasicHeader("Name", ",token2"),
130             new BasicHeader("Name", " ,token3"),
131             new BasicHeader("Name", ", token4"),
132             new BasicHeader("Name", " , token5"),
133         };
134         final Iterator<Header> hit = new BasicHeaderIterator(headers, null);
135         final Iterator<String>  ti  = new BasicTokenIterator(hit);
136 
137         Assertions.assertTrue(ti.hasNext());
138         Assertions.assertEquals("token0", "token0", ti.next());
139         Assertions.assertTrue(ti.hasNext());
140         Assertions.assertEquals("token1", "token1", ti.next());
141         Assertions.assertTrue(ti.hasNext());
142         Assertions.assertEquals("token2", "token2", ti.next());
143         Assertions.assertTrue(ti.hasNext());
144         Assertions.assertEquals("token3", "token3", ti.next());
145         Assertions.assertTrue(ti.hasNext());
146         Assertions.assertEquals("token4", "token4", ti.next());
147         Assertions.assertTrue(ti.hasNext());
148         Assertions.assertEquals("token5", "token5", ti.next());
149         Assertions.assertFalse(ti.hasNext());
150     }
151 
152 
153     @Test
154     public void testValueEnd() {
155         final Header[] headers = new Header[]{
156             new BasicHeader("Name", "token0"),
157             new BasicHeader("Name", "token1 "),
158             new BasicHeader("Name", "token2,"),
159             new BasicHeader("Name", "token3 ,"),
160             new BasicHeader("Name", "token4, "),
161             new BasicHeader("Name", "token5 , "),
162         };
163         final Iterator<Header> hit = new BasicHeaderIterator(headers, null);
164         final Iterator<String>  ti  = new BasicTokenIterator(hit);
165 
166         Assertions.assertTrue(ti.hasNext());
167         Assertions.assertEquals("token0", "token0", ti.next());
168         Assertions.assertTrue(ti.hasNext());
169         Assertions.assertEquals("token1", "token1", ti.next());
170         Assertions.assertTrue(ti.hasNext());
171         Assertions.assertEquals("token2", "token2", ti.next());
172         Assertions.assertTrue(ti.hasNext());
173         Assertions.assertEquals("token3", "token3", ti.next());
174         Assertions.assertTrue(ti.hasNext());
175         Assertions.assertEquals("token4", "token4", ti.next());
176         Assertions.assertTrue(ti.hasNext());
177         Assertions.assertEquals("token5", "token5", ti.next());
178         Assertions.assertFalse(ti.hasNext());
179     }
180 
181     @Test
182     public void testWrongPublic() {
183         Assertions.assertThrows(NullPointerException.class, () -> new BasicTokenIterator(null));
184 
185         final Header[] headers = new Header[]{
186             new BasicHeader("Name", " "),
187             new BasicHeader("Name", ""),
188             new BasicHeader("Name", ","),
189             new BasicHeader("Name", " ,, "),
190         };
191         final Iterator<Header> hit = new BasicHeaderIterator(headers, null);
192         final Iterator<String>  ti  = new BasicTokenIterator(hit);
193 
194         Assertions.assertThrows(NoSuchElementException.class, () -> ti.next());
195         Assertions.assertThrows(UnsupportedOperationException.class, () -> ti.remove());
196     }
197 
198 }