1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.supercsv.io;
18
19 import static org.junit.Assert.*;
20 import static org.supercsv.SuperCsvTestUtils.CSV_FILE;
21 import static org.supercsv.SuperCsvTestUtils.HEADER;
22 import static org.supercsv.SuperCsvTestUtils.CUSTOMERS;
23 import static org.supercsv.SuperCsvTestUtils.STRING_CUSTOMERS;
24 import static org.supercsv.SuperCsvTestUtils.WRITE_PROCESSORS;
25 import static org.supercsv.SuperCsvTestUtils.date;
26
27 import java.io.IOException;
28 import java.io.StringWriter;
29 import java.io.Writer;
30 import java.sql.ResultSet;
31 import java.sql.SQLException;
32 import org.junit.Before;
33 import org.junit.BeforeClass;
34 import org.junit.Test;
35 import org.supercsv.cellprocessor.FmtDate;
36 import org.supercsv.cellprocessor.ift.CellProcessor;
37 import org.supercsv.exception.SuperCsvCellProcessorException;
38 import org.supercsv.mock.CustomerBean;
39 import org.supercsv.mock.CustomerStringBean;
40 import org.supercsv.mock.ResultSetMock;
41 import org.supercsv.prefs.CsvPreference;
42
43
44
45
46
47
48
49 public class CsvResultSetWriterTest {
50
51 private static final CsvPreference PREFS = CsvPreference.STANDARD_PREFERENCE;
52 public static Object[][] TEST_DATA_VARIOUS_TYPES;
53 public static Object[][] TEST_DATA_STRINGS;
54
55 private Writer writer;
56 private CsvResultSetWriter csvResultSetWriter;
57
58 @BeforeClass
59 public static void beforeClass() {
60 TEST_DATA_VARIOUS_TYPES = setUpTestDataCustomerBeans();
61 TEST_DATA_STRINGS = setUpTestDataCustomerStringBeans();
62 }
63
64 private static Object[][] setUpTestDataCustomerBeans() {
65 final Object[][] testData = new Object[10][10];
66 for (int i = 0; i < 10; i++) {
67 CustomerBean bean = CUSTOMERS.get(i);
68 testData[i][0] = bean.getCustomerNo();
69 testData[i][1] = bean.getFirstName();
70 testData[i][2] = bean.getLastName();
71 testData[i][3] = bean.getBirthDate();
72 testData[i][4] = bean.getMailingAddress();
73 testData[i][5] = bean.getMarried();
74 testData[i][6] = bean.getNumberOfKids();
75 testData[i][7] = bean.getFavouriteQuote();
76 testData[i][8] = bean.getEmail();
77 testData[i][9] = bean.getLoyaltyPoints();
78 }
79 return testData;
80 }
81
82 private static Object[][] setUpTestDataCustomerStringBeans() {
83 final Object[][] testData = new Object[10][10];
84 for (int i = 0; i < 10; i++) {
85 CustomerStringBean bean = STRING_CUSTOMERS.get(i);
86 testData[i][0] = bean.getCustomerNo();
87 testData[i][1] = bean.getFirstName();
88 testData[i][2] = bean.getLastName();
89 testData[i][3] = bean.getBirthDate();
90 testData[i][4] = bean.getMailingAddress();
91 testData[i][5] = bean.getMarried();
92 testData[i][6] = bean.getNumberOfKids();
93 testData[i][7] = bean.getFavouriteQuote();
94 testData[i][8] = bean.getEmail();
95 testData[i][9] = bean.getLoyaltyPoints();
96 }
97 return testData;
98 }
99
100 @Before
101 public void setUp() {
102 writer = new StringWriter();
103 csvResultSetWriter = new CsvResultSetWriter(writer, PREFS);
104 }
105
106
107
108
109
110 @Test
111 public void testWrite() throws IOException, SQLException {
112 final ResultSet resultSetMock = new ResultSetMock(TEST_DATA_STRINGS, HEADER);
113 csvResultSetWriter.write(resultSetMock);
114 csvResultSetWriter.flush();
115 assertEquals(CSV_FILE, writer.toString());
116 }
117
118
119
120
121
122
123 @Test
124 public void testWriteWithProcessors() throws SQLException, IOException {
125 final ResultSet resultSetMock = new ResultSetMock(TEST_DATA_VARIOUS_TYPES, HEADER);
126 csvResultSetWriter.write(resultSetMock, WRITE_PROCESSORS);
127 csvResultSetWriter.flush();
128 assertEquals(CSV_FILE, writer.toString());
129 }
130
131
132
133
134
135
136 @SuppressWarnings("resource")
137 @Test(expected = NullPointerException.class)
138 public void testConstructorWithNullWriter() {
139 new CsvResultSetWriter(null, PREFS);
140 }
141
142
143
144
145 @SuppressWarnings("resource")
146 @Test(expected = NullPointerException.class)
147 public void testConstructorWithNullCsvPreference() {
148 new CsvResultSetWriter(writer, null);
149 }
150
151
152
153
154
155
156 @Test(expected = NullPointerException.class)
157 public void testWriteNullResultSet() throws SQLException, IOException {
158 csvResultSetWriter.write(null);
159 }
160
161
162
163
164
165
166 @Test(expected = NullPointerException.class)
167 public void testWriteWithProcessorsNullResultSet() throws SQLException, IOException {
168 csvResultSetWriter.write(null, WRITE_PROCESSORS);
169 }
170
171
172
173
174
175
176 @Test(expected = NullPointerException.class)
177 public void testWriteNullProcessors() throws SQLException, IOException {
178
179 final ResultSet resultSet = new ResultSetMock(TEST_DATA_VARIOUS_TYPES, HEADER);
180 csvResultSetWriter.write(resultSet, null);
181 }
182
183
184
185
186
187
188 @Test(expected = SuperCsvCellProcessorException.class)
189 public void testRowLineNumberCorrectness() throws SQLException, IOException {
190 final int LINE_NUMBER = 5;
191 final int ROW_NUMBER = 4;
192 final Object[][] causesException = {
193 {"1", "Alexander\r\nGraham", date(1945, 6, 13), },
194 {"2", "Bob", date(1919, 2, 25), },
195 {"3", "Alice", "CAUSES EXCEPTION", },
196 {"4", "Bill", date(1973, 7, 10), },
197 {"5", "Miranda", date(1999, 1, 3), },
198 };
199 final String[] headers = {"customerNo", "firstName", "birthDate"};
200 final ResultSet resultSet = new ResultSetMock(causesException, headers);
201 final CellProcessor[] cellProcessors = {null, null, new FmtDate("dd/MM/yyyy")};
202 try {
203 csvResultSetWriter.write(resultSet, cellProcessors);
204 } catch(SuperCsvCellProcessorException e) {
205 final int actualLineNumber = e.getCsvContext().getLineNumber();
206 final int actualRowNumber = e.getCsvContext().getRowNumber();
207 assertEquals("line number not correct", LINE_NUMBER, actualLineNumber);
208 assertEquals("row number not correct", ROW_NUMBER, actualRowNumber);
209 throw e;
210 }
211 }
212 }