From 81b2113120485a3eaeadc529a054baf902fcb2ed Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Thu, 17 Nov 2016 15:49:49 +0200 Subject: [PATCH] Mark TextField/TextArea as busy when a text change event is pending (#20469) Change-Id: I404985ae0be1e7dc65171b610032f8649e700f50 --- .../java/com/vaadin/client/ui/VTextField.java | 8 ++- .../textfield/TextChangeEvents.java | 6 ++ .../textfield/TextChangeEventsTest.java | 58 +++++++++++++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 uitest/src/test/java/com/vaadin/tests/components/textfield/TextChangeEventsTest.java diff --git a/client/src/main/java/com/vaadin/client/ui/VTextField.java b/client/src/main/java/com/vaadin/client/ui/VTextField.java index 946a2b624c..1c4f90874e 100644 --- a/client/src/main/java/com/vaadin/client/ui/VTextField.java +++ b/client/src/main/java/com/vaadin/client/ui/VTextField.java @@ -34,6 +34,7 @@ import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.TextBoxBase; import com.vaadin.client.ApplicationConnection; import com.vaadin.client.BrowserInfo; +import com.vaadin.client.DeferredWorker; import com.vaadin.client.WidgetUtil; import com.vaadin.shared.EventId; import com.vaadin.shared.ui.textfield.TextFieldConstants; @@ -45,7 +46,7 @@ import com.vaadin.shared.ui.textfield.TextFieldConstants; * */ public class VTextField extends TextBoxBase implements Field, ChangeHandler, - FocusHandler, BlurHandler, KeyDownHandler { + FocusHandler, BlurHandler, KeyDownHandler, DeferredWorker { /** * The input node CSS classname. @@ -528,4 +529,9 @@ public class VTextField extends TextBoxBase implements Field, ChangeHandler, } possibleInputError = false; } + + @Override + public boolean isWorkPending() { + return scheduled; + } } diff --git a/uitest/src/main/java/com/vaadin/tests/components/textfield/TextChangeEvents.java b/uitest/src/main/java/com/vaadin/tests/components/textfield/TextChangeEvents.java index b149cbce5c..9788482fc2 100644 --- a/uitest/src/main/java/com/vaadin/tests/components/textfield/TextChangeEvents.java +++ b/uitest/src/main/java/com/vaadin/tests/components/textfield/TextChangeEvents.java @@ -47,6 +47,12 @@ public class TextChangeEvents extends TestBase { ta.addListener(inputEventListener); getLayout().addComponent(ta); + TextArea tat = new TextArea("Timeout 3s"); + tat.addListener(inputEventListener); + tat.setTextChangeEventMode(TextChangeEventMode.TIMEOUT); + tat.setTextChangeTimeout(3000); + getLayout().addComponent(tat); + VaadinDeveloperNameField vd = new VaadinDeveloperNameField(); vd.addListener(inputEventListener); getLayout().addComponent(vd); diff --git a/uitest/src/test/java/com/vaadin/tests/components/textfield/TextChangeEventsTest.java b/uitest/src/test/java/com/vaadin/tests/components/textfield/TextChangeEventsTest.java new file mode 100644 index 0000000000..c000d37d0d --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/components/textfield/TextChangeEventsTest.java @@ -0,0 +1,58 @@ +package com.vaadin.tests.components.textfield; + +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.testbench.elements.TextAreaElement; +import com.vaadin.testbench.elements.TextFieldElement; +import com.vaadin.tests.tb3.SingleBrowserTest; + +public class TextChangeEventsTest extends SingleBrowserTest { + + @Test + public void textAreaWaitsForTextChangeEvents() { + openTestURL(); + + TextAreaElement taDefault = $(TextAreaElement.class) + .caption("Default text area").first(); + taDefault.sendKeys("abc"); + Assert.assertEquals( + "1. Text change event for Default text area, text content currently:'abc' Cursor at index:3", + getLogRow(0)); + + TextAreaElement taTimeout = $(TextAreaElement.class) + .caption("Timeout 3s").first(); + taTimeout.sendKeys("abc"); + Assert.assertEquals( + "2. Text change event for Timeout 3s, text content currently:'abc' Cursor at index:3", + getLogRow(0)); + + } + + @Test + public void textFieldWaitsForTextChangeEvents() { + openTestURL(); + + TextFieldElement tfDefault = $(TextFieldElement.class) + .caption("Default").first(); + tfDefault.sendKeys("abc"); + Assert.assertEquals( + "1. Text change event for Default, text content currently:'abc' Cursor at index:3", + getLogRow(0)); + + TextFieldElement tfEager = $(TextFieldElement.class).caption("Eager") + .first(); + tfEager.sendKeys("abc"); + Assert.assertEquals( + "2. Text change event for Eager, text content currently:'abc' Cursor at index:3", + getLogRow(0)); + + TextFieldElement tfTimeout = $(TextFieldElement.class) + .caption("Timeout 3s").first(); + tfTimeout.sendKeys("abc"); + Assert.assertEquals( + "3. Text change event for Timeout 3s, text content currently:'abc' Cursor at index:3", + getLogRow(0)); + + } +} -- 2.39.5