WICKET-6105 More tests are added some issues are fixed
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/2f6b59ef Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/2f6b59ef Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/2f6b59ef Branch: refs/heads/master Commit: 2f6b59effd25a92385417e65724d835c8fdc0459 Parents: 2bb684c Author: Maxim Solodovnik <[email protected]> Authored: Fri Oct 6 12:15:28 2017 +0700 Committer: Sven Meier <[email protected]> Committed: Tue Oct 17 22:32:39 2017 +0200 ---------------------------------------------------------------------- .../form/datetime/AbstractDateTimeField.java | 22 ++++--- .../html/form/datetime/DateTimeField.java | 12 +--- .../html/form/datetime/ZonedDateTimeField.java | 10 +-- .../html/form/datetime/DateTimeFieldTest.java | 64 ++++++++++++++++++++ 4 files changed, 81 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/2f6b59ef/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/AbstractDateTimeField.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/AbstractDateTimeField.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/AbstractDateTimeField.java index 5ec27a6..8b6f85d 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/AbstractDateTimeField.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/AbstractDateTimeField.java @@ -137,18 +137,18 @@ abstract class AbstractDateTimeField<T extends Temporal> extends FormComponentPa try { // Get the converted input values - LocalDate localDate = dateField.getConvertedInput(); + LocalDate date = dateField.getConvertedInput(); + LocalTime time = timeField.getConvertedInput(); - if (localDate == null) + if (date == null || time == null) { - return; + setConvertedInput(null); + } + else + { + // Use the input to create proper date-time + setConvertedInput(performConvert(date, time)); } - - // Use the input to create a date object with proper timezone - LocalTime localTime = timeField.getConvertedInput(); - - // The date will be in the server's timezone - setConvertedInput(performConvert(localDate, localTime)); } catch (RuntimeException e) { @@ -159,7 +159,9 @@ abstract class AbstractDateTimeField<T extends Temporal> extends FormComponentPa abstract T performConvert(LocalDate date, LocalTime time); - abstract void prepareObject(); + void prepareObject() { + // no-op by default + } /** * create a new {@link DateField} instance to be added to this panel. http://git-wip-us.apache.org/repos/asf/wicket/blob/2f6b59ef/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/DateTimeField.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/DateTimeField.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/DateTimeField.java index 8ff825a..bc4801c 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/DateTimeField.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/DateTimeField.java @@ -90,17 +90,9 @@ public class DateTimeField extends AbstractDateTimeField<LocalDateTime> return LocalDateTime.of(date, time); } - @Override - void prepareObject() { - if (getModelObject() == null) - { - dateTime = null; - } - } - LocalDate getLocalDate() { - return dateTime.toLocalDate(); + return getModelObject() == null ? null : dateTime.toLocalDate(); } void setLocalDate(LocalDate date) @@ -112,7 +104,7 @@ public class DateTimeField extends AbstractDateTimeField<LocalDateTime> LocalTime getLocalTime() { - return dateTime.toLocalTime(); + return getModelObject() == null ? null : dateTime.toLocalTime(); } void setLocalTime(LocalTime time) http://git-wip-us.apache.org/repos/asf/wicket/blob/2f6b59ef/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/ZonedDateTimeField.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/ZonedDateTimeField.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/ZonedDateTimeField.java index a6814f8..eb70e12 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/ZonedDateTimeField.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/ZonedDateTimeField.java @@ -114,11 +114,7 @@ public class ZonedDateTimeField extends AbstractDateTimeField<ZonedDateTime> @Override void prepareObject() { ZonedDateTime modelObject = getModelObject(); - if (modelObject == null) - { - dateTime = null; - } - else + if (modelObject != null) { // convert date to the client's time zone if we have that info ZoneId zone = getClientTimeZone(); @@ -131,7 +127,7 @@ public class ZonedDateTimeField extends AbstractDateTimeField<ZonedDateTime> LocalDate getLocalDate() { - return dateTime.toLocalDate(); + return getModelObject() == null ? null : dateTime.toLocalDate(); } void setLocalDate(LocalDate date) @@ -143,7 +139,7 @@ public class ZonedDateTimeField extends AbstractDateTimeField<ZonedDateTime> LocalTime getLocalTime() { - return dateTime.toLocalTime(); + return getModelObject() == null ? null : dateTime.toLocalTime(); } void setLocalTime(LocalTime time) http://git-wip-us.apache.org/repos/asf/wicket/blob/2f6b59ef/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/datetime/DateTimeFieldTest.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/datetime/DateTimeFieldTest.java b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/datetime/DateTimeFieldTest.java index 3b167e4..753e98e 100644 --- a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/datetime/DateTimeFieldTest.java +++ b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/datetime/DateTimeFieldTest.java @@ -18,6 +18,7 @@ package org.apache.wicket.extensions.markup.html.form.datetime; import java.io.Serializable; import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.LocalTime; import java.util.Locale; @@ -104,6 +105,69 @@ public class DateTimeFieldTest extends WicketTestCase { assertEquals(date, d); } + @Test + public void dateTimeNullTest() { + TestDateTimePage page = new TestDateTimePage(null); + tester.startPage(page); + FormTester formTester = tester.newFormTester("form", false); + formTester.submit(); + assertNull(page.field.getModelObject()); + } + + @Test + public void dateTimeNullTest1() { + LocalDate date = LocalDate.of(2017, 02, 13); + TestDateTimePage page = new TestDateTimePage(null); + tester.startPage(page); + FormTester formTester = tester.newFormTester("form", false); + formTester.setValue("field:date", new StyleDateConverter("F").convertToString(date, Locale.forLanguageTag("en-US"))); + formTester.submit(); + assertNull(page.field.getModelObject()); + } + + @Test + public void dateTimeNullTest2() { + TestDateTimePage page = new TestDateTimePage(null); + tester.startPage(page); + FormTester formTester = tester.newFormTester("form", false); + formTester.setValue("field:time:hours", "6"); + formTester.setValue("field:time:minutes", "15"); + formTester.select("field:time:amOrPmChoice", 0); + formTester.submit(); + assertNull(page.field.getModelObject()); + } + + @Test + public void dateTimeNotNullTest() { + LocalDate date = LocalDate.of(2017, 02, 13); + TestDateTimePage page = new TestDateTimePage(null); + tester.startPage(page); + FormTester formTester = tester.newFormTester("form", false); + formTester.setValue("field:date", new StyleDateConverter("S").convertToString(date, Locale.forLanguageTag("en-US"))); + formTester.setValue("field:time:hours", "6"); + formTester.setValue("field:time:minutes", "15"); + formTester.select("field:time:amOrPmChoice", 0); + formTester.submit(); + assertNotNull(page.field.getModelObject()); + assertEquals(LocalDateTime.of(date, LocalTime.of(6, 15)), page.field.getModelObject()); + } + + public static class TestDateTimePage extends TestPage<LocalDateTime> + { + private static final long serialVersionUID = 1L; + + TestDateTimePage(LocalDateTime val) + { + super(val); + } + + @Override + FormComponent<LocalDateTime> newComponent() + { + return new DateTimeField("field", model); + } + } + public static class TestDatePage extends TestPage<LocalDate> { private static final long serialVersionUID = 1L;
