View Javadoc
1   package com.opencsv;
2   /*
3    Copyright 2015 Bytecode Pty Ltd.
4   
5    Licensed under the Apache License, Version 2.0 (the "License");
6    you may not use this file except in compliance with the License.
7    You may obtain a copy of the License at
8   
9    http://www.apache.org/licenses/LICENSE-2.0
10  
11   Unless required by applicable law or agreed to in writing, software
12   distributed under the License is distributed on an "AS IS" BASIS,
13   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   See the License for the specific language governing permissions and
15   limitations under the License.
16   */
17  
18  import org.junit.jupiter.api.Test;
19  
20  import java.io.IOException;
21  import java.sql.*;
22  import java.text.DecimalFormat;
23  import java.text.DecimalFormatSymbols;
24  import java.text.SimpleDateFormat;
25  import java.util.Calendar;
26  import java.util.GregorianCalendar;
27  import java.util.Locale;
28  
29  import static org.junit.jupiter.api.Assertions.assertArrayEquals;
30  import static org.mockito.Mockito.mock;
31  import static org.mockito.Mockito.when;
32  
33  public class ResultSetHelperServiceTest {
34  
35     private static final String BUILDSTRING = "abcdefghijklmnopqrstuvwxyz";
36  
37     @Test
38     public void canPrintColumnNames() throws SQLException {
39  
40        ResultSet resultSet = mock(ResultSet.class);
41  
42        String[] expectedNames = {"name1", "name2", "name3"};
43  
44        ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames);
45  
46        when(resultSet.getMetaData()).thenReturn(metaData);
47  
48        // end expects
49  
50        ResultSetHelperService service = new ResultSetHelperService();
51  
52        String[] columnNames = service.getColumnNames(resultSet);
53        assertArrayEquals(expectedNames, columnNames);
54     }
55  
56     @Test
57     public void getObjectFromResultSet() throws SQLException, IOException {
58        String[] expectedNames = {"object", "Null Object"};
59        String[] realValues = {"foo", null};
60        String[] expectedValues = {"foo", ""};
61        int[] expectedTypes = {Types.JAVA_OBJECT, Types.JAVA_OBJECT};
62  
63        ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
64        ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
65  
66        ResultSetHelperService service = new ResultSetHelperService();
67  
68        String[] columnValues = service.getColumnValues(resultSet);
69        assertArrayEquals(expectedValues, columnValues);
70     }
71  
72     @Test
73     public void getBitFromResultSet() throws SQLException, IOException {
74  
75        String[] expectedNames = {"bit", "Null bit"};
76        String[] realValues = {"1", null};
77        String[] expectedValues = {"1", ""};
78        int[] expectedTypes = {Types.BIT, Types.BIT};
79  
80        ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
81        ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
82  
83        ResultSetHelperService service = new ResultSetHelperService();
84  
85        String[] columnValues = service.getColumnValues(resultSet);
86        assertArrayEquals(expectedValues, columnValues);
87     }
88  
89     @Test
90     public void getBooleanFromResultSet() throws SQLException, IOException {
91        String[] expectedNames = {"true", "false", "TRUE", "FALSE", "Null"};
92        String[] realValues = {"true", "false", "TRUE", "FALSE", null};
93        String[] expectedValues = {"true", "false", "true", "false", ""};
94        int[] expectedTypes = {Types.BOOLEAN, Types.BOOLEAN, Types.BOOLEAN, Types.BOOLEAN, Types.BOOLEAN};
95  
96        ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
97        ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
98  
99        ResultSetHelperService service = new ResultSetHelperService();
100 
101       String[] columnValues = service.getColumnValues(resultSet);
102       assertArrayEquals(expectedValues, columnValues);
103    }
104 
105    @Test
106    public void getBigIntFromResultSet() throws SQLException, IOException {
107       String[] expectedNames = {"BigInt", "Null BigInt"};
108       String[] realValues = {"11772935803167061222", null};
109       String[] expectedValues = {"11772935803167061222", ""};
110       int[] expectedTypes = {Types.BIGINT, Types.BIGINT};
111 
112       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
113       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
114 
115       ResultSetHelperService service = new ResultSetHelperService();
116 
117       String[] columnValues = service.getColumnValues(resultSet);
118       assertArrayEquals(expectedValues, columnValues);
119    }
120 
121    @Test
122    public void getBigDecimalFromResultSet() throws SQLException, IOException {
123 
124       String[] expectedNames = {"Decimal", "double", "float", "real", "numeric", "Null"};
125       String[] realValues = {"1.1", "2.2", "3.3", "4.4", "5.5", null};
126       String[] expectedValues = {"1.1", "2.2", "3.3", "4.4", "5.5", ""};
127       int[] expectedTypes = {Types.DECIMAL, Types.DOUBLE, Types.FLOAT, Types.REAL, Types.NUMERIC, Types.DECIMAL};
128 
129       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
130       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
131 
132       ResultSetHelperService service = new ResultSetHelperService();
133 
134       String[] columnValues = service.getColumnValues(resultSet);
135       assertArrayEquals(expectedValues, columnValues);
136    }
137 
138    @Test
139    public void issue121ConvertingNaNForDoubleOrFloat() throws SQLException, IOException {
140       String[] expectedNames = {"Decimal", "double", "float", "real", "numeric", "Null"};
141       String[] realValues = {"1.1", Double.toString(Double.NaN), Float.toString(Float.NaN), "4.4", "5.5", null};
142       String[] expectedValues = {"1.1", "NaN", "NaN", "4.4", "5.5", ""};
143       int[] expectedTypes = {Types.DECIMAL, Types.DOUBLE, Types.FLOAT, Types.REAL, Types.NUMERIC, Types.DECIMAL};
144 
145       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
146       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
147 
148       ResultSetHelperService service = new ResultSetHelperService();
149 
150       String[] columnValues = service.getColumnValues(resultSet);
151       assertArrayEquals(expectedValues, columnValues);
152    }
153 
154    @Test
155    public void issue121ConvertingPositiveInfinityForDoubleOrFloat() throws SQLException, IOException {
156       String[] expectedNames = {"Decimal", "double", "float", "real", "numeric", "Null"};
157       String[] realValues = {"1.1", Double.toString(Double.POSITIVE_INFINITY), Float.toString(Float.POSITIVE_INFINITY), "4.4", "5.5", null};
158       String[] expectedValues = {"1.1", "Infinity", "Infinity", "4.4", "5.5", ""};
159       int[] expectedTypes = {Types.DECIMAL, Types.DOUBLE, Types.FLOAT, Types.REAL, Types.NUMERIC, Types.DECIMAL};
160 
161       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
162       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
163 
164       ResultSetHelperService service = new ResultSetHelperService();
165 
166       String[] columnValues = service.getColumnValues(resultSet);
167       assertArrayEquals(expectedValues, columnValues);
168    }
169 
170    @Test
171    public void issue121ConvertingNegativeInfinityForDoubleOrFloat() throws SQLException, IOException {
172       String[] expectedNames = {"Decimal", "double", "float", "real", "numeric", "Null"};
173       String[] realValues = {"1.1", Double.toString(Double.NEGATIVE_INFINITY), Float.toString(Float.NEGATIVE_INFINITY), "4.4", "5.5", null};
174       String[] expectedValues = {"1.1", "-Infinity", "-Infinity", "4.4", "5.5", ""};
175       int[] expectedTypes = {Types.DECIMAL, Types.DOUBLE, Types.FLOAT, Types.REAL, Types.NUMERIC, Types.DECIMAL};
176 
177       System.out.println(realValues[1]);
178       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
179       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
180 
181       ResultSetHelperService service = new ResultSetHelperService();
182 
183       String[] columnValues = service.getColumnValues(resultSet);
184       assertArrayEquals(expectedValues, columnValues);
185    }
186 
187    @Test
188    public void getIntegerFromResultSet() throws SQLException, IOException {
189       String[] expectedNames = {"Integer", "tinyint", "smallint", "Null"};
190       String[] realValues = {"1", "2", "3", null};
191       String[] expectedValues = {"1", "2", "3", ""};
192       int[] expectedTypes = {Types.INTEGER, Types.TINYINT, Types.SMALLINT, Types.INTEGER};
193 
194       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
195       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
196 
197       ResultSetHelperService service = new ResultSetHelperService();
198 
199       String[] columnValues = service.getColumnValues(resultSet);
200       assertArrayEquals(expectedValues, columnValues);
201    }
202 
203    @Test
204    public void getCharFromResultSet() throws SQLException, IOException {
205 
206       String[] expectedNames = {"longvarchar", "varchar", "char", "Null"};
207       String[] realValues = {"a", "b", "c", null};
208       String[] expectedValues = {"a", "b", "c", ""};
209       int[] expectedTypes = {Types.LONGVARCHAR, Types.VARCHAR, Types.CHAR, Types.CHAR};
210 
211       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
212       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
213 
214       ResultSetHelperService service = new ResultSetHelperService();
215 
216       String[] columnValues = service.getColumnValues(resultSet);
217       assertArrayEquals(expectedValues, columnValues);
218    }
219 
220    @Test
221    public void getCharHandlesNulls() throws SQLException, IOException {
222 
223       String[] expectedNames = {"longvarchar", "varchar", "char", "Null"};
224       String[] realValues = {"a", "b", "c", null};
225       String[] expectedValues = {"a", "b", "c", ""};
226       int[] expectedTypes = {Types.LONGVARCHAR, Types.VARCHAR, Types.CHAR, Types.CHAR};
227 
228       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
229       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
230 
231       ResultSetHelperService service = new ResultSetHelperService();
232 
233       String[] columnValues = service.getColumnValues(resultSet, true);
234       assertArrayEquals(expectedValues, columnValues);
235    }
236 
237    @Test
238    public void getNCharFromResultSet() throws SQLException, IOException {
239 
240       String[] expectedNames = {"longvarchar", "varchar", "char", "Null"};
241       String[] realValues = {"a", "b", "c", null};
242       String[] expectedValues = {"a", "b", "c", ""};
243       int[] expectedTypes = {Types.LONGNVARCHAR, Types.NVARCHAR, Types.NCHAR, Types.NCHAR};
244 
245       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
246       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
247 
248       ResultSetHelperService service = new ResultSetHelperService();
249 
250       String[] columnValues = service.getColumnValues(resultSet);
251       assertArrayEquals(expectedValues, columnValues);
252    }
253 
254    @Test
255    public void getNCharHandlesNulls() throws SQLException, IOException {
256 
257       String[] expectedNames = {"longvarchar", "varchar", "char", "Null"};
258       String[] realValues = {"a", "b", "c", null};
259       String[] expectedValues = {"a", "b", "c", ""};
260       int[] expectedTypes = {Types.LONGNVARCHAR, Types.NVARCHAR, Types.NCHAR, Types.NCHAR};
261 
262       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
263       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
264 
265       ResultSetHelperService service = new ResultSetHelperService();
266 
267       String[] columnValues = service.getColumnValues(resultSet, true);
268       assertArrayEquals(expectedValues, columnValues);
269    }
270 
271    @Test
272    public void getUnsupportedFromResultSet() throws SQLException, IOException {
273 
274       String[] expectedNames = {"Array", "Null"};
275       String[] realValues = {"1", null};
276       String[] expectedValues = {"", ""};
277       int[] expectedTypes = {Types.ARRAY, Types.ARRAY};
278 
279       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
280       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
281 
282       ResultSetHelperService service = new ResultSetHelperService();
283 
284       String[] columnValues = service.getColumnValues(resultSet);
285       assertArrayEquals(expectedValues, columnValues);
286    }
287 
288    @Test
289    public void getDateFromResultSet() throws SQLException, IOException {
290 
291       Date date = new Date(new GregorianCalendar(2009, Calendar.DECEMBER, 15).getTimeInMillis());
292       long dateInMilliSeconds = date.getTime();
293       SimpleDateFormat dateFormat = new SimpleDateFormat(ResultSetHelperService.DEFAULT_DATE_FORMAT);
294 
295       String[] expectedNames = {"Date", "Null"};
296       String[] realValues = {Long.toString(dateInMilliSeconds), null};
297       String[] expectedValues = {dateFormat.format(date), ""};
298       int[] expectedTypes = {Types.DATE, Types.DATE};
299 
300       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
301       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
302 
303       ResultSetHelperService service = new ResultSetHelperService();
304 
305       String[] columnValues = service.getColumnValues(resultSet);
306       assertArrayEquals(expectedValues, columnValues);
307    }
308 
309    @Test
310    public void getDateFromResultSetUsingCustomFormat() throws SQLException, IOException {
311 
312       String customDateFormat = "mm/dd/yy";
313       Date date = new Date(new GregorianCalendar(2009, Calendar.DECEMBER, 15).getTimeInMillis());
314       long dateInMilliSeconds = date.getTime();
315       SimpleDateFormat dateFormat = new SimpleDateFormat(customDateFormat);
316 
317       String[] expectedNames = {"Date", "Null"};
318       String[] realValues = {Long.toString(dateInMilliSeconds), null};
319       String[] expectedValues = {dateFormat.format(date), ""};
320       int[] expectedTypes = {Types.DATE, Types.DATE};
321 
322       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
323       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
324 
325       ResultSetHelperService service = new ResultSetHelperService();
326 
327       String[] columnValues = service.getColumnValues(resultSet, false, customDateFormat, null);
328       assertArrayEquals(expectedValues, columnValues);
329    }
330 
331    @Test
332    public void setDateFormat() throws SQLException, IOException {
333 
334       String customDateFormat = "mm/dd/yy";
335       Date date = new Date(new GregorianCalendar(2009, Calendar.DECEMBER, 15).getTimeInMillis());
336       long dateInMilliSeconds = date.getTime();
337       SimpleDateFormat dateFormat = new SimpleDateFormat(customDateFormat);
338 
339       String[] expectedNames = {"Date", "Null"};
340       String[] realValues = {Long.toString(dateInMilliSeconds), null};
341       String[] expectedValues = {dateFormat.format(date), ""};
342       int[] expectedTypes = {Types.DATE, Types.DATE};
343 
344       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
345       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
346 
347       ResultSetHelperService service = new ResultSetHelperService();
348       service.setDateFormat(customDateFormat);
349 
350       String[] columnValues = service.getColumnValues(resultSet, false);
351       assertArrayEquals(expectedValues, columnValues);
352    }
353 
354    @Test
355    public void getTimeFromResultSet() throws SQLException, IOException {
356 
357 
358       Time time = Time.valueOf("12:00:00");
359       long dateInMilliSeconds = time.getTime();
360 
361       String[] expectedNames = {"Time", "Null"};
362       String[] realValues = {Long.toString(dateInMilliSeconds), null};
363       String[] expectedValues = {time.toString(), ""};
364       int[] expectedTypes = {Types.TIME, Types.TIME};
365 
366       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
367       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
368 
369       ResultSetHelperService service = new ResultSetHelperService();
370 
371       String[] columnValues = service.getColumnValues(resultSet);
372       assertArrayEquals(expectedValues, columnValues);
373    }
374 
375    @Test
376    public void getTimestampFromResultSet() throws SQLException, IOException {
377       Timestamp date = new Timestamp(new GregorianCalendar(2009, Calendar.DECEMBER, 15, 12, 0, 0).getTimeInMillis());
378       long dateInMilliSeconds = date.getTime();
379       SimpleDateFormat timeFormat = new SimpleDateFormat(ResultSetHelperService.DEFAULT_TIMESTAMP_FORMAT);
380 
381       String[] expectedNames = {"Timestamp", "Null"};
382       String[] realValues = {Long.toString(dateInMilliSeconds), null};
383       String[] expectedValues = {timeFormat.format(date), ""};
384       int[] expectedTypes = {Types.TIMESTAMP, Types.TIMESTAMP};
385 
386       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
387       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
388 
389       ResultSetHelperService service = new ResultSetHelperService();
390 
391       String[] columnValues = service.getColumnValues(resultSet);
392       assertArrayEquals(expectedValues, columnValues);
393    }
394 
395    @Test
396    public void getTimestampFromResultSetWithCustomFormat() throws SQLException, IOException {
397       Timestamp date = new Timestamp(new GregorianCalendar(2009, Calendar.DECEMBER, 15, 12, 0, 0).getTimeInMillis());
398       long dateInMilliSeconds = date.getTime();
399       String customFormat = "mm/dd/yy HH:mm:ss";
400       SimpleDateFormat timeFormat = new SimpleDateFormat(customFormat);
401 
402       String[] expectedNames = {"Timestamp", "Null"};
403       String[] realValues = {Long.toString(dateInMilliSeconds), null};
404       String[] expectedValues = {timeFormat.format(date), ""};
405       int[] expectedTypes = {Types.TIMESTAMP, Types.TIMESTAMP};
406 
407       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
408       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
409 
410       ResultSetHelperService service = new ResultSetHelperService();
411 
412       String[] columnValues = service.getColumnValues(resultSet, false, null, customFormat);
413       assertArrayEquals(expectedValues, columnValues);
414    }
415 
416    @Test
417    public void setDateTimeFormat() throws SQLException, IOException {
418       Timestamp date = new Timestamp(new GregorianCalendar(2009, Calendar.DECEMBER, 15, 12, 0, 0).getTimeInMillis());
419       long dateInMilliSeconds = date.getTime();
420       String customFormat = "mm/dd/yy HH:mm:ss";
421       SimpleDateFormat timeFormat = new SimpleDateFormat(customFormat);
422 
423       String[] expectedNames = {"Timestamp", "Null"};
424       String[] realValues = {Long.toString(dateInMilliSeconds), null};
425       String[] expectedValues = {timeFormat.format(date), ""};
426       int[] expectedTypes = {Types.TIMESTAMP, Types.TIMESTAMP};
427 
428       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
429       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
430 
431       ResultSetHelperService service = new ResultSetHelperService();
432       service.setDateTimeFormat(customFormat);
433 
434       String[] columnValues = service.getColumnValues(resultSet, false);
435       assertArrayEquals(expectedValues, columnValues);
436    }
437 
438    @Test
439    public void getClobFromResultSet() throws SQLException, IOException {
440       String clobString = buildClobString(20);
441 
442       String[] expectedNames = {"Clob", "Null"};
443       String[] realValues = {clobString, null};
444       String[] expectedValues = {clobString, ""};
445       int[] expectedTypes = {Types.CLOB, Types.CLOB};
446 
447       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
448       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
449 
450       ResultSetHelperService service = new ResultSetHelperService();
451 
452       String[] columnValues = service.getColumnValues(resultSet);
453       assertArrayEquals(expectedValues, columnValues);
454    }
455 
456    @Test
457    public void getEmptyClobFromResultSet() throws SQLException, IOException {
458       String clobString = buildClobString(0);
459 
460       String[] expectedNames = {"Clob", "Null"};
461       String[] realValues = {clobString, null};
462       String[] expectedValues = {clobString, ""};
463       int[] expectedTypes = {Types.CLOB, Types.CLOB};
464 
465       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
466       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
467 
468       ResultSetHelperService service = new ResultSetHelperService();
469 
470       String[] columnValues = service.getColumnValues(resultSet);
471       assertArrayEquals(expectedValues, columnValues);
472    }
473 
474    @Test
475    public void getLargeClobFromResultSet() throws SQLException, IOException {
476       String clobString = buildClobString(ResultSetHelperService.CLOBBUFFERSIZE + 1);
477 
478       String[] expectedNames = {"Clob", "Null"};
479       String[] realValues = {clobString, null};
480       String[] expectedValues = {clobString, ""};
481       int[] expectedTypes = {Types.CLOB, Types.CLOB};
482 
483       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
484       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
485 
486       ResultSetHelperService service = new ResultSetHelperService();
487 
488       String[] columnValues = service.getColumnValues(resultSet);
489       assertArrayEquals(expectedValues, columnValues);
490    }
491 
492    @Test
493    public void getNClobFromResultSet() throws SQLException, IOException {
494       String clobString = buildClobString(20);
495 
496       String[] expectedNames = {"Clob", "Null"};
497       String[] realValues = {clobString, null};
498       String[] expectedValues = {clobString, ""};
499       int[] expectedTypes = {Types.NCLOB, Types.NCLOB};
500 
501       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
502       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
503 
504       ResultSetHelperService service = new ResultSetHelperService();
505 
506       String[] columnValues = service.getColumnValues(resultSet);
507       assertArrayEquals(expectedValues, columnValues);
508    }
509 
510    @Test
511    public void getEmptyNClobFromResultSet() throws SQLException, IOException {
512       String clobString = buildClobString(0);
513 
514       String[] expectedNames = {"Clob", "Null"};
515       String[] realValues = {clobString, null};
516       String[] expectedValues = {clobString, ""};
517       int[] expectedTypes = {Types.NCLOB, Types.NCLOB};
518 
519       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
520       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
521 
522       ResultSetHelperService service = new ResultSetHelperService();
523 
524       String[] columnValues = service.getColumnValues(resultSet);
525       assertArrayEquals(expectedValues, columnValues);
526    }
527 
528    @Test
529    public void getLargeNClobFromResultSet() throws SQLException, IOException {
530       String clobString = buildClobString(ResultSetHelperService.CLOBBUFFERSIZE + 1);
531 
532       String[] expectedNames = {"Clob", "Null"};
533       String[] realValues = {clobString, null};
534       String[] expectedValues = {clobString, ""};
535       int[] expectedTypes = {Types.NCLOB, Types.NCLOB};
536 
537       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
538       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
539 
540       ResultSetHelperService service = new ResultSetHelperService();
541 
542       String[] columnValues = service.getColumnValues(resultSet);
543       assertArrayEquals(expectedValues, columnValues);
544    }
545 
546    private String buildClobString(int clobsize) {
547       int iterations = clobsize / BUILDSTRING.length();
548       int substrsize = clobsize % BUILDSTRING.length();
549       StringBuilder sb = new StringBuilder(clobsize);
550 
551       for (int i = 0; i < iterations; i++) {
552          sb.append(BUILDSTRING);
553       }
554 
555       if (substrsize > 0) {
556          sb.append(BUILDSTRING, 0, substrsize);
557       }
558 
559       return sb.toString();
560    }
561 
562    @Test
563    public void formatNumbersIntPrimitives() throws SQLException, IOException {
564       String[] expectedNames = {"Integer", "tinyint", "smallint", "Null"};
565       String[] realValues = {"1", "2", "3", null};
566       String[] expectedValues = {"001", "002", "003", ""};
567       int[] expectedTypes = {Types.INTEGER, Types.TINYINT, Types.SMALLINT, Types.INTEGER};
568 
569       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
570       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
571 
572       ResultSetHelperService service = new ResultSetHelperService();
573       service.setIntegerFormat(new DecimalFormat("000"));
574       service.setFloatingPointFormat(new DecimalFormat("0.00", new DecimalFormatSymbols(Locale.ENGLISH)));
575 
576       String[] columnValues = service.getColumnValues(resultSet);
577       assertArrayEquals(expectedValues, columnValues);
578    }
579 
580    @Test
581    public void formatNumbersFloatPrimitives() throws SQLException, IOException {
582       String[] expectedNames = {"double", "float"};
583       String[] realValues = {"2.2", "3.3"};
584       String[] expectedValues = {"2.20", "3.30"};
585       int[] expectedTypes = {Types.DOUBLE, Types.FLOAT};
586 
587       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
588       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
589 
590       ResultSetHelperService service = new ResultSetHelperService();
591       service.setIntegerFormat(new DecimalFormat("000"));
592       service.setFloatingPointFormat(new DecimalFormat("0.00", new DecimalFormatSymbols(Locale.ENGLISH)));
593 
594       String[] columnValues = service.getColumnValues(resultSet);
595       assertArrayEquals(expectedValues, columnValues);
596    }
597 
598    @Test
599    public void formatNumbersObjects() throws SQLException, IOException {
600       String[] expectedNames = {"Decimal", "real", "numeric", "Null"};
601       String[] realValues = {"1.1", "4.4", "5.5", null};
602       String[] expectedValues = {"1.10", "4.40", "5.50", ""};
603       int[] expectedTypes = {Types.DECIMAL, Types.REAL, Types.NUMERIC, Types.DECIMAL};
604 
605       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
606       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
607 
608       ResultSetHelperService service = new ResultSetHelperService();
609       service.setIntegerFormat(new DecimalFormat("000"));
610       service.setFloatingPointFormat(new DecimalFormat("0.00", new DecimalFormatSymbols(Locale.ENGLISH)));
611 
612       String[] columnValues = service.getColumnValues(resultSet);
613       assertArrayEquals(expectedValues, columnValues);
614    }
615 
616    @Test
617    public void formatBigInt() throws SQLException, IOException {
618       String[] expectedNames = {"BigInt", "Null BigInt"};
619       String[] realValues = {"11772935803167061222", null};
620       String[] expectedValues = {"1.177E19", ""};
621       int[] expectedTypes = {Types.BIGINT, Types.BIGINT};
622 
623       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
624       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
625 
626       ResultSetHelperService service = new ResultSetHelperService();
627       service.setIntegerFormat(new DecimalFormat("0.###E0", new DecimalFormatSymbols(Locale.ENGLISH)));
628 
629       String[] columnValues = service.getColumnValues(resultSet);
630       assertArrayEquals(expectedValues, columnValues);
631    }
632 
633    @Test
634    public void customNullDefault() throws SQLException, IOException {
635       final String customDefaultValue = "\\N";
636 
637       String[] expectedNames = {"Null Column", "Not Null Column"};
638       String[] realValues = {null, "abcdef"};
639       String[] expectedValues = {customDefaultValue, "abcdef"};
640       int[] expectedTypes = {Types.VARCHAR, Types.VARCHAR};
641 
642       ResultSetMetaData metaData = MockResultSetMetaDataBuilder.buildMetaData(expectedNames, expectedTypes);
643       ResultSet resultSet = MockResultSetBuilder.buildResultSet(metaData, realValues, expectedTypes);
644 
645       ResultSetHelperService service = new ResultSetHelperService();
646       service.setNullDefault(customDefaultValue);
647 
648       String[] columnValues = service.getColumnValues(resultSet);
649       assertArrayEquals(expectedValues, columnValues);
650    }
651 
652 }