diff --git a/csv/src/test/java/com/fasterxml/jackson/dataformat/csv/deser/MissingColumnsTest.java b/csv/src/test/java/com/fasterxml/jackson/dataformat/csv/deser/MissingColumnsTest.java index 7342788e..52ba6635 100644 --- a/csv/src/test/java/com/fasterxml/jackson/dataformat/csv/deser/MissingColumnsTest.java +++ b/csv/src/test/java/com/fasterxml/jackson/dataformat/csv/deser/MissingColumnsTest.java @@ -20,21 +20,21 @@ static class ABC { public String b = "b"; public String c = "c"; } - + /* /********************************************************************** /* Test methods /********************************************************************** */ - final CsvMapper MAPPER = mapperForCsv(); + private final CsvMapper MAPPER = mapperForCsv(); - final CsvSchema SCHEMA = MAPPER.schemaFor(ABC.class); + private final CsvSchema SCHEMA_ABC = MAPPER.schemaFor(ABC.class); // by default, just... ignore public void testDefaultMissingHandling() throws Exception { - ObjectReader r = MAPPER.readerFor(ABC.class).with(SCHEMA); + ObjectReader r = MAPPER.readerFor(ABC.class).with(SCHEMA_ABC); final ABC DEFAULT = new ABC(); ABC result = r.readValue("first,second,third\n"); @@ -65,7 +65,7 @@ public void testDefaultMissingHandling() throws Exception public void testInjectMissingAsNulls() throws Exception { ObjectReader r = MAPPER.readerFor(ABC.class) - .with(SCHEMA) + .with(SCHEMA_ABC) .with(CsvParser.Feature.INSERT_NULLS_FOR_MISSING_COLUMNS); // check with various number of missing; but first with no missing @@ -95,7 +95,7 @@ public void testInjectMissingAsNulls() throws Exception public void testFailOnMissingColumns() throws Exception { ObjectReader r = MAPPER.readerFor(ABC.class) - .with(SCHEMA) + .with(SCHEMA_ABC) .with(CsvParser.Feature.FAIL_ON_MISSING_COLUMNS); // check with various number of missing, as well as recovery diff --git a/csv/src/test/java/com/fasterxml/jackson/dataformat/csv/failing/MissingColumns285Test.java b/csv/src/test/java/com/fasterxml/jackson/dataformat/csv/failing/MissingColumns285Test.java new file mode 100644 index 00000000..fbf14ec9 --- /dev/null +++ b/csv/src/test/java/com/fasterxml/jackson/dataformat/csv/failing/MissingColumns285Test.java @@ -0,0 +1,48 @@ +package com.fasterxml.jackson.dataformat.csv.failing; + +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +import com.fasterxml.jackson.databind.MappingIterator; + +import com.fasterxml.jackson.dataformat.csv.*; + +/** + * Tests for cases where one more of schema-declared columns is + * missing; various handling choices include "null-injection" + * as well as failure (throw exception) and just skipping (default). + */ +public class MissingColumns285Test extends ModuleTestBase +{ + @JsonPropertyOrder({ "name", "age" }) + static class Person { + public String name; + public int age; + } + + /* + /********************************************************************** + /* Test methods + /********************************************************************** + */ + + private final CsvMapper MAPPER = mapperForCsv(); + + // [dataformats-text#285] + public void testMissingWithReorder() throws Exception + { + CsvSchema csvSchema = CsvSchema.builder().setUseHeader(true).setReorderColumns(true) + .addColumn("name").addColumn("age").build(); + final String CSV = "name\nRoger\n"; + MappingIterator it = MAPPER + .readerFor(Person.class) + .with(csvSchema) + .readValues(CSV); + try { + it.nextValue(); + fail("Should not pass with missing columns"); + } catch (CsvReadException e) { + verifyException(e, "Not enough column values"); + verifyException(e, "expected 2, found 1"); + } + } +}