diff --git a/core/src/main/java/cucumber/runtime/table/CamelCaseStringConverter.java b/core/src/main/java/cucumber/runtime/table/CamelCaseStringConverter.java index bdabeb45d6..8bcee61934 100644 --- a/core/src/main/java/cucumber/runtime/table/CamelCaseStringConverter.java +++ b/core/src/main/java/cucumber/runtime/table/CamelCaseStringConverter.java @@ -1,5 +1,7 @@ package cucumber.runtime.table; +import cucumber.runtime.CucumberException; + import java.util.regex.Pattern; public class CamelCaseStringConverter implements StringConverter { @@ -34,6 +36,9 @@ private String capitalize(String string) { } private String uncapitalize(String string) { + if (string.isEmpty()) { + throw new CucumberException("Field name cannot be empty. Please check the table header."); + } return new StringBuilder(string.length()).append(Character.toLowerCase(string.charAt(0))).append(string.substring(1)).toString(); } diff --git a/core/src/test/java/cucumber/runtime/table/CamelCaseStringConverterTest.java b/core/src/test/java/cucumber/runtime/table/CamelCaseStringConverterTest.java index b8066ef095..d25dc78ed6 100644 --- a/core/src/test/java/cucumber/runtime/table/CamelCaseStringConverterTest.java +++ b/core/src/test/java/cucumber/runtime/table/CamelCaseStringConverterTest.java @@ -1,15 +1,25 @@ package cucumber.runtime.table; +import cucumber.runtime.CucumberException; import org.junit.Test; import static org.junit.Assert.assertEquals; public class CamelCaseStringConverterTest { + + private final CamelCaseStringConverter mapper = new CamelCaseStringConverter(); + @Test public void testTransformToJavaPropertyName() { - CamelCaseStringConverter mapper = new CamelCaseStringConverter(); + assertEquals("Transformed Name", "userName", mapper.map("User Name")); assertEquals("Transformed Name", "birthDate", mapper.map(" Birth Date\t")); assertEquals("Transformed Name", "email", mapper.map("email")); } + + @Test(expected = CucumberException.class) + public void testEmptyInputShouldBeRejected() { + assertEquals("", mapper.map(" ")); + } + } diff --git a/core/src/test/java/cucumber/runtime/table/ToDataTableTest.java b/core/src/test/java/cucumber/runtime/table/ToDataTableTest.java index 7fdf7468a3..1de141a4f4 100644 --- a/core/src/test/java/cucumber/runtime/table/ToDataTableTest.java +++ b/core/src/test/java/cucumber/runtime/table/ToDataTableTest.java @@ -65,6 +65,21 @@ public void gives_a_nice_error_message_when_field_is_missing() { } } + @Test + public void gives_explicit_error_message_on_field_name_missing_in_header() { + try { + tc.toList(TableParser.parse("" + + "| name | |\n" + + "| Sid Vicious | 10/05/1957 |\n" + + "| Frank Zappa | 21/12/1940 |\n" + + "", PARAMETER_INFO), + UserPojo.class); + fail(); + } catch (CucumberException e) { + assertEquals("Field name cannot be empty. Please check the table header.", e.getMessage()); + } + } + @Test public void gives_a_nice_error_message_when_primitive_field_is_null() { try {