@@ -19,12 +19,14 @@ package com.vaadin.client.ui; | |||
import java.util.Date; | |||
import com.google.gwt.aria.client.Roles; | |||
import com.google.gwt.dom.client.Element; | |||
import com.google.gwt.event.dom.client.ChangeEvent; | |||
import com.google.gwt.event.dom.client.ChangeHandler; | |||
import com.google.gwt.event.dom.client.DomEvent; | |||
import com.google.gwt.event.dom.client.KeyCodes; | |||
import com.google.gwt.event.dom.client.KeyDownEvent; | |||
import com.google.gwt.event.dom.client.KeyDownHandler; | |||
import com.google.gwt.i18n.client.DateTimeFormat; | |||
import com.google.gwt.user.client.ui.TextBox; | |||
import com.vaadin.client.BrowserInfo; | |||
import com.vaadin.client.Focusable; | |||
@@ -54,6 +56,8 @@ public abstract class VAbstractTextualDate<R extends Enum<R>> | |||
HandlesAriaRequired, KeyDownHandler { | |||
private static final String PARSE_ERROR_CLASSNAME = "-parseerror"; | |||
private static final String ISO_DATE_TIME_PATTERN = "yyyy-MM-dd'T'HH:mm:ss"; | |||
private static final String ISO_DATE_PATTERN = "yyyy-MM-dd"; | |||
/** For internal use only. May be removed or replaced in the future. */ | |||
public final TextBox text; | |||
@@ -64,7 +68,7 @@ public abstract class VAbstractTextualDate<R extends Enum<R>> | |||
private final String TEXTFIELD_ID = "field"; | |||
/** For internal use only. May be removed or replaced in the future. */ | |||
public String formatStr; | |||
private String formatStr; | |||
public VAbstractTextualDate(R resoluton) { | |||
super(resoluton); | |||
@@ -78,6 +82,7 @@ public abstract class VAbstractTextualDate<R extends Enum<R>> | |||
addDomHandler(this, KeyDownEvent.getType()); | |||
} | |||
add(text); | |||
publishJSHelpers(getElement()); | |||
} | |||
/** | |||
@@ -97,26 +102,46 @@ public abstract class VAbstractTextualDate<R extends Enum<R>> | |||
*/ | |||
protected String getFormatString() { | |||
if (formatStr == null) { | |||
if (isYear(getCurrentResolution())) { | |||
formatStr = "yyyy"; // force full year | |||
} else { | |||
try { | |||
String frmString = LocaleService | |||
.getDateFormat(currentLocale); | |||
frmString = cleanFormat(frmString); | |||
formatStr = frmString; | |||
} catch (LocaleNotLoadedException e) { | |||
// TODO should die instead? Can the component survive | |||
// without format string? | |||
VConsole.error(e); | |||
} | |||
} | |||
setFormatString(createFormatString()); | |||
} | |||
return formatStr; | |||
} | |||
/** | |||
* Create a format string suitable for the widget in its current state. | |||
* | |||
* @return a date format string to use when formatting and parsing the text | |||
* in the input field | |||
* @since | |||
*/ | |||
protected String createFormatString() { | |||
if (isYear(getCurrentResolution())) { | |||
return "yyyy"; // force full year | |||
} else { | |||
try { | |||
String frmString = LocaleService.getDateFormat(currentLocale); | |||
return cleanFormat(frmString); | |||
} catch (LocaleNotLoadedException e) { | |||
// TODO should die instead? Can the component survive | |||
// without format string? | |||
VConsole.error(e); | |||
return null; | |||
} | |||
} | |||
} | |||
/** | |||
* Sets the date format string to use for the text field. | |||
* | |||
* @param formatString | |||
* the format string to use, or null to force re-creating the | |||
* format string from the locale the next time it is needed | |||
* @since | |||
*/ | |||
public void setFormatString(String formatString) { | |||
this.formatStr = formatString; | |||
} | |||
@Override | |||
public void bindAriaCaption( | |||
com.google.gwt.user.client.Element captionElement) { | |||
@@ -148,9 +173,11 @@ public abstract class VAbstractTextualDate<R extends Enum<R>> | |||
// Create the initial text for the textfield | |||
String dateText; | |||
Date currentDate = getDate(); | |||
// Always call this to ensure the format ends up in the element | |||
String formatString = getFormatString(); | |||
if (currentDate != null) { | |||
dateText = getDateTimeService().formatDate(currentDate, | |||
getFormatString()); | |||
formatString); | |||
} else { | |||
dateText = ""; | |||
} | |||
@@ -355,4 +382,66 @@ public abstract class VAbstractTextualDate<R extends Enum<R>> | |||
// Needed for tooltip event handling | |||
fireEvent(event); | |||
} | |||
/** | |||
* Publish methods/properties on the element to be used from JavaScript. | |||
* | |||
* @since | |||
*/ | |||
private native void publishJSHelpers(Element root) | |||
/*-{ | |||
var self = this; | |||
root.setISOValue = $entry(function (value) { | |||
self.@VAbstractTextualDate::setISODate(*)(value); | |||
}); | |||
root.getISOValue = $entry(function () { | |||
return self.@VAbstractTextualDate::getISODate()(); | |||
}); | |||
}-*/; | |||
/** | |||
* Sets the value of the date field as a locale independent ISO date | |||
* (yyyy-MM-dd'T'HH:mm:ss or yyyy-MM-dd depending on whether this is a date | |||
* field or a date and time field). | |||
* | |||
* @param isoDate | |||
* the date to set in ISO8601 format, or null to clear the date | |||
* value | |||
* @since | |||
*/ | |||
public void setISODate(String isoDate) { | |||
if (isoDate == null) { | |||
setDate(null); | |||
} else { | |||
Date date = getIsoFormatter().parse(isoDate); | |||
setDate(date); | |||
} | |||
updateDateVariables(); | |||
} | |||
/** | |||
* Gets the value of the date field as a locale independent ISO date | |||
* (yyyy-MM-dd'T'HH:mm:ss or yyyy-MM-dd depending on whether this is a date | |||
* field or a date and time field). | |||
* | |||
* @return the current date in ISO8601 format, or null if no date is set | |||
* | |||
* @since | |||
*/ | |||
public String getISODate() { | |||
Date date = getDate(); | |||
if (date == null) { | |||
return null; | |||
} else { | |||
return getIsoFormatter().format(date); | |||
} | |||
} | |||
private DateTimeFormat getIsoFormatter() { | |||
if (supportsTime()) { | |||
return DateTimeFormat.getFormat(ISO_DATE_TIME_PATTERN); | |||
} else { | |||
return DateTimeFormat.getFormat(ISO_DATE_PATTERN); | |||
} | |||
} | |||
} |
@@ -28,7 +28,7 @@ import com.vaadin.client.DateTimeService; | |||
/** | |||
* A very base widget class for a date field. | |||
* | |||
* | |||
* @author Vaadin Ltd | |||
* | |||
* @param <R> | |||
@@ -100,7 +100,7 @@ public abstract class VDateField<R extends Enum<R>> extends FlowPanel | |||
* The map contains integer representation of values per resolution. The | |||
* method should construct a date based on the map and set it via | |||
* {@link #setCurrentDate(Date)} | |||
* | |||
* | |||
* @param dateValues | |||
* a map with date values to convert into a date | |||
*/ | |||
@@ -183,7 +183,7 @@ public abstract class VDateField<R extends Enum<R>> extends FlowPanel | |||
/** | |||
* Returns a resolution variable name for the given {@code resolution}. | |||
* | |||
* | |||
* @param resolution | |||
* the given resolution | |||
* @return the resolution variable name | |||
@@ -198,9 +198,9 @@ public abstract class VDateField<R extends Enum<R>> extends FlowPanel | |||
* <p> | |||
* The method uses {@link #doGetResolutions()} to make sure that the order | |||
* is the correct one. | |||
* | |||
* | |||
* @see #doGetResolutions() | |||
* | |||
* | |||
* @return stream of all available resolutions in the ascending order. | |||
*/ | |||
public Stream<R> getResolutions() { | |||
@@ -211,25 +211,34 @@ public abstract class VDateField<R extends Enum<R>> extends FlowPanel | |||
* Returns a current resolution as a string. | |||
* <p> | |||
* The method is used to generate a style name for the current resolution. | |||
* | |||
* | |||
* @return the current resolution as a string | |||
*/ | |||
public abstract String resolutionAsString(); | |||
/** | |||
* Checks whether the given {@code resolution} represents an year. | |||
* | |||
* | |||
* @param resolution | |||
* the given resolution | |||
* @return {@code true} if the {@code resolution} represents an year | |||
*/ | |||
public abstract boolean isYear(R resolution); | |||
/** | |||
* Checks whether time is supported by this widget. | |||
* | |||
* @return <code>true</code> if time is supported in addition to date, | |||
* <code>false</code> if only dates are supported | |||
* @since | |||
*/ | |||
protected abstract boolean supportsTime(); | |||
/** | |||
* Returns a date based on the provided date values map. | |||
* | |||
* | |||
* @see #setCurrentDate(Map) | |||
* | |||
* | |||
* @param dateValues | |||
* a map with date values to convert into a date | |||
* @return the date based on the dateValues map | |||
@@ -240,9 +249,9 @@ public abstract class VDateField<R extends Enum<R>> extends FlowPanel | |||
* Returns all available resolutions as an array. | |||
* <p> | |||
* No any order is required (in contrary to {@link #getResolutions()}. | |||
* | |||
* | |||
* @see #getResolutions() | |||
* | |||
* | |||
* @return all available resolutions | |||
*/ | |||
protected abstract R[] doGetResolutions(); |
@@ -23,7 +23,7 @@ import com.vaadin.shared.ui.datefield.DateResolution; | |||
/** | |||
* A client side implementation for InlineDateField. | |||
* | |||
* | |||
* @author Vaadin Ltd | |||
* | |||
*/ | |||
@@ -98,4 +98,9 @@ public class VDateFieldCalendar | |||
return VPopupCalendar.makeDate(dateVaules); | |||
} | |||
@Override | |||
protected boolean supportsTime() { | |||
return false; | |||
} | |||
} |
@@ -23,7 +23,7 @@ import com.vaadin.shared.ui.datefield.DateTimeResolution; | |||
/** | |||
* A client side implementation for inline date/time field. | |||
* | |||
* | |||
* @author Vaadin Ltd | |||
* @since 8.0 | |||
* | |||
@@ -110,4 +110,9 @@ public class VDateTimeFieldCalendar extends | |||
return DateTimeResolution.values(); | |||
} | |||
@Override | |||
protected boolean supportsTime() { | |||
return true; | |||
} | |||
} |
@@ -24,7 +24,7 @@ import com.vaadin.shared.ui.datefield.DateResolution; | |||
/** | |||
* Represents a date selection component with a text field and a popup date | |||
* selector. | |||
* | |||
* | |||
* @author Vaadin Ltd | |||
* | |||
*/ | |||
@@ -114,4 +114,9 @@ public class VPopupCalendar | |||
return super.cleanFormat(format); | |||
} | |||
@Override | |||
protected boolean supportsTime() { | |||
return false; | |||
} | |||
} |
@@ -27,7 +27,7 @@ import com.vaadin.shared.ui.datefield.DateTimeResolution; | |||
/** | |||
* Represents a date-time selection component with a text field and a popup date | |||
* selector. | |||
* | |||
* | |||
* @author Vaadin Ltd | |||
* | |||
* @since 8.0 | |||
@@ -169,48 +169,45 @@ public class VPopupTimeCalendar extends | |||
} | |||
@Override | |||
protected String getFormatString() { | |||
if (formatStr == null) { | |||
if (isYear(getCurrentResolution())) { | |||
formatStr = "yyyy"; // force full year | |||
} else { | |||
try { | |||
String frmString = LocaleService | |||
.getDateFormat(currentLocale); | |||
frmString = cleanFormat(frmString); | |||
// String delim = LocaleService | |||
// .getClockDelimiter(currentLocale); | |||
protected String createFormatString() { | |||
if (isYear(getCurrentResolution())) { | |||
return "yyyy"; // force full year | |||
} else { | |||
try { | |||
String frmString = LocaleService.getDateFormat(currentLocale); | |||
frmString = cleanFormat(frmString); | |||
// String delim = LocaleService | |||
// .getClockDelimiter(currentLocale); | |||
if (getCurrentResolution() | |||
.compareTo(DateTimeResolution.HOUR) <= 0) { | |||
if (dts.isTwelveHourClock()) { | |||
frmString += " hh"; | |||
} else { | |||
frmString += " HH"; | |||
} | |||
if (getCurrentResolution() | |||
.compareTo(DateTimeResolution.HOUR) <= 0) { | |||
if (dts.isTwelveHourClock()) { | |||
frmString += " hh"; | |||
} else { | |||
frmString += " HH"; | |||
} | |||
.compareTo(DateTimeResolution.MINUTE) <= 0) { | |||
frmString += ":mm"; | |||
if (getCurrentResolution() | |||
.compareTo(DateTimeResolution.MINUTE) <= 0) { | |||
frmString += ":mm"; | |||
if (getCurrentResolution().compareTo( | |||
DateTimeResolution.SECOND) <= 0) { | |||
frmString += ":ss"; | |||
} | |||
} | |||
if (dts.isTwelveHourClock()) { | |||
frmString += " aaa"; | |||
.compareTo(DateTimeResolution.SECOND) <= 0) { | |||
frmString += ":ss"; | |||
} | |||
} | |||
if (dts.isTwelveHourClock()) { | |||
frmString += " aaa"; | |||
} | |||
formatStr = frmString; | |||
} catch (LocaleNotLoadedException e) { | |||
// TODO should die instead? Can the component survive | |||
// without format string? | |||
VConsole.error(e); | |||
} | |||
return frmString; | |||
} catch (LocaleNotLoadedException e) { | |||
// TODO should die instead? Can the component survive | |||
// without format string? | |||
VConsole.error(e); | |||
return null; | |||
} | |||
} | |||
return formatStr; | |||
} | |||
@Override | |||
@@ -225,4 +222,9 @@ public class VPopupTimeCalendar extends | |||
return super.cleanFormat(format); | |||
} | |||
@Override | |||
protected boolean supportsTime() { | |||
return true; | |||
} | |||
} |
@@ -41,10 +41,10 @@ public abstract class AbstractTextualDateConnector<R extends Enum<R>> | |||
if (origRes != getWidget().getCurrentResolution() | |||
|| oldLocale != getWidget().getCurrentLocale()) { | |||
// force recreating format string | |||
getWidget().formatStr = null; | |||
getWidget().setFormatString(null); | |||
} | |||
if (uidl.hasAttribute("format")) { | |||
getWidget().formatStr = uidl.getStringAttribute("format"); | |||
getWidget().setFormatString(uidl.getStringAttribute("format")); | |||
} | |||
getWidget().lenient = !uidl.getBooleanAttribute("strict"); |
@@ -22,4 +22,32 @@ import com.vaadin.testbench.elementsbase.ServerClass; | |||
*/ | |||
@ServerClass("com.vaadin.ui.AbstractDateField") | |||
public class AbstractDateFieldElement extends AbstractFieldElement { | |||
/** | |||
* Gets the value of the date field as a ISO8601 compatible string | |||
* (yyyy-MM-dd or yyyy-MM-dd'T'HH:mm:ss depending on whether the element | |||
* supports time). | |||
* | |||
* @return the date in ISO-8601 format | |||
* @since | |||
*/ | |||
protected String getISOValue() { | |||
return (String) getCommandExecutor() | |||
.executeScript("return arguments[0].getISOValue();", this); | |||
} | |||
/** | |||
* Sets the value of the date field as a ISO8601 compatible string | |||
* (yyyy-MM-dd or yyyy-MM-dd'T'HH:mm:ss depending on whether the element | |||
* supports time). | |||
* | |||
* @param isoDateValue | |||
* the date in ISO-8601 format | |||
* @since | |||
*/ | |||
protected void setISOValue(String isoDateValue) { | |||
getCommandExecutor().executeScript( | |||
"arguments[0].setISOValue(arguments[1]);", this, isoDateValue); | |||
} | |||
} |
@@ -15,6 +15,9 @@ | |||
*/ | |||
package com.vaadin.testbench.elements; | |||
import java.time.LocalDate; | |||
import java.time.format.DateTimeFormatter; | |||
import org.openqa.selenium.Keys; | |||
import org.openqa.selenium.WebElement; | |||
@@ -72,4 +75,38 @@ public class DateFieldElement extends AbstractDateFieldElement { | |||
findElement(By.tagName("button")).click(); | |||
} | |||
/** | |||
* Sets the value to the given date and time. | |||
* | |||
* @param value | |||
* the date and time to set. | |||
*/ | |||
public void setDate(LocalDate value) { | |||
setISOValue(value.format(getISOFormatter())); | |||
} | |||
/** | |||
* Gets the value as a LocalDate object. | |||
* | |||
* @return the current value as a date object, or null if a date is not set | |||
* or if the text field contains an invalid date | |||
*/ | |||
public LocalDate getDate() { | |||
String value = getISOValue(); | |||
if (value == null) { | |||
return null; | |||
} | |||
return LocalDate.parse(value, getISOFormatter()); | |||
} | |||
/** | |||
* Gets a date and time formatter for ISO-8601 dates. | |||
* | |||
* @return a date formatter for ISO-8601 | |||
* @since | |||
*/ | |||
protected DateTimeFormatter getISOFormatter() { | |||
return DateTimeFormatter.ISO_LOCAL_DATE; | |||
} | |||
} |
@@ -15,6 +15,9 @@ | |||
*/ | |||
package com.vaadin.testbench.elements; | |||
import java.time.LocalDateTime; | |||
import java.time.format.DateTimeFormatter; | |||
import org.openqa.selenium.Keys; | |||
import org.openqa.selenium.WebElement; | |||
@@ -63,4 +66,38 @@ public class DateTimeFieldElement extends AbstractDateFieldElement { | |||
findElement(By.tagName("button")).click(); | |||
} | |||
/** | |||
* Sets the value to the given date and time. | |||
* | |||
* @param value | |||
* the date and time to set. | |||
*/ | |||
public void setDateTime(LocalDateTime value) { | |||
setISOValue(value.format(getISOFormatter())); | |||
} | |||
/** | |||
* Gets the value as a LocalDateTime object. | |||
* | |||
* @return the current value as a date object, or null if a date is not set | |||
* or if the text field contains an invalid date | |||
*/ | |||
public LocalDateTime getDateTime() { | |||
String value = getISOValue(); | |||
if (value == null) { | |||
return null; | |||
} | |||
return LocalDateTime.parse(value, getISOFormatter()); | |||
} | |||
/** | |||
* Gets a date and time formatter for ISO-8601. | |||
* | |||
* @return a date and time formatter for ISO-8601 | |||
* @since | |||
*/ | |||
protected DateTimeFormatter getISOFormatter() { | |||
return DateTimeFormatter.ISO_LOCAL_DATE_TIME; | |||
} | |||
} |
@@ -1,15 +1,51 @@ | |||
package com.vaadin.tests.components.datefield; | |||
import java.time.LocalDate; | |||
import java.util.Locale; | |||
import com.vaadin.annotations.Widgetset; | |||
import com.vaadin.server.VaadinRequest; | |||
import com.vaadin.tests.components.AbstractReindeerTestUI; | |||
import com.vaadin.tests.components.TestDateField; | |||
import com.vaadin.tests.components.AbstractReindeerTestUIWithLog; | |||
import com.vaadin.ui.DateField; | |||
import com.vaadin.ui.InlineDateField; | |||
@Widgetset("com.vaadin.DefaultWidgetSet") | |||
public class DateFieldElementUI extends AbstractReindeerTestUIWithLog { | |||
public static final LocalDate TEST_DATE_TIME = DateTimeFieldElementUI.TEST_DATE_TIME | |||
.toLocalDate(); | |||
public static final LocalDate ANOTHER_TEST_DATE_TIME = DateTimeFieldElementUI.ANOTHER_TEST_DATE_TIME | |||
.toLocalDate(); | |||
public class DateFieldElementUI extends AbstractReindeerTestUI { | |||
@Override | |||
protected void setup(VaadinRequest request) { | |||
addComponent(new DateField()); | |||
addComponent(new TestDateField()); | |||
log.setNumberLogRows(false); | |||
DateField df = new DateField(); | |||
df.addValueChangeListener(event -> { | |||
log("Default date field value set to " + event.getValue()); | |||
}); | |||
addComponent(df); | |||
InlineDateField inlineDateField = new InlineDateField(); | |||
inlineDateField.addValueChangeListener(event -> { | |||
log("Default inline date field value set to " + event.getValue()); | |||
}); | |||
addComponent(inlineDateField); | |||
DateField finnishDatefield = new DateField("Finnish"); | |||
finnishDatefield.setId("fi"); | |||
finnishDatefield.setLocale(new Locale("fi", "FI")); | |||
finnishDatefield.setValue(TEST_DATE_TIME); | |||
finnishDatefield.addValueChangeListener(event -> { | |||
log("Finnish date field value set to " + event.getValue()); | |||
}); | |||
addComponent(finnishDatefield); | |||
DateField usDatefield = new DateField("US"); | |||
usDatefield.setId("us"); | |||
usDatefield.setLocale(Locale.US); | |||
usDatefield.setValue(TEST_DATE_TIME); | |||
usDatefield.addValueChangeListener(event -> { | |||
log("US date field value set to " + event.getValue()); | |||
}); | |||
addComponent(usDatefield); | |||
} | |||
@Override |
@@ -1,15 +1,51 @@ | |||
package com.vaadin.tests.components.datefield; | |||
import java.time.LocalDateTime; | |||
import java.util.Locale; | |||
import com.vaadin.annotations.Widgetset; | |||
import com.vaadin.server.VaadinRequest; | |||
import com.vaadin.tests.components.AbstractReindeerTestUI; | |||
import com.vaadin.tests.components.AbstractReindeerTestUIWithLog; | |||
import com.vaadin.ui.DateTimeField; | |||
import com.vaadin.ui.InlineDateTimeField; | |||
public class DateTimeFieldElementUI extends AbstractReindeerTestUI { | |||
@Widgetset("com.vaadin.DefaultWidgetSet") | |||
public class DateTimeFieldElementUI extends AbstractReindeerTestUIWithLog { | |||
public static final LocalDateTime TEST_DATE_TIME = LocalDateTime.of(2017, | |||
12, 13, 17, 58); | |||
public static final LocalDateTime ANOTHER_TEST_DATE_TIME = LocalDateTime | |||
.of(2016, 11, 12, 16, 57); | |||
@Override | |||
protected void setup(VaadinRequest request) { | |||
addComponent(new DateTimeField()); | |||
addComponent(new InlineDateTimeField()); | |||
log.setNumberLogRows(false); | |||
DateTimeField df = new DateTimeField(); | |||
df.addValueChangeListener(event -> { | |||
log("Default date field value set to " + event.getValue()); | |||
}); | |||
addComponent(df); | |||
InlineDateTimeField inlineDateTimeField = new InlineDateTimeField(); | |||
inlineDateTimeField.addValueChangeListener(event -> { | |||
log("Default inline date field value set to " + event.getValue()); | |||
}); | |||
addComponent(inlineDateTimeField); | |||
DateTimeField finnishDateTimeField = new DateTimeField("Finnish"); | |||
finnishDateTimeField.setId("fi"); | |||
finnishDateTimeField.setLocale(new Locale("fi", "FI")); | |||
finnishDateTimeField.setValue(TEST_DATE_TIME); | |||
finnishDateTimeField.addValueChangeListener(event -> { | |||
log("Finnish date field value set to " + event.getValue()); | |||
}); | |||
addComponent(finnishDateTimeField); | |||
DateTimeField usDateTimeField = new DateTimeField("US"); | |||
usDateTimeField.setId("us"); | |||
usDateTimeField.setLocale(Locale.US); | |||
usDateTimeField.setValue(TEST_DATE_TIME); | |||
usDateTimeField.addValueChangeListener(event -> { | |||
log("US date field value set to " + event.getValue()); | |||
}); | |||
addComponent(usDateTimeField); | |||
} | |||
@Override |
@@ -3,10 +3,13 @@ package com.vaadin.tests.components.datefield; | |||
import static org.hamcrest.MatcherAssert.assertThat; | |||
import static org.hamcrest.core.Is.is; | |||
import java.time.LocalDate; | |||
import org.junit.Assert; | |||
import org.junit.Test; | |||
import com.vaadin.testbench.elements.AbstractDateFieldElement; | |||
import com.vaadin.testbench.elements.DateFieldElement; | |||
import com.vaadin.testbench.elements.InlineDateFieldElement; | |||
import com.vaadin.tests.tb3.SingleBrowserTest; | |||
public class DateFieldElementTest extends SingleBrowserTest { | |||
@@ -15,8 +18,45 @@ public class DateFieldElementTest extends SingleBrowserTest { | |||
public void dateFieldElementIsLocated() { | |||
openTestURL(); | |||
assertThat($(DateFieldElement.class).all().size(), is(2)); | |||
assertThat($(AbstractDateFieldElement.class).all().size(), is(2)); | |||
assertThat($(DateFieldElement.class).all().size(), is(3)); | |||
assertThat($(InlineDateFieldElement.class).all().size(), is(1)); | |||
} | |||
@Test | |||
public void setGetValue() { | |||
openTestURL(); | |||
// No date set | |||
DateFieldElement defaultInitiallyEmpty = $(DateFieldElement.class) | |||
.first(); | |||
Assert.assertNull(defaultInitiallyEmpty.getDate()); | |||
defaultInitiallyEmpty.setDate(DateFieldElementUI.TEST_DATE_TIME); | |||
Assert.assertEquals(DateFieldElementUI.TEST_DATE_TIME, | |||
defaultInitiallyEmpty.getDate()); | |||
assertServerValue("Default date field", | |||
DateFieldElementUI.TEST_DATE_TIME); | |||
DateFieldElement fi = $(DateFieldElement.class).id("fi"); | |||
Assert.assertEquals(DateFieldElementUI.TEST_DATE_TIME, fi.getDate()); | |||
fi.setDate(DateFieldElementUI.ANOTHER_TEST_DATE_TIME); | |||
Assert.assertEquals(DateFieldElementUI.ANOTHER_TEST_DATE_TIME, | |||
fi.getDate()); | |||
assertServerValue("Finnish date field", | |||
DateFieldElementUI.ANOTHER_TEST_DATE_TIME); | |||
DateFieldElement us = $(DateFieldElement.class).id("us"); | |||
Assert.assertEquals(DateFieldElementUI.TEST_DATE_TIME, us.getDate()); | |||
us.setDate(DateFieldElementUI.ANOTHER_TEST_DATE_TIME); | |||
Assert.assertEquals(DateFieldElementUI.ANOTHER_TEST_DATE_TIME, | |||
us.getDate()); | |||
assertServerValue("US date field", | |||
DateFieldElementUI.ANOTHER_TEST_DATE_TIME); | |||
} | |||
private void assertServerValue(String id, LocalDate testDateTime) { | |||
Assert.assertEquals(id + " value set to " + testDateTime.toString(), | |||
getLogRow(0)); | |||
} | |||
@Override |
@@ -3,6 +3,9 @@ package com.vaadin.tests.components.datefield; | |||
import static org.hamcrest.MatcherAssert.assertThat; | |||
import static org.hamcrest.core.Is.is; | |||
import java.time.LocalDateTime; | |||
import org.junit.Assert; | |||
import org.junit.Test; | |||
import com.vaadin.testbench.elements.DateTimeFieldElement; | |||
@@ -12,13 +15,53 @@ import com.vaadin.tests.tb3.SingleBrowserTest; | |||
public class DateTimeFieldElementTest extends SingleBrowserTest { | |||
@Test | |||
public void dateFieldElementIsLocated() { | |||
public void DateTimeFieldElementIsLocated() { | |||
openTestURL(); | |||
assertThat($(DateTimeFieldElement.class).all().size(), is(1)); | |||
assertThat($(DateTimeFieldElement.class).all().size(), is(3)); | |||
assertThat($(InlineDateTimeFieldElement.class).all().size(), is(1)); | |||
} | |||
@Test | |||
public void setGetValue() { | |||
openTestURL(); | |||
// No date set | |||
DateTimeFieldElement defaultInitiallyEmpty = $( | |||
DateTimeFieldElement.class).first(); | |||
Assert.assertNull(defaultInitiallyEmpty.getDateTime()); | |||
defaultInitiallyEmpty | |||
.setDateTime(DateTimeFieldElementUI.TEST_DATE_TIME); | |||
Assert.assertEquals(DateTimeFieldElementUI.TEST_DATE_TIME, | |||
defaultInitiallyEmpty.getDateTime()); | |||
assertServerValue("Default date field", | |||
DateTimeFieldElementUI.TEST_DATE_TIME); | |||
DateTimeFieldElement fi = $(DateTimeFieldElement.class).id("fi"); | |||
Assert.assertEquals(DateTimeFieldElementUI.TEST_DATE_TIME, | |||
fi.getDateTime()); | |||
fi.setDateTime(DateTimeFieldElementUI.ANOTHER_TEST_DATE_TIME); | |||
Assert.assertEquals(DateTimeFieldElementUI.ANOTHER_TEST_DATE_TIME, | |||
fi.getDateTime()); | |||
assertServerValue("Finnish date field", | |||
DateTimeFieldElementUI.ANOTHER_TEST_DATE_TIME); | |||
DateTimeFieldElement us = $(DateTimeFieldElement.class).id("us"); | |||
Assert.assertEquals(DateTimeFieldElementUI.TEST_DATE_TIME, | |||
us.getDateTime()); | |||
us.setDateTime(DateTimeFieldElementUI.ANOTHER_TEST_DATE_TIME); | |||
Assert.assertEquals(DateTimeFieldElementUI.ANOTHER_TEST_DATE_TIME, | |||
us.getDateTime()); | |||
assertServerValue("US date field", | |||
DateTimeFieldElementUI.ANOTHER_TEST_DATE_TIME); | |||
} | |||
private void assertServerValue(String id, LocalDateTime testDateTime) { | |||
Assert.assertEquals(id + " value set to " + testDateTime.toString(), | |||
getLogRow(0)); | |||
} | |||
@Override | |||
protected Class<?> getUIClass() { | |||
return DateTimeFieldElementUI.class; |