diff --git a/src/main/java/com/fasterxml/jackson/dataformat/csv/impl/CsvDecoder.java b/src/main/java/com/fasterxml/jackson/dataformat/csv/impl/CsvDecoder.java index 5c3ac02..f6fcd36 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/csv/impl/CsvDecoder.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/csv/impl/CsvDecoder.java @@ -925,7 +925,7 @@ protected final int _skipLeadingSpace() throws IOException } } char ch = _inputBuffer[_inputPtr++]; - if (ch > ' ') { + if (ch > ' ' || ch == _separatorChar) { return ch; } switch (ch) { diff --git a/src/test/java/com/fasterxml/jackson/dataformat/csv/deser/ParserTrimSpacesTest.java b/src/test/java/com/fasterxml/jackson/dataformat/csv/deser/ParserTrimSpacesTest.java index 89e31db..9b0828a 100644 --- a/src/test/java/com/fasterxml/jackson/dataformat/csv/deser/ParserTrimSpacesTest.java +++ b/src/test/java/com/fasterxml/jackson/dataformat/csv/deser/ParserTrimSpacesTest.java @@ -92,4 +92,37 @@ public void testTrimming() throws Exception assertFalse(it.hasNext()); it.close(); } + + public void testTrimmingTabSeparated() throws Exception + { + CsvMapper mapper = mapperForCsv(); + mapper.enable(CsvParser.Feature.TRIM_SPACES); + CsvSchema schema = mapper.schemaFor(Entry.class).withColumnSeparator('\t'); + MappingIterator it = mapper.readerFor(Entry.class).with(schema). + readValues( + "a\t\t c\n 1\t2\t\" 3\" \n\"ab\" \t\"c \t\"\t \n" + ); + Entry entry; + + assertTrue(it.hasNext()); + assertNotNull(entry = it.nextValue()); + assertEquals("a", entry.a); + assertEquals("", entry.b); + assertEquals("c", entry.c); + + assertTrue(it.hasNext()); + assertNotNull(entry = it.nextValue()); + assertEquals("1", entry.a); + assertEquals("2", entry.b); + assertEquals(" 3", entry.c); // note: space within quotes is preserved + + assertTrue(it.hasNext()); + assertNotNull(entry = it.nextValue()); + assertEquals("ab", entry.a); + assertEquals("c \t", entry.b); + assertEquals("", entry.c); + + assertFalse(it.hasNext()); + it.close(); + } }