From 76230f8b1627faf2b10ffc7957a06f551ac2816c Mon Sep 17 00:00:00 2001 From: Alexander Nittka Date: Thu, 7 Jun 2018 12:23:02 +0200 Subject: Remove parse error when changing from invalid to empty date text (#10771) Fixes #10673. --- .../main/java/com/vaadin/ui/AbstractDateField.java | 9 ++- .../datefield/DateFieldErrorMessageTest.java | 82 ++++++++++++++++++++++ 2 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 server/src/test/java/com/vaadin/tests/server/component/datefield/DateFieldErrorMessageTest.java (limited to 'server/src') diff --git a/server/src/main/java/com/vaadin/ui/AbstractDateField.java b/server/src/main/java/com/vaadin/ui/AbstractDateField.java index a4677e6ec3..841ad0392e 100644 --- a/server/src/main/java/com/vaadin/ui/AbstractDateField.java +++ b/server/src/main/java/com/vaadin/ui/AbstractDateField.java @@ -107,14 +107,19 @@ public abstract class AbstractDateField { + + @Test + public void testErrorMessageRemoved() throws Exception { + InlineDateField field = new InlineDateField("Day is", + LocalDate.of(2003, 2, 27)); + checkValueAndComponentError(field, "2003-02-27", LocalDate.of(2003, 2, 27), false); + checkValueAndComponentError(field, "", null, false); + checkValueAndComponentError(field, "2003-04-27", LocalDate.of(2003, 4, 27), false); + checkValueAndComponentError(field, "foo", null, true); + checkValueAndComponentError(field, "2013-07-03", LocalDate.of(2013, 7, 3), false); + checkValueAndComponentError(field, "foo", null, true); + checkValueAndComponentError(field, "", null, false); + } + + @Override + protected String getComponentTag() { + return "vaadin-inline-date-field"; + } + + @Override + protected Class getComponentClass() { + return InlineDateField.class; + } + + private void checkValueAndComponentError(InlineDateField field, String newInput, LocalDate expectedFieldValue, boolean componentErrorExpected) throws Exception { + setDateByText(field, newInput); + assertEquals(expectedFieldValue, field.getValue()); + assertEquals(componentErrorExpected, field.getComponentError()!=null); + } + + private void setDateByText(InlineDateField field, String dateText) throws Exception { + Field rcpField = AbstractDateField.class.getDeclaredField("rpc"); + rcpField.setAccessible(true); + AbstractDateFieldServerRpc rcp = (AbstractDateFieldServerRpc)rcpField.get(field); + Map resolutions=new HashMap(); + try { + LocalDate date = LocalDate.parse(dateText); + resolutions.put(DateResolution.YEAR.name(), date.getYear()); + resolutions.put(DateResolution.MONTH.name(), date.getMonthValue()); + resolutions.put(DateResolution.DAY.name(), date.getDayOfMonth()); + }catch (Exception e) { + //ignore + } + rcp.update(dateText, resolutions); + } +} \ No newline at end of file -- cgit v1.2.3