(#12504,#12667) Change-Id: Ie0a9a8d9913116520b766062ebabdb771a76d1b6tags/7.1.8
@@ -2215,11 +2215,13 @@ public class VCalendarPanel extends FocusableFlexTable implements | |||
* - the allowed range's start date | |||
*/ | |||
public void setRangeStart(Date rangeStart) { | |||
this.rangeStart = rangeStart; | |||
if (initialRenderDone) { | |||
// Dynamic updates to the range needs to render the calendar to | |||
// update the element stylenames | |||
renderCalendar(); | |||
if (this.rangeStart != rangeStart) { | |||
this.rangeStart = rangeStart; | |||
if (initialRenderDone) { | |||
// Dynamic updates to the range needs to render the calendar to | |||
// update the element stylenames | |||
renderCalendar(); | |||
} | |||
} | |||
} | |||
@@ -2232,11 +2234,13 @@ public class VCalendarPanel extends FocusableFlexTable implements | |||
* - the allowed range's end date | |||
*/ | |||
public void setRangeEnd(Date rangeEnd) { | |||
this.rangeEnd = rangeEnd; | |||
if (initialRenderDone) { | |||
// Dynamic updates to the range needs to render the calendar to | |||
// update the element stylenames | |||
renderCalendar(); | |||
if (this.rangeEnd != rangeEnd) { | |||
this.rangeEnd = rangeEnd; | |||
if (initialRenderDone) { | |||
// Dynamic updates to the range needs to render the calendar to | |||
// update the element stylenames | |||
renderCalendar(); | |||
} | |||
} | |||
} | |||
} |
@@ -77,9 +77,6 @@ public class PopupDateFieldConnector extends TextualDateConnector { | |||
String oldLocale = getWidget().getCurrentLocale(); | |||
boolean lastReadOnlyState = getWidget().isReadonly(); | |||
boolean lastEnabledState = getWidget().isEnabled(); | |||
getWidget().parsable = uidl.getBooleanAttribute("parsable"); | |||
super.updateFromUIDL(uidl, client); | |||
@@ -92,7 +89,8 @@ public class PopupDateFieldConnector extends TextualDateConnector { | |||
.getCurrentResolution()) { | |||
getWidget().calendar.setResolution(getWidget() | |||
.getCurrentResolution()); | |||
if (getWidget().calendar.getDate() != null) { | |||
if (getWidget().calendar.getDate() != null | |||
&& getWidget().getCurrentDate() != null) { | |||
getWidget().calendar.setDate((Date) getWidget() | |||
.getCurrentDate().clone()); | |||
// force re-render when changing resolution only | |||
@@ -101,7 +99,7 @@ public class PopupDateFieldConnector extends TextualDateConnector { | |||
} | |||
// Force re-render of calendar if locale has changed (#12153) | |||
if (getWidget().getCurrentLocale() != oldLocale) { | |||
if (!getWidget().getCurrentLocale().equals(oldLocale)) { | |||
getWidget().calendar.renderCalendar(); | |||
} | |||
@@ -113,6 +111,7 @@ public class PopupDateFieldConnector extends TextualDateConnector { | |||
.setFocusChangeListener(new FocusChangeListener() { | |||
@Override | |||
public void focusChanged(Date date) { | |||
getWidget().updateValue(date); | |||
getWidget().buildDate(); | |||
Date date2 = getWidget().calendar.getDate(); |
@@ -7,8 +7,17 @@ import java.util.Date; | |||
import java.util.LinkedHashMap; | |||
import java.util.Locale; | |||
import org.junit.Assert; | |||
import org.junit.Test; | |||
import org.openqa.selenium.By; | |||
import org.openqa.selenium.Dimension; | |||
import org.openqa.selenium.NoSuchElementException; | |||
import org.openqa.selenium.WebElement; | |||
import org.openqa.selenium.interactions.Actions; | |||
import com.vaadin.shared.ui.datefield.Resolution; | |||
import com.vaadin.tests.components.abstractfield.AbstractFieldTest; | |||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||
import com.vaadin.ui.DateField; | |||
public class DateFieldTest<T extends DateField> extends AbstractFieldTest<T> { | |||
@@ -140,4 +149,98 @@ public class DateFieldTest<T extends DateField> extends AbstractFieldTest<T> { | |||
} | |||
}; | |||
public static class Tb3DateFieldTests extends MultiBrowserTest { | |||
@Override | |||
protected boolean isDebug() { | |||
// run in debug to see js errors | |||
return true; | |||
} | |||
@Test | |||
public void testMakingRequired() throws InterruptedException { | |||
Thread.sleep(1000); | |||
menu("Component"); | |||
menuSub("State"); | |||
menu("Required"); | |||
assertNoErrorNotification(); | |||
} | |||
private void assertNoErrorNotification() { | |||
try { | |||
getDriver().findElement( | |||
By.xpath("//div[contains(@class, 'v-Notification') ]")); | |||
Assert.fail("Error notification shown!"); | |||
} catch (NoSuchElementException e) { | |||
// As expected | |||
} | |||
} | |||
@Test | |||
public void testValueAfterOpeningPopupInRequiredField() | |||
throws InterruptedException { | |||
Thread.sleep(1000); | |||
menu("Component"); | |||
menuSub("State"); | |||
menu("Required"); | |||
menu("Component"); | |||
menuSub("Features"); | |||
menuSub("Resolution"); | |||
menu("Month"); | |||
menu("Component"); | |||
menuSub("Listeners"); | |||
menu("Value change listener"); | |||
String inputtedValue = "2/12"; | |||
getInput().sendKeys(inputtedValue); | |||
openPopup(); | |||
closePopup(); | |||
String actual = getInput().getAttribute("value"); | |||
Assert.assertEquals(inputtedValue, actual); | |||
assertNoErrorNotification(); | |||
} | |||
private void openPopup() throws InterruptedException { | |||
Dimension size = getInput().getSize(); | |||
new Actions(getDriver()).moveToElement(getInput(), 0, 0) | |||
.moveByOffset(size.getWidth() + 5, size.getHeight() / 2) | |||
.click(); | |||
// This fails in Opera for some weird reason | |||
// getDriver().findElement(By.className("v-datefield-button")).click(); | |||
} | |||
private WebElement getInput() { | |||
return getDriver().findElement(By.xpath("//input")); | |||
} | |||
private void closePopup() { | |||
getDriver().findElement(By.tagName("body")).click(); | |||
} | |||
/** | |||
* @since | |||
* @param string | |||
*/ | |||
private void menuSub(String string) { | |||
getDriver().findElement( | |||
By.xpath("//span[text() = '" + string + "']")).click(); | |||
new Actions(getDriver()).moveByOffset(100, 0).build().perform(); | |||
} | |||
/** | |||
* @since | |||
* @param string | |||
*/ | |||
private void menu(String string) { | |||
getDriver().findElement( | |||
By.xpath("//span[text() = '" + string + "']")).click(); | |||
} | |||
} | |||
} |