]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix Push update race condition (#13562)
authorJuuso Valli <juuso@vaadin.com>
Mon, 26 May 2014 14:22:18 +0000 (17:22 +0300)
committerVaadin Code Review <review@vaadin.com>
Tue, 27 May 2014 07:29:30 +0000 (07:29 +0000)
Change-Id: I50094bc2d236f6dbb02a8b82d6cc9b5f7e4733a5

server/src/com/vaadin/ui/Table.java
uitest/src/com/vaadin/tests/components/table/ContainerSizeChangeTest.java

index b4d79f304c846d96f445cf3197e4c6d9dad4b648..a8265662ea25053de184800022c33ef547a0de7e 100644 (file)
@@ -2957,12 +2957,19 @@ public class Table extends AbstractSelect implements Action.Container,
                 if (value != null) {
                     reqFirstRowToPaint = value.intValue();
                 }
+
                 value = (Integer) variables.get("reqrows");
                 if (value != null) {
                     reqRowsToPaint = value.intValue();
+                    int size = size();
                     // sanity check
-                    if (reqFirstRowToPaint + reqRowsToPaint > size()) {
-                        reqRowsToPaint = size() - reqFirstRowToPaint;
+
+                    if (reqFirstRowToPaint >= size) {
+                        reqFirstRowToPaint = size;
+                    }
+
+                    if (reqFirstRowToPaint + reqRowsToPaint > size) {
+                        reqRowsToPaint = size - reqFirstRowToPaint;
                     }
                 }
             }
index a866e4a0c55840af208f8f41249cf7c07429d99d..041b23749cc83bbab3424a12166bd4ef82a69aa0 100644 (file)
@@ -1,19 +1,21 @@
 package com.vaadin.tests.components.table;
 
-import com.vaadin.testbench.By;
-import com.vaadin.testbench.elements.ButtonElement;
-import com.vaadin.testbench.elements.TableElement;
-import com.vaadin.tests.tb3.MultiBrowserTest;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import java.io.IOException;
+
 import junit.framework.Assert;
+
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.openqa.selenium.NoSuchElementException;
 
-import java.io.IOException;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
+import com.vaadin.testbench.By;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.TableElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
 
 public class ContainerSizeChangeTest extends MultiBrowserTest {
 
@@ -21,30 +23,37 @@ public class ContainerSizeChangeTest extends MultiBrowserTest {
     public ExpectedException thrown = ExpectedException.none();
 
     @Test
-    public void tableShouldLoadCorrectItems() throws IOException, InterruptedException {
+    public void tableShouldLoadCorrectItems() throws IOException,
+            InterruptedException {
         openTestURL();
 
-        ButtonElement decreaseSize = $(ButtonElement.class).caption("Decrease size").first();
-        decreaseSize.click(); //decreasing container size from 50 to 40
-        decreaseSize.click(); //decreasing container size from 40 to 30
+        ButtonElement decreaseSize = $(ButtonElement.class).caption(
+                "Decrease size").first();
+        decreaseSize.click(); // decreasing container size from 50 to 40
+        decreaseSize.click(); // decreasing container size from 40 to 30
 
         TableElement table = $(TableElement.class).first();
-        //TableElement scroll not working properly, so we need to do this. http://dev.vaadin.com/ticket/13826
-        testBenchElement(table.findElement(By.className("v-scrollable"))).scroll(1000);
+        // TableElement scroll not working properly, so we need to do this.
+        // http://dev.vaadin.com/ticket/13826
+        testBenchElement(table.findElement(By.className("v-scrollable")))
+                .scroll(1000);
 
-        //waitforvaadin not worky currently for table scroll, so we need to use thread sleep :(
-        Thread.sleep(1000);
+        // waitforvaadin not worky currently for table scroll, so we need to use
+        // thread sleep :(
+        Thread.sleep(1500);
 
         assertThatRowExists(table, 29);
         assertRowDoesNotExist(table, 30);
     }
 
     private void assertThatRowExists(TableElement table, int rowIndex) {
-        assertThat(table.getCell(rowIndex, 0).getText(), is(String.format("a %s", rowIndex)));
+        assertThat(table.getCell(rowIndex, 0).getText(),
+                is(String.format("a %s", rowIndex)));
     }
 
     private void assertRowDoesNotExist(TableElement table, int rowIndex) {
-        //This is a really crappy way to workaround JUnit's limitation to provide a proper assert.throws method...
+        // This is a really crappy way to workaround JUnit's limitation to
+        // provide a proper assert.throws method...
         thrown.expect(NoSuchElementException.class);
         table.getCell(rowIndex, 0);