]> source.dussan.org Git - vaadin-framework.git/commitdiff
Mark TextField/TextArea as busy when a text change event is pending (#20469)
authorArtur Signell <artur@vaadin.com>
Thu, 17 Nov 2016 13:49:49 +0000 (15:49 +0200)
committerArtur Signell <artur@vaadin.com>
Mon, 21 Nov 2016 09:20:16 +0000 (09:20 +0000)
Change-Id: I404985ae0be1e7dc65171b610032f8649e700f50

client/src/main/java/com/vaadin/client/ui/VTextField.java
uitest/src/main/java/com/vaadin/tests/components/textfield/TextChangeEvents.java
uitest/src/test/java/com/vaadin/tests/components/textfield/TextChangeEventsTest.java [new file with mode: 0644]

index 946a2b624c107bffc3a14641101135e80717685d..1c4f90874eb3a1ba6c98386a2accf2b8781dda84 100644 (file)
@@ -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;
+    }
 }
index b149cbce5c16be03345be13501ad53380fce78fe..9788482fc25c758a141a998a3fab09e6765cc06c 100644 (file)
@@ -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 (file)
index 0000000..c000d37
--- /dev/null
@@ -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));
+
+    }
+}