This reverts commit 2ed3a310ca
.
Conflicts:
client/src/com/vaadin/client/ui/VScrollTable.java
client/src/com/vaadin/client/ui/table/TableConnector.java
Change-Id: Ie18f4ad61a88c17cd2b8eff677836fc68abffc15
tags/7.2.6
/* | /* | ||||
* (non-Javadoc) | * (non-Javadoc) | ||||
* | |||||
* | |||||
* @see com.vaadin.client.ui.AbstractComponentConnector#onUnregister() | * @see com.vaadin.client.ui.AbstractComponentConnector#onUnregister() | ||||
*/ | */ | ||||
@Override | @Override | ||||
/* | /* | ||||
* (non-Javadoc) | * (non-Javadoc) | ||||
* | |||||
* | |||||
* @see com.vaadin.client.Paintable#updateFromUIDL(com.vaadin.client.UIDL, | * @see com.vaadin.client.Paintable#updateFromUIDL(com.vaadin.client.UIDL, | ||||
* com.vaadin.client.ApplicationConnection) | * com.vaadin.client.ApplicationConnection) | ||||
*/ | */ | ||||
getWidget().updatePageLength(uidl); | getWidget().updatePageLength(uidl); | ||||
getWidget().updateFirstVisibleAndScrollIfNeeded(uidl); | getWidget().updateFirstVisibleAndScrollIfNeeded(uidl); | ||||
if (totalRowsHaveChanged) { | |||||
getWidget().totalRowsHaveChanged(); | |||||
} | |||||
getWidget().showRowHeaders = uidl.getBooleanAttribute("rowheaders"); | getWidget().showRowHeaders = uidl.getBooleanAttribute("rowheaders"); | ||||
getWidget().showColHeaders = uidl.getBooleanAttribute("colheaders"); | getWidget().showColHeaders = uidl.getBooleanAttribute("colheaders"); |
* position not be updated correctly when the lazy rows are | * position not be updated correctly when the lazy rows are | ||||
* finally rendered. | * finally rendered. | ||||
*/ | */ | ||||
currentPageFirstItemIndexOnLastPage = currentPageFirstItemIndex; | |||||
currentPageFirstItemIndexOnLastPage = indexOnLastPage; | |||||
} | } | ||||
} else { | } else { |
/* | |||||
* 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.table; | |||||
/** | |||||
* | |||||
* @author Vaadin Ltd | |||||
*/ | |||||
import com.vaadin.data.Item; | |||||
import com.vaadin.data.util.IndexedContainer; | |||||
import com.vaadin.server.VaadinRequest; | |||||
import com.vaadin.tests.components.AbstractTestUI; | |||||
import com.vaadin.ui.Button.ClickEvent; | |||||
import com.vaadin.ui.Label; | |||||
import com.vaadin.ui.NativeButton; | |||||
import com.vaadin.ui.Table; | |||||
import com.vaadin.ui.VerticalLayout; | |||||
/* | |||||
* 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. | |||||
*/ | |||||
/** | |||||
* | |||||
* @author Vaadin Ltd | |||||
*/ | |||||
@SuppressWarnings("serial") | |||||
public class TableScrollAfterAddRow extends AbstractTestUI { | |||||
/* | |||||
* (non-Javadoc) | |||||
* | |||||
* @see com.vaadin.ui.UI#init(com.vaadin.server.VaadinRequest) | |||||
*/ | |||||
@Override | |||||
protected void setup(VaadinRequest request) { | |||||
final int totalRows = 100; | |||||
final VerticalLayout layout = new VerticalLayout(); | |||||
final IndexedContainer datasource = new IndexedContainer(); | |||||
datasource.addContainerProperty("value", Integer.class, -1); | |||||
for (int i = 0; i < totalRows; i++) { | |||||
addRow(datasource); | |||||
} | |||||
final Table table = new Table(); | |||||
table.setContainerDataSource(datasource); | |||||
layout.addComponent(table); | |||||
addComponent(layout); | |||||
final Label label = new Label(""); | |||||
layout.addComponent(label); | |||||
NativeButton addRowButton = new NativeButton("Add row", | |||||
new NativeButton.ClickListener() { | |||||
@Override | |||||
public void buttonClick(ClickEvent event) { | |||||
addRow(datasource); | |||||
} | |||||
}); | |||||
NativeButton jumpToLastRowButton = new NativeButton("Jump to last row", | |||||
new NativeButton.ClickListener() { | |||||
@Override | |||||
public void buttonClick(ClickEvent event) { | |||||
jumpToLastRow(table); | |||||
} | |||||
}); | |||||
NativeButton jumpTo15thRowButton = new NativeButton("Jump to 15th row", | |||||
new NativeButton.ClickListener() { | |||||
@Override | |||||
public void buttonClick(ClickEvent event) { | |||||
jumpToFifteenthRow(table); | |||||
} | |||||
}); | |||||
NativeButton jumpToFirstRowButton = new NativeButton( | |||||
"Jump to first row", new NativeButton.ClickListener() { | |||||
@Override | |||||
public void buttonClick(ClickEvent event) { | |||||
jumpToFirstRow(table); | |||||
} | |||||
}); | |||||
NativeButton updateLabelButton = new NativeButton("UpdateLabel", | |||||
new NativeButton.ClickListener() { | |||||
@Override | |||||
public void buttonClick(ClickEvent event) { | |||||
label.setValue(Integer.toString(table | |||||
.getCurrentPageFirstItemIndex())); | |||||
} | |||||
}); | |||||
layout.addComponent(addRowButton); | |||||
layout.addComponent(jumpToLastRowButton); | |||||
layout.addComponent(jumpTo15thRowButton); | |||||
layout.addComponent(jumpToFirstRowButton); | |||||
layout.addComponent(updateLabelButton); | |||||
} | |||||
private void jumpToFifteenthRow(Table table) { | |||||
table.setCurrentPageFirstItemIndex(14); | |||||
} | |||||
private void jumpToLastRow(Table table) { | |||||
int visibleRows = table.getContainerDataSource().size(); | |||||
table.setCurrentPageFirstItemIndex(visibleRows - 1); | |||||
} | |||||
private void jumpToFirstRow(Table table) { | |||||
table.setCurrentPageFirstItemIndex(0); | |||||
} | |||||
private void addRow(IndexedContainer datasource) { | |||||
int rowNumber = datasource.size(); | |||||
Item row = datasource.addItem(rowNumber); | |||||
row.getItemProperty("value").setValue(rowNumber); | |||||
} | |||||
/* | |||||
* (non-Javadoc) | |||||
* | |||||
* @see com.vaadin.tests.components.AbstractTestUI#getTestDescription() | |||||
*/ | |||||
@Override | |||||
protected String getTestDescription() { | |||||
// TODO Auto-generated method stub | |||||
return ""; | |||||
} | |||||
/* | |||||
* (non-Javadoc) | |||||
* | |||||
* @see com.vaadin.tests.components.AbstractTestUI#getTicketNumber() | |||||
*/ | |||||
@Override | |||||
protected Integer getTicketNumber() { | |||||
return 14147; | |||||
} | |||||
} |
/* | |||||
* 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.table; | |||||
import static org.junit.Assert.assertEquals; | |||||
import org.junit.Assert; | |||||
import org.junit.Before; | |||||
import org.junit.Test; | |||||
import org.openqa.selenium.By; | |||||
import org.openqa.selenium.JavascriptExecutor; | |||||
import org.openqa.selenium.WebElement; | |||||
import com.vaadin.testbench.commands.TestBenchCommandExecutor; | |||||
import com.vaadin.testbench.elements.ButtonElement; | |||||
import com.vaadin.testbench.elements.LabelElement; | |||||
import com.vaadin.testbench.screenshot.ImageComparison; | |||||
import com.vaadin.testbench.screenshot.ReferenceNameGenerator; | |||||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||||
/** | |||||
* | |||||
* @author Vaadin Ltd | |||||
*/ | |||||
public class TableScrollAfterAddRowTest extends MultiBrowserTest { | |||||
@Before | |||||
public void init() { | |||||
openTestURL(); | |||||
} | |||||
@Test | |||||
public void testJumpToFirstRow() { | |||||
jumpToFifteenthRow(); | |||||
jumpToFirstRow(); | |||||
assertEquals("0", getCurrentPageFirstItemIndex()); | |||||
} | |||||
@Test | |||||
public void testAddRowAfterJumpToLastRow() throws InterruptedException { | |||||
jumpToLastRow(); | |||||
addRow(); | |||||
sleep(200); | |||||
assertEquals("85", getCurrentPageFirstItemIndex()); | |||||
} | |||||
@Test | |||||
public void testAddRowAfterJumpingToLastRowAndScrollingUp() | |||||
throws InterruptedException { | |||||
jumpToLastRow(); | |||||
scrollUp(); | |||||
addRow(); | |||||
sleep(200); | |||||
Assert.assertNotEquals("86", getCurrentPageFirstItemIndex()); | |||||
} | |||||
private void scrollUp() { | |||||
WebElement actualElement = getDriver().findElement( | |||||
By.className("v-table-body-wrapper")); | |||||
JavascriptExecutor js = new TestBenchCommandExecutor(getDriver(), | |||||
new ImageComparison(), new ReferenceNameGenerator()); | |||||
js.executeScript("arguments[0].scrollTop = " + 30, actualElement); | |||||
} | |||||
private String getCurrentPageFirstItemIndex() { | |||||
ButtonElement updateLabelButton = $(ButtonElement.class).get(4); | |||||
LabelElement label = $(LabelElement.class).get(1); | |||||
updateLabelButton.click(); | |||||
return label.getText(); | |||||
} | |||||
private void addRow() { | |||||
ButtonElement button = $(ButtonElement.class).get(0); | |||||
button.click(); | |||||
} | |||||
private void jumpToFirstRow() { | |||||
ButtonElement button = $(ButtonElement.class).get(3); | |||||
button.click(); | |||||
} | |||||
private void jumpToFifteenthRow() { | |||||
ButtonElement button = $(ButtonElement.class).get(2); | |||||
button.click(); | |||||
} | |||||
private void jumpToLastRow() { | |||||
ButtonElement button = $(ButtonElement.class).get(1); | |||||
button.click(); | |||||
} | |||||
} |