diff options
author | Anna Koskinen <Ansku@users.noreply.github.com> | 2021-01-22 13:08:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-22 13:08:02 +0200 |
commit | b4f011230fd5c9d56a0dd7ad7c00c584e25ee990 (patch) | |
tree | ec2f885c3cc2ea200b3405703b1ef9d3cbb8bb7c /server/src/test/java | |
parent | f790ba970d49cfe5c50a3b28d099227af8fcc4a6 (diff) | |
download | vaadin-framework-b4f011230fd5c9d56a0dd7ad7c00c584e25ee990.tar.gz vaadin-framework-b4f011230fd5c9d56a0dd7ad7c00c584e25ee990.zip |
DateField value should actively adjust to the set resolution. (#12183)7.7.23
Diffstat (limited to 'server/src/test/java')
3 files changed, 51 insertions, 8 deletions
diff --git a/server/src/test/java/com/vaadin/tests/data/converter/LocalDateTimeToDateConverterTest.java b/server/src/test/java/com/vaadin/tests/data/converter/LocalDateTimeToDateConverterTest.java index 6851761cfc..a9dca56c15 100644 --- a/server/src/test/java/com/vaadin/tests/data/converter/LocalDateTimeToDateConverterTest.java +++ b/server/src/test/java/com/vaadin/tests/data/converter/LocalDateTimeToDateConverterTest.java @@ -14,6 +14,7 @@ import com.vaadin.data.Binder; import com.vaadin.data.ValidationException; import com.vaadin.data.ValueContext; import com.vaadin.data.converter.LocalDateTimeToDateConverter; +import com.vaadin.shared.ui.datefield.DateTimeResolution; import com.vaadin.ui.DateTimeField; public class LocalDateTimeToDateConverterTest extends AbstractConverterTest { @@ -59,7 +60,15 @@ public class LocalDateTimeToDateConverterTest extends AbstractConverterTest { BeanWithDate bean = new BeanWithDate(); binder.writeBean(bean); - assertEquals(DATE, bean.getDate()); + assertEquals(DateTimeResolution.MINUTE, dateField.getResolution()); + + // create a comparison date that matches the resolution + Calendar calendar = Calendar + .getInstance(TimeZone.getTimeZone(ZoneOffset.UTC)); + calendar.clear(); + calendar.set(2017, Calendar.JANUARY, 1, 1, 1, 0); + Date date = calendar.getTime(); + assertEquals(date, bean.getDate()); } public static class BeanWithDate { diff --git a/server/src/test/java/com/vaadin/tests/server/component/abstractdatefield/AbstractLocalDateTimeFieldDeclarativeTest.java b/server/src/test/java/com/vaadin/tests/server/component/abstractdatefield/AbstractLocalDateTimeFieldDeclarativeTest.java index d4d2c397b7..de6dc322ad 100644 --- a/server/src/test/java/com/vaadin/tests/server/component/abstractdatefield/AbstractLocalDateTimeFieldDeclarativeTest.java +++ b/server/src/test/java/com/vaadin/tests/server/component/abstractdatefield/AbstractLocalDateTimeFieldDeclarativeTest.java @@ -25,15 +25,19 @@ import com.vaadin.ui.AbstractLocalDateTimeField; public abstract class AbstractLocalDateTimeFieldDeclarativeTest<T extends AbstractLocalDateTimeField> extends AbstractFieldDeclarativeTest<T, LocalDateTime> { - protected DateTimeFormatter DATE_FORMATTER = DateTimeFormatter - .ofPattern("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH); + // field initialised with DateTimeResolution.MINUTE, seconds get truncated + protected DateTimeFormatter VALUE_DATE_FORMATTER = DateTimeFormatter + .ofPattern("yyyy-MM-dd HH:mm:00", Locale.ROOT); + // only field value conforms to resolution, range keeps the initial values + protected DateTimeFormatter RANGE_DATE_FORMATTER = DateTimeFormatter + .ofPattern("yyyy-MM-dd HH:mm:ss", Locale.ROOT); @Override public void valueDeserialization() throws InstantiationException, IllegalAccessException { LocalDateTime value = LocalDateTime.of(2003, 02, 27, 10, 37, 43); String design = String.format("<%s value='%s'/>", getComponentTag(), - DATE_FORMATTER.format(value)); + VALUE_DATE_FORMATTER.format(value)); T component = getComponentClass().newInstance(); component.setValue(value); @@ -57,8 +61,8 @@ public abstract class AbstractLocalDateTimeFieldDeclarativeTest<T extends Abstra "<%s show-iso-week-numbers range-end='%s' range-start='%s' " + "date-out-of-range-message='%s' resolution='%s' " + "date-format='%s' lenient parse-error-message='%s'/>", - getComponentTag(), DATE_FORMATTER.format(end), - DATE_FORMATTER.format(start), dateOutOfRange, + getComponentTag(), RANGE_DATE_FORMATTER.format(end), + RANGE_DATE_FORMATTER.format(start), dateOutOfRange, resolution.name().toLowerCase(Locale.ROOT), dateFormat, parseErrorMsg); @@ -82,7 +86,7 @@ public abstract class AbstractLocalDateTimeFieldDeclarativeTest<T extends Abstra throws InstantiationException, IllegalAccessException { LocalDateTime value = LocalDateTime.of(2003, 02, 27, 23, 12, 34); String design = String.format("<%s value='%s' readonly/>", - getComponentTag(), DATE_FORMATTER.format(value)); + getComponentTag(), VALUE_DATE_FORMATTER.format(value)); T component = getComponentClass().newInstance(); component.setValue(value); diff --git a/server/src/test/java/com/vaadin/tests/server/component/datefield/DateFieldListenersTest.java b/server/src/test/java/com/vaadin/tests/server/component/datefield/DateFieldListenersTest.java index 91d7384421..da7306e025 100644 --- a/server/src/test/java/com/vaadin/tests/server/component/datefield/DateFieldListenersTest.java +++ b/server/src/test/java/com/vaadin/tests/server/component/datefield/DateFieldListenersTest.java @@ -1,12 +1,14 @@ package com.vaadin.tests.server.component.datefield; import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAccessor; import java.util.Date; import java.util.Map; import org.junit.Test; +import com.vaadin.data.validator.DateTimeRangeValidator; import com.vaadin.data.validator.RangeValidator; import com.vaadin.event.FieldEvents.BlurEvent; import com.vaadin.event.FieldEvents.BlurListener; @@ -39,7 +41,9 @@ public class DateFieldListenersTest extends AbstractListenerMethodsTestBase { @Override protected RangeValidator<LocalDateTime> getRangeValidator() { - return null; + return new DateTimeRangeValidator(getDateOutOfRangeMessage(), + adjustToResolution(getRangeStart(), getResolution()), + adjustToResolution(getRangeEnd(), getResolution())); } @Override @@ -61,6 +65,32 @@ public class DateFieldListenersTest extends AbstractListenerMethodsTestBase { protected LocalDateTime toType(TemporalAccessor temporalAccessor) { return LocalDateTime.from(temporalAccessor); } + + @Override + protected LocalDateTime adjustToResolution(LocalDateTime date, + DateTimeResolution forResolution) { + if (date == null) { + return null; + } + switch (forResolution) { + case YEAR: + return date.withDayOfYear(1).toLocalDate().atStartOfDay(); + case MONTH: + return date.withDayOfMonth(1).toLocalDate().atStartOfDay(); + case DAY: + return date.toLocalDate().atStartOfDay(); + case HOUR: + return date.truncatedTo(ChronoUnit.HOURS); + case MINUTE: + return date.truncatedTo(ChronoUnit.MINUTES); + case SECOND: + return date.truncatedTo(ChronoUnit.SECONDS); + default: + assert false : "Unexpected resolution argument " + + forResolution; + return null; + } + } } @Test |