From c8d4c9e8cf1fa869c89751dc9a9b55f9be64773f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sauli=20T=C3=A4hk=C3=A4p=C3=A4=C3=A4?= Date: Fri, 16 Jan 2015 23:19:06 +0200 Subject: [PATCH] Update text value also with timer triggered text change events. (#16270) Change-Id: I0e074c1ac47cb469a34a5c90533ca0dcfaf2e7e1 --- .../src/com/vaadin/client/ui/VTextField.java | 3 +- .../src/com/vaadin/ui/AbstractTextField.java | 6 ++- .../TextFieldWithPropertyFormatterTest.java | 25 +++++++----- .../components/TextFieldValueChangeTest.java | 14 +++---- .../TimerTriggeredTextChangeEvent.java | 40 +++++++++++++++++++ .../TimerTriggeredTextChangeEventTest.java | 27 +++++++++++++ 6 files changed, 95 insertions(+), 20 deletions(-) create mode 100644 uitest/src/com/vaadin/tests/components/textfield/TimerTriggeredTextChangeEvent.java create mode 100644 uitest/src/com/vaadin/tests/components/textfield/TimerTriggeredTextChangeEventTest.java diff --git a/client/src/com/vaadin/client/ui/VTextField.java b/client/src/com/vaadin/client/ui/VTextField.java index b402ced218..792ea23a8a 100644 --- a/client/src/com/vaadin/client/ui/VTextField.java +++ b/client/src/com/vaadin/client/ui/VTextField.java @@ -392,7 +392,8 @@ public class VTextField extends TextBoxBase implements Field, ChangeHandler, String newText = prompting ? "" : getText(); if (newText != null && !newText.equals(valueBeforeEdit)) { sendValueChange = immediate; - client.updateVariable(paintableId, "text", newText, false); + client.updateVariable(paintableId, + TextFieldConstants.VAR_CUR_TEXT, newText, false); valueBeforeEdit = newText; valueBeforeEditIsSynced = true; } diff --git a/server/src/com/vaadin/ui/AbstractTextField.java b/server/src/com/vaadin/ui/AbstractTextField.java index 93025ac0fd..5f1bec2488 100644 --- a/server/src/com/vaadin/ui/AbstractTextField.java +++ b/server/src/com/vaadin/ui/AbstractTextField.java @@ -182,11 +182,13 @@ public abstract class AbstractTextField extends AbstractField implements } // Sets the text - if (variables.containsKey("text") && !isReadOnly()) { + if (variables.containsKey(TextFieldConstants.VAR_CUR_TEXT) && + !isReadOnly()) { // Only do the setting if the string representation of the value // has been updated - String newValue = (String) variables.get("text"); + String newValue = (String) + variables.get(TextFieldConstants.VAR_CUR_TEXT); // server side check for max length if (getMaxLength() != -1 && newValue.length() > getMaxLength()) { diff --git a/server/tests/src/com/vaadin/tests/server/component/textfield/TextFieldWithPropertyFormatterTest.java b/server/tests/src/com/vaadin/tests/server/component/textfield/TextFieldWithPropertyFormatterTest.java index 8f2bec455b..624a8eaf20 100644 --- a/server/tests/src/com/vaadin/tests/server/component/textfield/TextFieldWithPropertyFormatterTest.java +++ b/server/tests/src/com/vaadin/tests/server/component/textfield/TextFieldWithPropertyFormatterTest.java @@ -1,17 +1,21 @@ package com.vaadin.tests.server.component.textfield; -import java.util.Collections; - -import junit.framework.TestCase; - import com.vaadin.data.Property; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.data.util.ObjectProperty; import com.vaadin.data.util.PropertyFormatter; +import com.vaadin.shared.ui.textfield.TextFieldConstants; import com.vaadin.ui.TextField; +import org.junit.Before; +import org.junit.Test; -public class TextFieldWithPropertyFormatterTest extends TestCase { +import java.util.Collections; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class TextFieldWithPropertyFormatterTest { private static final String INPUT_VALUE = "foo"; private static final String PARSED_VALUE = "BAR"; @@ -24,10 +28,8 @@ public class TextFieldWithPropertyFormatterTest extends TestCase { private int listenerCalled; private int repainted; - @Override - protected void setUp() throws Exception { - super.setUp(); - + @Before + public void setUp() throws Exception { field = new TextField() { @Override public void markAsDirty() { @@ -70,6 +72,7 @@ public class TextFieldWithPropertyFormatterTest extends TestCase { repainted = 0; } + @Test public void testWithServerApi() { checkInitialState(); @@ -93,11 +96,13 @@ public class TextFieldWithPropertyFormatterTest extends TestCase { assertEquals(FORMATTED_VALUE, field.getValue()); } + @Test public void testWithSimulatedClientSideChange() { checkInitialState(); field.changeVariables(null, - Collections.singletonMap("text", (Object) INPUT_VALUE)); + Collections.singletonMap(TextFieldConstants.VAR_CUR_TEXT, + (Object) INPUT_VALUE)); checkEndState(); diff --git a/server/tests/src/com/vaadin/tests/server/components/TextFieldValueChangeTest.java b/server/tests/src/com/vaadin/tests/server/components/TextFieldValueChangeTest.java index cfceb6f7d7..f25664c3cc 100644 --- a/server/tests/src/com/vaadin/tests/server/components/TextFieldValueChangeTest.java +++ b/server/tests/src/com/vaadin/tests/server/components/TextFieldValueChangeTest.java @@ -1,15 +1,15 @@ package com.vaadin.tests.server.components; -import java.util.HashMap; -import java.util.Map; - -import org.easymock.EasyMock; -import org.junit.Assert; - import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.util.ObjectProperty; +import com.vaadin.shared.ui.textfield.TextFieldConstants; import com.vaadin.ui.AbstractField; import com.vaadin.ui.TextField; +import org.easymock.EasyMock; +import org.junit.Assert; + +import java.util.HashMap; +import java.util.Map; /** * Check that the value change listener for a text field is triggered exactly @@ -38,7 +38,7 @@ public class TextFieldValueChangeTest extends @Override protected void setValue(AbstractField field) { Map variables = new HashMap(); - variables.put("text", "newValue"); + variables.put(TextFieldConstants.VAR_CUR_TEXT, "newValue"); ((TextField) field).changeVariables(field, variables); } diff --git a/uitest/src/com/vaadin/tests/components/textfield/TimerTriggeredTextChangeEvent.java b/uitest/src/com/vaadin/tests/components/textfield/TimerTriggeredTextChangeEvent.java new file mode 100644 index 0000000000..89f8215547 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/textfield/TimerTriggeredTextChangeEvent.java @@ -0,0 +1,40 @@ +package com.vaadin.tests.components.textfield; + +import com.vaadin.event.FieldEvents; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.AbstractTextField; +import com.vaadin.ui.Label; +import com.vaadin.ui.TextField; + +public class TimerTriggeredTextChangeEvent extends AbstractTestUI { + @Override + protected void setup(VaadinRequest request) { + final TextField textfield = new TextField(); + final Label serverValue = new Label(); + serverValue.setCaption("Server:"); + + textfield.addTextChangeListener(new FieldEvents.TextChangeListener() { + @Override + public void textChange(FieldEvents.TextChangeEvent event) { + serverValue.setValue(textfield.getValue()); + } + }); + + textfield.setTextChangeEventMode( + AbstractTextField.TextChangeEventMode.EAGER); + + addComponent(textfield); + addComponent(serverValue); + } + + @Override + protected Integer getTicketNumber() { + return 16270; + } + + @Override + protected String getTestDescription() { + return "Text value in server should always be updated."; + } +} diff --git a/uitest/src/com/vaadin/tests/components/textfield/TimerTriggeredTextChangeEventTest.java b/uitest/src/com/vaadin/tests/components/textfield/TimerTriggeredTextChangeEventTest.java new file mode 100644 index 0000000000..c0fed66851 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/textfield/TimerTriggeredTextChangeEventTest.java @@ -0,0 +1,27 @@ +package com.vaadin.tests.components.textfield; + +import com.vaadin.testbench.elements.LabelElement; +import com.vaadin.testbench.elements.TextFieldElement; +import com.vaadin.tests.tb3.MultiBrowserTest; +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; + +public class TimerTriggeredTextChangeEventTest extends MultiBrowserTest { + + @Test + public void serverValueIsUpdated() { + openTestURL(); + + TextFieldElement textfield = $(TextFieldElement.class).first(); + LabelElement serverValue = $(LabelElement.class).caption("Server:") + .first(); + + textfield.sendKeys("f"); + + assertThat(textfield.getValue(), is("f")); + assertThat(serverValue.getText(), is("f")); + } + +} \ No newline at end of file -- 2.39.5