tags/7.2.09c29442
Replace SelectionRangeDragging TB2 test with TB3 test9fa230d
Avoid eagerly layouting from VScrollTable.updateFromUIDL (#13188) Change-Id: I4f1395a13e8b1eae44a0030a3679475a3db9160a
@@ -6720,8 +6720,9 @@ public class VScrollTable extends FlowPanel implements HasWidgets, | |||
} | |||
int heightBefore = getOffsetHeight(); | |||
scrollBodyPanel.setHeight(bodyHeight + "px"); | |||
if (heightBefore != getOffsetHeight()) { | |||
Util.notifyParentOfSizeChange(VScrollTable.this, false); | |||
Util.notifyParentOfSizeChange(VScrollTable.this, rendering); | |||
} | |||
} | |||
Scheduler.get().scheduleDeferred(new Command() { |
@@ -48,7 +48,12 @@ public class TreeTableConnector extends TableConnector { | |||
.getIntAttribute(TreeTableConstants.ATTRIBUTE_HIERARCHY_COLUMN_INDEX) | |||
: 0; | |||
int oldTotalRows = getWidget().getTotalRows(); | |||
super.updateFromUIDL(uidl, client); | |||
// super.updateFromUIDL set rendering to false, even though we continue | |||
// rendering here. Set it back to true. | |||
getWidget().rendering = true; | |||
if (getWidget().collapseRequest) { | |||
if (getWidget().collapsedRowKey != null | |||
&& getWidget().scrollBody != null) { | |||
@@ -105,6 +110,7 @@ public class TreeTableConnector extends TableConnector { | |||
getWidget() | |||
.handleNavigation(event.keycode, event.ctrl, event.shift); | |||
} | |||
getWidget().rendering = false; | |||
} | |||
@Override |
@@ -15,6 +15,8 @@ | |||
*/ | |||
package com.vaadin.client.ui.window; | |||
import java.util.logging.Logger; | |||
import com.google.gwt.dom.client.Element; | |||
import com.google.gwt.dom.client.NativeEvent; | |||
import com.google.gwt.dom.client.Style; | |||
@@ -256,6 +258,12 @@ public class WindowConnector extends AbstractSingleComponentContainerConnector | |||
@Override | |||
public void postLayout() { | |||
VWindow window = getWidget(); | |||
if (!window.isAttached()) { | |||
Logger.getLogger(WindowConnector.class.getName()).warning( | |||
"Called postLayout to detached Window."); | |||
return; | |||
} | |||
if (window.centered && getState().windowMode != WindowMode.MAXIMIZED) { | |||
window.center(); | |||
} |
@@ -0,0 +1,78 @@ | |||
/* | |||
* Copyright 2000-2013 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 java.io.IOException; | |||
import java.util.List; | |||
import org.junit.Test; | |||
import org.openqa.selenium.By; | |||
import org.openqa.selenium.Keys; | |||
import org.openqa.selenium.WebElement; | |||
import org.openqa.selenium.interactions.Actions; | |||
import org.openqa.selenium.remote.DesiredCapabilities; | |||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||
public class CtrlShiftMultiselectTest extends MultiBrowserTest { | |||
@Override | |||
public List<DesiredCapabilities> getBrowsersToTest() { | |||
List<DesiredCapabilities> browsers = super.getBrowsersToTest(); | |||
browsers.remove(Browser.FIREFOX.getDesiredCapabilities()); | |||
return browsers; | |||
} | |||
@Override | |||
protected DesiredCapabilities getDesiredCapabilities() { | |||
DesiredCapabilities cap = new DesiredCapabilities( | |||
super.getDesiredCapabilities()); | |||
cap.setCapability("requireWindowFocus", true); | |||
return cap; | |||
} | |||
@Test | |||
public void testSelectionRangeDragging() throws IOException { | |||
openTestURL(); | |||
clickRow(3); | |||
new Actions(driver).keyDown(Keys.SHIFT).perform(); | |||
clickRow(8); | |||
new Actions(driver).keyUp(Keys.SHIFT).perform(); | |||
dragRows(5, 700, 0); | |||
compareScreen("draggedMultipleRows"); | |||
new Actions(driver).release().perform(); | |||
} | |||
private void clickRow(int index) { | |||
List<WebElement> rows = getAllRows(); | |||
rows.get(index).click(); | |||
} | |||
private void dragRows(int dragIdx, int xOffset, int yOffset) { | |||
List<WebElement> rows = getAllRows(); | |||
new Actions(driver).moveToElement(rows.get(dragIdx)).clickAndHold() | |||
.moveByOffset(5, 0).perform(); | |||
new Actions(driver).moveByOffset(xOffset - 5, yOffset).perform(); | |||
} | |||
private List<WebElement> getAllRows() { | |||
WebElement table = vaadinElement("/VVerticalLayout[0]/VVerticalLayout[0]/VScrollTable[0]"); | |||
return table.findElements(By.cssSelector(".v-table-table tr")); | |||
} | |||
} |
@@ -1,52 +0,0 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | |||
<head profile="http://selenium-ide.openqa.org/profiles/test-case"> | |||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> | |||
<link rel="selenium.base" href="" /> | |||
<title>New Test</title> | |||
</head> | |||
<body> | |||
<table cellpadding="1" cellspacing="1" border="1"> | |||
<thead> | |||
<tr><td rowspan="1" colspan="3">New Test</td></tr> | |||
</thead><tbody> | |||
<tr> | |||
<td>open</td> | |||
<td>/run/com.vaadin.tests.components.table.CtrlShiftMultiselect?restartApplication</td> | |||
<td></td> | |||
</tr> | |||
<tr> | |||
<td>mouseClick</td> | |||
<td>vaadin=runcomvaadintestscomponentstableCtrlShiftMultiselect::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[5]/domChild[1]/domChild[0]</td> | |||
<td>112,12</td> | |||
</tr> | |||
<tr> | |||
<td>mouseClick</td> | |||
<td>vaadin=runcomvaadintestscomponentstableCtrlShiftMultiselect::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[10]/domChild[1]/domChild[0]</td> | |||
<td>82,16:shift</td> | |||
</tr> | |||
<tr> | |||
<td>drag</td> | |||
<td>vaadin=runcomvaadintestscomponentstableCtrlShiftMultiselect::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[8]/domChild[1]/domChild[0]</td> | |||
<td>87,1</td> | |||
</tr> | |||
<tr> | |||
<td>mouseMoveAt</td> | |||
<td>vaadin=runcomvaadintestscomponentstableCtrlShiftMultiselect::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[0]</td> | |||
<td>700,210</td> | |||
</tr> | |||
<tr> | |||
<td>screenCapture</td> | |||
<td></td> | |||
<td>multiple-rows-dragged</td> | |||
</tr> | |||
<tr> | |||
<td>drop</td> | |||
<td>vaadin=runcomvaadintestscomponentstableCtrlShiftMultiselect::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/domChild[0]/domChild[0]</td> | |||
<td>700,210</td> | |||
</tr> | |||
</tbody></table> | |||
</body> | |||
</html> |
@@ -0,0 +1,135 @@ | |||
/* | |||
* Copyright 2000-2013 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.window; | |||
import com.vaadin.data.Item; | |||
import com.vaadin.server.VaadinRequest; | |||
import com.vaadin.tests.components.AbstractTestUIWithLog; | |||
import com.vaadin.ui.Button; | |||
import com.vaadin.ui.Button.ClickEvent; | |||
import com.vaadin.ui.Button.ClickListener; | |||
import com.vaadin.ui.HorizontalLayout; | |||
import com.vaadin.ui.TreeTable; | |||
import com.vaadin.ui.UI; | |||
import com.vaadin.ui.Window; | |||
@SuppressWarnings("serial") | |||
public class CloseModalSubWindow extends AbstractTestUIWithLog { | |||
public static final String SUB_WINDOW = "sub-win"; | |||
public static final String TREE_TABLE = "treetable"; | |||
public static final String DELETE_BUTTON = "del-btn"; | |||
public static final String CONFIRM_BUTTON = "confirm-btn"; | |||
private ConfirmWindow win; | |||
private TreeTable table; | |||
@Override | |||
protected String getTestDescription() { | |||
return "Lists a dozen items in a TreeTable with a Delete Button in each row. " | |||
+ "Delete button will open an sub-window allowing user to either confirm delete operation or cancel. " | |||
+ "Confirming should close the sub-window at the same time as the item is removed from the TreeTable."; | |||
} | |||
@Override | |||
protected Integer getTicketNumber() { | |||
return 13188; | |||
} | |||
@SuppressWarnings("unchecked") | |||
@Override | |||
protected void setup(VaadinRequest request) { | |||
table = new TreeTable(); | |||
table.setId(TREE_TABLE); | |||
table.addContainerProperty("column", String.class, null); | |||
table.addContainerProperty("delete", Button.class, null); | |||
for (int i = 0; i < 10; i++) { | |||
Item item = table.addItem(i); | |||
item.getItemProperty("column").setValue("" + i); | |||
Button b = new Button("Delete", deleteClickListener); | |||
b.setId(DELETE_BUTTON + i); | |||
b.setData(i); | |||
item.getItemProperty("delete").setValue(b); | |||
} | |||
table.setSortEnabled(false); | |||
table.setColumnReorderingAllowed(false); | |||
table.setEditable(true); | |||
table.setPageLength(0); | |||
addComponent(table); | |||
} | |||
private void deleteItem(Object itemId) { | |||
table.removeItem(itemId); | |||
} | |||
private ClickListener deleteClickListener = new ClickListener() { | |||
@Override | |||
public void buttonClick(ClickEvent event) { | |||
win = new ConfirmWindow(event.getButton().getData()); | |||
log("Modal sub-window opened"); | |||
} | |||
}; | |||
private ClickListener confirmClickListener = new ClickListener() { | |||
@Override | |||
public void buttonClick(ClickEvent event) { | |||
deleteItem(event.getButton().getData()); | |||
win.close(); | |||
log("Modal sub-window closed"); | |||
} | |||
}; | |||
private ClickListener cancelClickListener = new ClickListener() { | |||
@Override | |||
public void buttonClick(ClickEvent event) { | |||
win.close(); | |||
log("Modal sub-window closed"); | |||
} | |||
}; | |||
/** Modal confirmation sub-window. */ | |||
class ConfirmWindow extends Window { | |||
public ConfirmWindow(Object itemId) { | |||
setModal(true); | |||
setWidth("300px"); | |||
setHeight("200px"); | |||
setId(SUB_WINDOW); | |||
Button ok = new Button("Confirm Delete", confirmClickListener); | |||
ok.setId(CONFIRM_BUTTON); | |||
ok.setData(itemId); | |||
Button cancel = new Button("Cancel", cancelClickListener); | |||
HorizontalLayout l = new HorizontalLayout(); | |||
l.addComponent(ok); | |||
l.addComponent(cancel); | |||
setContent(l); | |||
UI.getCurrent().addWindow(this); | |||
} | |||
} | |||
} |
@@ -0,0 +1,75 @@ | |||
/* | |||
* Copyright 2000-2013 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.window; | |||
import java.util.List; | |||
import org.junit.Assert; | |||
import org.junit.Test; | |||
import org.openqa.selenium.By; | |||
import org.openqa.selenium.WebElement; | |||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||
public class CloseModalSubWindowTest extends MultiBrowserTest { | |||
@Test | |||
public void testCloseModalSubWindow() throws Exception { | |||
openTestURL(); | |||
// assert that there's a button with a 'del-btn0' id | |||
List<WebElement> buttons = getDriver().findElements( | |||
By.id(CloseModalSubWindow.DELETE_BUTTON + "0")); | |||
int deleteButtonCount = buttons.size(); | |||
Assert.assertEquals(1, deleteButtonCount); | |||
// assert that there's no sub-windows open | |||
List<WebElement> subWindows = getDriver().findElements( | |||
By.id(CloseModalSubWindow.SUB_WINDOW)); | |||
Assert.assertEquals(0, subWindows.size()); | |||
// click the first delete button | |||
getFirstDeteleButton(0).click(); | |||
// assert that there's ONE sub-window open | |||
subWindows = getDriver().findElements( | |||
By.id(CloseModalSubWindow.SUB_WINDOW)); | |||
Assert.assertEquals(1, subWindows.size()); | |||
WebElement confirm = getDriver().findElement( | |||
By.id(CloseModalSubWindow.CONFIRM_BUTTON)); | |||
// click the confirm button in the sub-window | |||
confirm.click(); | |||
// assert that there's no sub-windows open | |||
subWindows = getDriver().findElements( | |||
By.id(CloseModalSubWindow.SUB_WINDOW)); | |||
Assert.assertEquals(0, subWindows.size()); | |||
// assert that there's no button with 'del-btn0' id anymore | |||
buttons = getDriver().findElements( | |||
By.id(CloseModalSubWindow.DELETE_BUTTON + "0")); | |||
Assert.assertEquals(0, buttons.size()); | |||
} | |||
private WebElement getFirstDeteleButton(int index) { | |||
WebElement button = getDriver().findElement( | |||
By.id(CloseModalSubWindow.DELETE_BUTTON + index)); | |||
return button; | |||
} | |||
} |