This repository was archived by the owner on Jan 22, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 76
This repository was archived by the owner on Jan 22, 2019. It is now read-only.
CSV is written without column separators if first column is null #33
Copy link
Copy link
Closed
Milestone
Description
There seems to be a bug in CsvWriter in the code dealing with the buffer. When the first column is null, the row is output without column separators. See unit tests below. testWrite_NullFirstColumn
fails (all others pass). Expected output is ,42,hello\n
, actual output is 42hello\n
.
Tested against jackson-dataformat-csv v2.3.2.
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import com.google.common.collect.ImmutableMap;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class CsvWriterTest {
@Test
public void testWrite_NoNulls() throws JsonProcessingException {
final CsvSchema.Builder csvSchemaBuilder = new CsvSchema.Builder();
csvSchemaBuilder.addColumn("timestamp", CsvSchema.ColumnType.STRING);
csvSchemaBuilder.addColumn("value", CsvSchema.ColumnType.NUMBER);
csvSchemaBuilder.addColumn("id", CsvSchema.ColumnType.STRING);
final CsvSchema schema = csvSchemaBuilder.build();
final ObjectWriter writer = new CsvMapper().writer().withSchema(schema);
final String string = writer.writeValueAsString(
ImmutableMap.of("timestamp", "2014-03-10T23:32:47+00:00",
"value", 42, "id", "hello"));
assertEquals("\"2014-03-10T23:32:47+00:00\",42,hello\n", string);
}
@Test
public void testWrite_NullFirstColumn() throws JsonProcessingException {
final CsvSchema.Builder csvSchemaBuilder = new CsvSchema.Builder();
csvSchemaBuilder.addColumn("timestamp", CsvSchema.ColumnType.STRING);
csvSchemaBuilder.addColumn("value", CsvSchema.ColumnType.NUMBER);
csvSchemaBuilder.addColumn("id", CsvSchema.ColumnType.STRING);
final CsvSchema schema = csvSchemaBuilder.build();
final ObjectWriter writer = new CsvMapper().writer().withSchema(schema);
final String string = writer.writeValueAsString(
ImmutableMap.of("value", 42, "id", "hello"));
assertEquals(",42,hello\n", string);
}
@Test
public void testWrite_NullSecondColumn() throws JsonProcessingException {
final CsvSchema.Builder csvSchemaBuilder = new CsvSchema.Builder();
csvSchemaBuilder.addColumn("timestamp", CsvSchema.ColumnType.STRING);
csvSchemaBuilder.addColumn("value", CsvSchema.ColumnType.NUMBER);
csvSchemaBuilder.addColumn("id", CsvSchema.ColumnType.STRING);
final CsvSchema schema = csvSchemaBuilder.build();
final ObjectWriter writer = new CsvMapper().writer().withSchema(schema);
final String string = writer.writeValueAsString(
ImmutableMap.of("timestamp", "2014-03-10T23:32:47+00:00",
"id", "hello"));
assertEquals("\"2014-03-10T23:32:47+00:00\",,hello\n", string);
}
@Test
public void testWrite_NullThirdColumn() throws JsonProcessingException {
final CsvSchema.Builder csvSchemaBuilder = new CsvSchema.Builder();
csvSchemaBuilder.addColumn("timestamp", CsvSchema.ColumnType.STRING);
csvSchemaBuilder.addColumn("value", CsvSchema.ColumnType.NUMBER);
csvSchemaBuilder.addColumn("id", CsvSchema.ColumnType.STRING);
final CsvSchema schema = csvSchemaBuilder.build();
final ObjectWriter writer = new CsvMapper().writer().withSchema(schema);
final String string = writer.writeValueAsString(
ImmutableMap.of("timestamp", "2014-03-10T23:32:47+00:00",
"value", 42));
assertEquals("\"2014-03-10T23:32:47+00:00\",42\n", string);
}
}
Metadata
Metadata
Assignees
Labels
No labels