/** * many separators in a cell. * @throws Exception if failed */ @Test public void many_separators() throws Exception { StringBuilder buf = new StringBuilder(); final int separators = 10000; for (int i = 0; i < separators; i++) { buf.append('a'); buf.append(','); } CsvParser parser = create(buf.toString()); assertThat(parser.next(), is(true)); for (int i = 0; i < separators; i++) { assertFill(parser, "a"); } assertFill(parser, null); parser.endRecord(); assertThat(parser.next(), is(false)); }
private CsvParser create(String content) { CsvConfiguration conf = createConfiguration(); return new CsvParser( new ByteArrayInputStream(content.getBytes(conf.getCharset())), testName.getMethodName(), conf); }
CsvParser parser = create( "0,1,50,-1,-50," + "0.5,-0.5,3.1415,-3.1415, 0,0 , ,"); assertThat(option.get(), is(decimal("0"))); assertThat(option.get(), is(decimal("1"))); assertThat(option.get(), is(decimal("50"))); assertThat(option.get(), is(decimal("-1"))); assertThat(option.get(), is(decimal("-50"))); assertThat(option.get(), is(decimal("0.5"))); assertThat(option.get(), is(decimal("-0.5"))); assertThat(option.get(), is(decimal("3.1415"))); assertThat(option.get(), is(decimal("-3.1415"))); assertThat(option.get(), is(decimal("0"))); assertThat(option.get(), is(decimal("0")));
/** * header is declared but file is empty. * @throws Exception if failed */ @Test public void empty_with_header() throws Exception { headers = Arrays.asList("key", "value"); CsvParser parser = create(""); assertThat(parser.next(), is(false)); }
/** * only header. * @throws Exception if failed */ @Test public void only_header() throws Exception { headers = Arrays.asList("key", "value"); CsvParser parser = create("key,value\r\n"); assertThat(parser.next(), is(false)); }
/** * record is too short. * @throws Exception if failed */ @Test public void too_short_record() throws Exception { CsvParser parser = create("a,b,c"); assertThat(parser.next(), is(true)); try { assertFill(parser, "a"); assertFill(parser, "b"); assertFill(parser, "c"); parser.fill(new StringOption()); parser.endRecord(); fail(); } catch (CsvFormatException e) { assertThat(e.getStatus().getReason(), is(Reason.TOO_SHORT_RECORD)); } assertThat(parser.next(), is(false)); }
/** * many characters in a cell. * @throws Exception if failed */ @Test public void many_characters() throws Exception { StringBuilder buf = new StringBuilder(); final int characters = 100000; for (int i = 0; i < characters; i++) { buf.append('a'); } CsvParser parser = create(buf.toString()); assertThat(parser.next(), is(true)); StringOption option = new StringOption(); parser.fill(option); assertThat(option.getAsString().length(), is(characters)); parser.endRecord(); assertThat(parser.next(), is(false)); }
/** * too many characters in record. * @throws Exception if failed */ @Test public void too_many_characters() throws Exception { InputStream infinite = new InputStream() { @Override public int read() throws IOException { return 'a'; } }; CsvConfiguration conf = createConfiguration(); try (CsvParser parser = new CsvParser(infinite, "testing", conf)) { assertThat(parser.next(), is(true)); fail(); } catch (IOException e) { // ok. } }
/** * record is too long. * @throws Exception if failed */ @Test public void too_long_record() throws Exception { CsvParser parser = create("a,b,c"); assertThat(parser.next(), is(true)); try { assertFill(parser, "a"); assertFill(parser, "b"); parser.endRecord(); fail(); } catch (CsvFormatException e) { assertThat(e.getStatus().getReason(), is(Reason.TOO_LONG_RECORD)); } assertThat(parser.next(), is(false)); }
/** * test for invalid bytes. * @throws Exception if failed */ @Test public void invalid_byte() throws Exception { CsvParser parser = create(String.valueOf(Byte.MAX_VALUE + 1)); assertThat(parser.next(), is(true)); try { parser.fill(new ByteOption()); fail(); } catch (CsvFormatException e) { assertThat(e.getStatus().getReason(), is(Reason.INVALID_CELL_FORMAT)); } }
/** * Simple stress test for {@link DecimalOption} type. * @throws Exception if failed */ @Test public void stress_decimal() throws Exception { int count = 5000000; CsvConfiguration conf = createConfiguration(); try (RCReader reader = new RCReader("3.141592\r\n".getBytes(conf.getCharset()), count); CsvParser parser = new CsvParser(reader, "testing", conf)) { int rows = 0; DecimalOption date = new DecimalOption(); while (parser.next()) { parser.fill(date); parser.endRecord(); if (rows == 0) { assertThat(date, is(new DecimalOption(new BigDecimal("3.141592")))); } rows++; } assertThat(rows, is(count)); } }
CsvParser parser = create( ",\"\"\n" + ",,\n" + assertThat(parser.getCurrentLineNumber(), is(1L)); assertThat(parser.getCurrentRecordNumber(), is(1L)); assertFill(parser, null); assertFill(parser, null); parser.endRecord(); assertThat(parser.getCurrentLineNumber(), is(2L)); assertThat(parser.getCurrentRecordNumber(), is(2L)); assertFill(parser, null); assertFill(parser, null); assertFill(parser, null); parser.endRecord(); assertThat(parser.getCurrentLineNumber(), is(3L)); assertThat(parser.getCurrentRecordNumber(), is(3L)); assertFill(parser, null); assertFill(parser, null); parser.endRecord(); assertThat(parser.getCurrentLineNumber(), is(4L)); assertThat(parser.getCurrentRecordNumber(), is(4L)); assertFill(parser, null); assertFill(parser, null); parser.endRecord();
/** * test for invalid double values. * @throws Exception if failed */ @Test public void invalid_double() throws Exception { CsvParser parser = create(String.valueOf("?")); assertThat(parser.next(), is(true)); try { parser.fill(new DoubleOption()); fail(); } catch (CsvFormatException e) { assertThat(e.getStatus().getReason(), is(Reason.INVALID_CELL_FORMAT)); } }
/** * Simple stress test for {@link Date} type. * @throws Exception if failed */ @Test public void stress_date() throws Exception { int count = 5000000; CsvConfiguration conf = createConfiguration(); try (RCReader reader = new RCReader("1999-12-31\r\n".getBytes(conf.getCharset()), count); CsvParser parser = new CsvParser(reader, "testing", conf)) { int rows = 0; DateOption date = new DateOption(); while (parser.next()) { parser.fill(date); parser.endRecord(); if (rows == 0) { assertThat(date, is(new DateOption(new Date(1999, 12, 31)))); } rows++; } parser.close(); assertThat(rows, is(count)); } }
CsvParser parser = create( "\"\"\n" + ",\n" + assertThat(parser.getCurrentLineNumber(), is(1L)); assertThat(parser.getCurrentRecordNumber(), is(1L)); assertFill(parser, null); parser.endRecord(); assertThat(parser.getCurrentLineNumber(), is(2L)); assertThat(parser.getCurrentRecordNumber(), is(2L)); assertFill(parser, null); assertFill(parser, null); parser.endRecord(); assertThat(parser.getCurrentLineNumber(), is(3L)); assertThat(parser.getCurrentRecordNumber(), is(3L)); assertFill(parser, null); parser.endRecord(); assertThat(parser.getCurrentLineNumber(), is(4L)); assertThat(parser.getCurrentRecordNumber(), is(4L)); assertFill(parser, null); parser.endRecord(); assertThat(parser.getCurrentLineNumber(), is(5L)); assertThat(parser.getCurrentRecordNumber(), is(5L)); assertFill(parser, "x"); parser.endRecord();
/** * test for invalid date values. * @throws Exception if failed */ @Test public void invalid_date() throws Exception { CsvParser parser = create(String.valueOf("?")); assertThat(parser.next(), is(true)); try { parser.fill(new DateOption()); fail(); } catch (CsvFormatException e) { assertThat(e.getStatus().getReason(), is(Reason.INVALID_CELL_FORMAT)); } }
/** * Simple stress test for {@link DateTime} type. * @throws Exception if failed */ @Test public void stress_datetime() throws Exception { int count = 5000000; CsvConfiguration conf = createConfiguration(); try (RCReader reader = new RCReader("1999-12-31 01:23:45\r\n".getBytes(conf.getCharset()), count); CsvParser parser = new CsvParser(reader, "testing", conf)) { int rows = 0; DateTimeOption date = new DateTimeOption(); while (parser.next()) { parser.fill(date); parser.endRecord(); if (rows == 0) { assertThat(date, is(new DateTimeOption(new DateTime(1999, 12, 31, 1, 23, 45)))); } rows++; } parser.close(); assertThat(rows, is(count)); } }
CsvParser parser = create( "\"a\"\"\"\n" + "\"a\",\n" + assertThat(parser.getCurrentLineNumber(), is(1L)); assertThat(parser.getCurrentRecordNumber(), is(1L)); assertFill(parser, "a\""); parser.endRecord(); assertThat(parser.getCurrentLineNumber(), is(2L)); assertThat(parser.getCurrentRecordNumber(), is(2L)); assertFill(parser, "a"); assertFill(parser, null); parser.endRecord(); assertThat(parser.getCurrentLineNumber(), is(3L)); assertThat(parser.getCurrentRecordNumber(), is(3L)); assertFill(parser, "a"); parser.endRecord(); assertThat(parser.getCurrentLineNumber(), is(4L)); assertThat(parser.getCurrentRecordNumber(), is(4L)); assertFill(parser, "a"); parser.endRecord(); assertThat(parser.getCurrentLineNumber(), is(5L)); assertThat(parser.getCurrentRecordNumber(), is(5L)); assertFill(parser, "ax"); parser.endRecord();
/** * test for invalid int values. * @throws Exception if failed */ @Test public void invalid_int() throws Exception { CsvParser parser = create(String.valueOf((long) Integer.MAX_VALUE + 1)); assertThat(parser.next(), is(true)); try { parser.fill(new IntOption()); fail(); } catch (CsvFormatException e) { assertThat(e.getStatus().getReason(), is(Reason.INVALID_CELL_FORMAT)); } }
CsvParser parser = create( "x\"\n" + "x,\n" + assertThat(parser.getCurrentLineNumber(), is(1L)); assertThat(parser.getCurrentRecordNumber(), is(1L)); assertFill(parser, "x\""); parser.endRecord(); assertThat(parser.getCurrentLineNumber(), is(2L)); assertThat(parser.getCurrentRecordNumber(), is(2L)); assertFill(parser, "x"); assertFill(parser, null); parser.endRecord(); assertThat(parser.getCurrentLineNumber(), is(3L)); assertThat(parser.getCurrentRecordNumber(), is(3L)); assertFill(parser, "x"); parser.endRecord(); assertThat(parser.getCurrentLineNumber(), is(4L)); assertThat(parser.getCurrentRecordNumber(), is(4L)); assertFill(parser, "x"); parser.endRecord(); assertThat(parser.getCurrentLineNumber(), is(5L)); assertThat(parser.getCurrentRecordNumber(), is(5L)); assertFill(parser, "xy"); parser.endRecord();