View Javadoc
1   /*
2    * Copyright 2007 Kasper B. Graversen
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.supercsv.io;
17  
18  import static org.junit.Assert.assertArrayEquals;
19  import static org.junit.Assert.assertEquals;
20  import static org.supercsv.SuperCsvTestUtils.CSV_FILE;
21  import static org.supercsv.SuperCsvTestUtils.CUSTOMERS;
22  import static org.supercsv.SuperCsvTestUtils.HEADER;
23  import static org.supercsv.SuperCsvTestUtils.READ_PROCESSORS;
24  import static org.supercsv.SuperCsvTestUtils.STRING_CUSTOMERS;
25  
26  import java.io.IOException;
27  import java.io.Reader;
28  import java.io.StringReader;
29  import java.util.ArrayList;
30  import java.util.List;
31  
32  import org.junit.After;
33  import org.junit.Before;
34  import org.junit.Test;
35  import org.supercsv.cellprocessor.ift.CellProcessor;
36  import org.supercsv.prefs.CsvPreference;
37  
38  /**
39   * Tests the CsvListReader class.
40   * 
41   * @author James Bassett
42   */
43  public class CsvListReaderTest {
44  	
45  	private static final CsvPreference PREFS = CsvPreference.STANDARD_PREFERENCE;
46  	
47  	private Reader reader;
48  	
49  	private CsvListReader listReader;
50  	
51  	private CsvListReader tokenizerListReader;
52  	
53  	/**
54  	 * Sets up the reader for the tests.
55  	 */
56  	@Before
57  	public void setUp() {
58  		reader = new StringReader(CSV_FILE);
59  		listReader = new CsvListReader(reader, PREFS);
60  		
61  		final Tokenizer tokenizer = new Tokenizer(reader, PREFS);
62  		tokenizerListReader = new CsvListReader(tokenizer, PREFS);
63  	}
64  	
65  	/**
66  	 * Closes the readers after the test.
67  	 */
68  	@After
69  	public void tearDown() throws IOException {
70  		listReader.close();
71  		tokenizerListReader.close();
72  	}
73  	
74  	/**
75  	 * Tests the read() method.
76  	 */
77  	@Test
78  	public void testRead() throws IOException {
79  		
80  		final String[] header = listReader.getHeader(true);
81  		assertArrayEquals(HEADER, header);
82  		
83  		// read all of the customers in
84  		final List<List<String>> customers = new ArrayList<List<String>>();
85  		List<String> customer;
86  		while( (customer = listReader.read()) != null ) {
87  			customers.add(customer);
88  		}
89  		
90  		// assert that the List for each customer is correct (ensures Lists haven't been modified)
91  		for( int i = 0; i < customers.size(); i++ ) {
92  			customer = customers.get(i);
93  			assertEquals(STRING_CUSTOMERS.get(i).getCustomerNo(), customer.get(0));
94  			assertEquals(STRING_CUSTOMERS.get(i).getFirstName(), customer.get(1));
95  			assertEquals(STRING_CUSTOMERS.get(i).getLastName(), customer.get(2));
96  			assertEquals(STRING_CUSTOMERS.get(i).getBirthDate(), customer.get(3));
97  			assertEquals(STRING_CUSTOMERS.get(i).getMailingAddress(), customer.get(4));
98  			assertEquals(STRING_CUSTOMERS.get(i).getMarried(), customer.get(5));
99  			assertEquals(STRING_CUSTOMERS.get(i).getNumberOfKids(), customer.get(6));
100 			assertEquals(STRING_CUSTOMERS.get(i).getFavouriteQuote(), customer.get(7));
101 			assertEquals(STRING_CUSTOMERS.get(i).getEmail(), customer.get(8));
102 			assertEquals(STRING_CUSTOMERS.get(i).getLoyaltyPoints(), customer.get(9));
103 		}
104 		
105 		assertEquals(STRING_CUSTOMERS.size() + 1, listReader.getRowNumber());
106 	}
107 	
108 	/**
109 	 * Tests the read() method with processors.
110 	 */
111 	@Test
112 	public void testReadWithProcessors() throws IOException {
113 		
114 		final String[] header = listReader.getHeader(true);
115 		assertArrayEquals(HEADER, header);
116 		
117 		// read all of the customers in
118 		final List<List<Object>> customers = new ArrayList<List<Object>>();
119 		List<Object> customer;
120 		while( (customer = listReader.read(READ_PROCESSORS)) != null ) {
121 			customers.add(customer);
122 		}
123 		
124 		// assert that the List for each customer is correct (ensures Lists haven't been modified)
125 		for( int i = 0; i < customers.size(); i++ ) {
126 			customer = customers.get(i);
127 			assertEquals(CUSTOMERS.get(i).getCustomerNo(), customer.get(0));
128 			assertEquals(CUSTOMERS.get(i).getFirstName(), customer.get(1));
129 			assertEquals(CUSTOMERS.get(i).getLastName(), customer.get(2));
130 			assertEquals(CUSTOMERS.get(i).getBirthDate(), customer.get(3));
131 			assertEquals(CUSTOMERS.get(i).getMailingAddress(), customer.get(4));
132 			assertEquals(CUSTOMERS.get(i).getMarried(), customer.get(5));
133 			assertEquals(CUSTOMERS.get(i).getNumberOfKids(), customer.get(6));
134 			assertEquals(CUSTOMERS.get(i).getFavouriteQuote(), customer.get(7));
135 			assertEquals(CUSTOMERS.get(i).getEmail(), customer.get(8));
136 			assertEquals(CUSTOMERS.get(i).getLoyaltyPoints(), customer.get(9));
137 		}
138 		
139 		assertEquals(CUSTOMERS.size() + 1, listReader.getRowNumber());
140 	}
141 	
142 	/**
143 	 * Tests the read() method combined with the executeProcessors() method.
144 	 */
145 	@Test
146 	public void testReadCombinedWithExecuteProcessors() throws IOException {
147 		
148 		final String[] header = listReader.getHeader(true);
149 		assertArrayEquals(HEADER, header);
150 		
151 		// read all of the customers in (manually processing each)
152 		final List<List<Object>> customers = new ArrayList<List<Object>>();
153 		while( listReader.read() != null ) {
154 			final List<Object> customer = listReader.executeProcessors(READ_PROCESSORS);
155 			customers.add(customer);
156 		}
157 		
158 		// assert that the List for each customer is correct (ensures Lists haven't been modified)
159 		for( int i = 0; i < customers.size(); i++ ) {
160 			final List<Object> customer = customers.get(i);
161 			assertEquals(CUSTOMERS.get(i).getCustomerNo(), customer.get(0));
162 			assertEquals(CUSTOMERS.get(i).getFirstName(), customer.get(1));
163 			assertEquals(CUSTOMERS.get(i).getLastName(), customer.get(2));
164 			assertEquals(CUSTOMERS.get(i).getBirthDate(), customer.get(3));
165 			assertEquals(CUSTOMERS.get(i).getMailingAddress(), customer.get(4));
166 			assertEquals(CUSTOMERS.get(i).getMarried(), customer.get(5));
167 			assertEquals(CUSTOMERS.get(i).getNumberOfKids(), customer.get(6));
168 			assertEquals(CUSTOMERS.get(i).getFavouriteQuote(), customer.get(7));
169 			assertEquals(CUSTOMERS.get(i).getEmail(), customer.get(8));
170 			assertEquals(CUSTOMERS.get(i).getLoyaltyPoints(), customer.get(9));
171 		}
172 		
173 		assertEquals(CUSTOMERS.size() + 1, listReader.getRowNumber());
174 	}
175 	
176 	/**
177 	 * Tests the read() method using the tokenizer version of CsvListReader (just to make sure it behaves exactly the
178 	 * same as the reader version).
179 	 */
180 	@Test
181 	public void testReadUsingTokenizerReader() throws IOException {
182 		
183 		final String[] header = tokenizerListReader.getHeader(true);
184 		assertArrayEquals(HEADER, header);
185 		
186 		// read all of the customers in
187 		final List<List<String>> customers = new ArrayList<List<String>>();
188 		List<String> customer;
189 		while( (customer = tokenizerListReader.read()) != null ) {
190 			customers.add(customer);
191 		}
192 		
193 		// assert that the List for each customer is correct (ensures Lists haven't been modified)
194 		for( int i = 0; i < customers.size(); i++ ) {
195 			customer = customers.get(i);
196 			assertEquals(STRING_CUSTOMERS.get(i).getCustomerNo(), customer.get(0));
197 			assertEquals(STRING_CUSTOMERS.get(i).getFirstName(), customer.get(1));
198 			assertEquals(STRING_CUSTOMERS.get(i).getLastName(), customer.get(2));
199 			assertEquals(STRING_CUSTOMERS.get(i).getBirthDate(), customer.get(3));
200 			assertEquals(STRING_CUSTOMERS.get(i).getMailingAddress(), customer.get(4));
201 			assertEquals(STRING_CUSTOMERS.get(i).getMarried(), customer.get(5));
202 			assertEquals(STRING_CUSTOMERS.get(i).getNumberOfKids(), customer.get(6));
203 			assertEquals(STRING_CUSTOMERS.get(i).getFavouriteQuote(), customer.get(7));
204 			assertEquals(STRING_CUSTOMERS.get(i).getEmail(), customer.get(8));
205 			assertEquals(STRING_CUSTOMERS.get(i).getLoyaltyPoints(), customer.get(9));
206 		}
207 		
208 		assertEquals(STRING_CUSTOMERS.size() + 1, tokenizerListReader.getRowNumber());
209 	}
210 	
211 	/**
212 	 * Tests the read() method (with processors), with a null cell processor array.
213 	 */
214 	@Test(expected = NullPointerException.class)
215 	public void testReadProcessorsWithNullProcessors() throws IOException {
216 		listReader.read((CellProcessor[]) null);
217 	}
218 	
219 	/**
220 	 * Tests the executeProcessors() method (with processors), with a null cell processor array.
221 	 */
222 	@Test(expected = NullPointerException.class)
223 	public void testExecuteProcessorsWithNullProcessors() throws IOException {
224 		listReader.executeProcessors((CellProcessor[]) null);
225 	}
226 	
227 	/**
228 	 * Tests the Reader constructor with a null Reader.
229 	 */
230 	@SuppressWarnings("resource")
231 	@Test(expected = NullPointerException.class)
232 	public void testReaderConstructorWithNullReader() {
233 		new CsvListReader((Reader) null, PREFS);
234 	}
235 	
236 	/**
237 	 * Tests the Reader constructor with a null preference.
238 	 */
239 	@SuppressWarnings("resource")
240 	@Test(expected = NullPointerException.class)
241 	public void testReaderConstructorWithNullPreferences() {
242 		new CsvListReader(reader, null);
243 	}
244 	
245 	/**
246 	 * Tests the Tokenizer constructor with a null Reader.
247 	 */
248 	@SuppressWarnings("resource")
249 	@Test(expected = NullPointerException.class)
250 	public void testTokenizerConstructorWithNullReader() {
251 		new CsvListReader((Tokenizer) null, PREFS);
252 	}
253 	
254 	/**
255 	 * Tests the Tokenizer constructor with a null preference.
256 	 */
257 	@SuppressWarnings("resource")
258 	@Test(expected = NullPointerException.class)
259 	public void testTokenizerConstructorWithNullPreferences() {
260 		new CsvListReader(new Tokenizer(reader, PREFS), null);
261 	}
262 	
263 }