From 033174a9d7395baabe97d6cfbca60ed3ea6928eb Mon Sep 17 00:00:00 2001 From: hp279 Date: Thu, 22 May 2014 04:30:41 -0700 Subject: [PATCH] Fix VTextField w/ InputPrompt and ShortcutListener (#13492) Previously, VTextField value was not updated when used w/ InputPrompt and ShortcutListener. Change-Id: I53631fe4e866dc6a861d1ea9d263dd5204ec6d7e --- .../src/com/vaadin/client/ui/VTextField.java | 5 +- .../textfield/InputPromptGetText.java | 96 +++++++++++++++++++ .../textfield/InputPromptGetTextTest.java | 59 ++++++++++++ 3 files changed, 157 insertions(+), 3 deletions(-) create mode 100644 uitest/src/com/vaadin/tests/components/textfield/InputPromptGetText.java create mode 100644 uitest/src/com/vaadin/tests/components/textfield/InputPromptGetTextTest.java diff --git a/client/src/com/vaadin/client/ui/VTextField.java b/client/src/com/vaadin/client/ui/VTextField.java index 1968c7e0a6..b402ced218 100644 --- a/client/src/com/vaadin/client/ui/VTextField.java +++ b/client/src/com/vaadin/client/ui/VTextField.java @@ -389,9 +389,8 @@ public class VTextField extends TextBoxBase implements Field, ChangeHandler, client.updateVariable(paintableId, EventId.BLUR, "", false); } - String newText = getText(); - if (!prompting && newText != null - && !newText.equals(valueBeforeEdit)) { + String newText = prompting ? "" : getText(); + if (newText != null && !newText.equals(valueBeforeEdit)) { sendValueChange = immediate; client.updateVariable(paintableId, "text", newText, false); valueBeforeEdit = newText; diff --git a/uitest/src/com/vaadin/tests/components/textfield/InputPromptGetText.java b/uitest/src/com/vaadin/tests/components/textfield/InputPromptGetText.java new file mode 100644 index 0000000000..e117657a3a --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/textfield/InputPromptGetText.java @@ -0,0 +1,96 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.components.textfield; + +import com.vaadin.annotations.Theme; +import com.vaadin.event.ShortcutAction.KeyCode; +import com.vaadin.event.ShortcutListener; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Label; +import com.vaadin.ui.TextField; + +/** + * To verify bug fix: Reproducing of bug Textfield value not updated when + * InputPromt and ShortcutListener are used + * + * #13492 + * + * @author Vaadin Ltd + */ +@Theme("reindeer") +public class InputPromptGetText extends AbstractTestUI { + + static final String FIELD = "field"; + static final String BUTTON = "button"; + static final String LABEL1 = "label1"; + static final String LABEL2 = "label2"; + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.components.AbstractTestUI#setup(com.vaadin.server. + * VaadinRequest) + */ + @Override + protected void setup(VaadinRequest request) { + + final TextField tf = new TextField(); + tf.setId(FIELD); + tf.setInputPrompt("input text here"); + tf.setImmediate(true); + tf.setNullRepresentation(""); + + Button button = new Button("Click Me"); + button.setId(BUTTON); + button.addClickListener(new Button.ClickListener() { + @Override + public void buttonClick(ClickEvent event) { + String input = tf.getValue(); + Label label = new Label("Your input was: " + input); + label.setId(LABEL2); + getLayout().addComponent(label); + } + }); + tf.addShortcutListener(new ShortcutListener("Shortcut", KeyCode.ENTER, + null) { + + @Override + public void handleAction(Object sender, Object target) { + String input = tf.getValue(); + Label label = new Label("Your input was: " + input); + label.setId(LABEL1); + getLayout().addComponent(label); + } + }); + + getLayout().addComponent(tf); + getLayout().addComponent(button); + } + + @Override + protected String getTestDescription() { + return "Reproducing of bug Textfield value not updated when InputPromt and ShortcutListener are used"; + } + + @Override + protected Integer getTicketNumber() { + return 13492; + } + +} \ No newline at end of file diff --git a/uitest/src/com/vaadin/tests/components/textfield/InputPromptGetTextTest.java b/uitest/src/com/vaadin/tests/components/textfield/InputPromptGetTextTest.java new file mode 100644 index 0000000000..3128ae3917 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/textfield/InputPromptGetTextTest.java @@ -0,0 +1,59 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.components.textfield; + +import org.apache.commons.lang.RandomStringUtils; +import org.junit.Assert; +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.Keys; +import org.openqa.selenium.WebElement; + +import com.vaadin.tests.tb3.MultiBrowserTest; + +public class InputPromptGetTextTest extends MultiBrowserTest { + + @Test + public void test() { + openTestURL(); + + WebElement field = getDriver().findElement( + By.id(InputPromptGetText.FIELD)); + + WebElement button = getDriver().findElement( + By.id(InputPromptGetText.BUTTON)); + + String string = getRandomString(); + field.sendKeys(string + "\n"); + + String selectAll = Keys.chord(Keys.CONTROL, "a"); + field.sendKeys(selectAll); + field.sendKeys(Keys.BACK_SPACE); + + button.click(); + + WebElement label = getDriver().findElement( + By.id(InputPromptGetText.LABEL2)); + + Assert.assertEquals("Your input was:", label.getText().trim()); + } + + private String getRandomString() { + String string = RandomStringUtils.randomAlphanumeric(3); + return string; + } + +} -- 2.39.5