From: Juuso Valli Date: Mon, 26 May 2014 14:22:18 +0000 (+0300) Subject: Fix Push update race condition (#13562) X-Git-Tag: 7.3.0.alpha3~1^2~3^2~7 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=930fd30a937ef69ba45e501bdee78773bad5523f;p=vaadin-framework.git Fix Push update race condition (#13562) Change-Id: I50094bc2d236f6dbb02a8b82d6cc9b5f7e4733a5 --- diff --git a/server/src/com/vaadin/ui/Table.java b/server/src/com/vaadin/ui/Table.java index b4d79f304c..a8265662ea 100644 --- a/server/src/com/vaadin/ui/Table.java +++ b/server/src/com/vaadin/ui/Table.java @@ -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; } } } diff --git a/uitest/src/com/vaadin/tests/components/table/ContainerSizeChangeTest.java b/uitest/src/com/vaadin/tests/components/table/ContainerSizeChangeTest.java index a866e4a0c5..041b23749c 100644 --- a/uitest/src/com/vaadin/tests/components/table/ContainerSizeChangeTest.java +++ b/uitest/src/com/vaadin/tests/components/table/ContainerSizeChangeTest.java @@ -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);