diff options
author | Pekka Hyvönen <pekka@vaadin.com> | 2017-05-17 15:59:15 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-17 15:59:15 +0300 |
commit | 431debc477bc669a0a6c491e62ee7174ae883fd0 (patch) | |
tree | c97fa60a5f70e8b9ffe4715308f263c241b67ef1 /uitest | |
parent | 56546862721e2ab0482e9c23f679b5eee590c36a (diff) | |
download | vaadin-framework-431debc477bc669a0a6c491e62ee7174ae883fd0.tar.gz vaadin-framework-431debc477bc669a0a6c491e62ee7174ae883fd0.zip |
Fix NPE when detaching DragSource & DropTarget on client side (#9341)
When the component the extensions have been attached to are removed, there was an NPE due to getParent() not being available anymore. Fixed by not doing clean up on those cases as it is not necessary.
Fixes #9101
* Add back missing detach call
Diffstat (limited to 'uitest')
-rw-r--r-- | uitest/src/main/java/com/vaadin/tests/dnd/DragSourcesInTabSheet.java | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/uitest/src/main/java/com/vaadin/tests/dnd/DragSourcesInTabSheet.java b/uitest/src/main/java/com/vaadin/tests/dnd/DragSourcesInTabSheet.java new file mode 100644 index 0000000000..a493f987a3 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/dnd/DragSourcesInTabSheet.java @@ -0,0 +1,83 @@ +package com.vaadin.tests.dnd; + +import com.vaadin.annotations.Widgetset; +import com.vaadin.server.VaadinRequest; +import com.vaadin.shared.ui.grid.DropMode; +import com.vaadin.tests.components.AbstractTestUIWithLog; +import com.vaadin.tests.data.bean.Person; +import com.vaadin.ui.Button; +import com.vaadin.ui.Grid; +import com.vaadin.ui.Label; +import com.vaadin.ui.TabSheet; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.Window; +import com.vaadin.ui.components.grid.GridDragSource; +import com.vaadin.ui.components.grid.GridDropTarget; +import com.vaadin.ui.dnd.DragSourceExtension; +import com.vaadin.ui.dnd.DropTargetExtension; + +@Widgetset("com.vaadin.DefaultWidgetSet") +public class DragSourcesInTabSheet extends AbstractTestUIWithLog { + + @Override + protected void setup(VaadinRequest request) { + TabSheet tabSheet = new TabSheet(); + addComponent(tabSheet); + + tabSheet.addTab(new VerticalLayout(createLabels())) + .setCaption("Labels"); + + Button dsButton = new Button("DragSource"); + new DragSourceExtension<>(dsButton) + .addDragEndListener(event -> log("drag end button")); + Button dtButton = new Button("DropTarget"); + new DropTargetExtension<>(dtButton).addDropListener(event -> log("drop " + + event.getDragSourceComponent().orElse(null) + " on button")); + tabSheet.addTab(new VerticalLayout(dsButton, dtButton)) + .setCaption("Buttons"); + + tabSheet.addTab(new VerticalLayout(createGrids())).setCaption("Grids"); + + addComponent(new Button("Open window", event -> openWindow())); + } + + private Label[] createLabels() { + Label dragSource = new Label("DragSource"); + new DragSourceExtension<>(dragSource) + .addDragEndListener(event -> log("drag end label")); + Label dropTarget = new Label("DropTarget"); + new DropTargetExtension<>(dropTarget).addDropListener(event -> log( + "drop " + event.getDragSourceComponent().orElse(null) + + " on label")); + return new Label[] { dragSource, dropTarget }; + } + + private Grid[] createGrids() { + Grid<Person> dsGrid = new Grid<>(Person.class); + dsGrid.setItems(Person.createTestPerson1(), Person.createTestPerson2()); + new GridDragSource<>(dsGrid).addGridDragEndListener(event -> log( + "drag end " + event.getDraggedItems().iterator().next())); + Grid<Person> dtGrid = new Grid<>(Person.class); + dtGrid.setItems(Person.createTestPerson1(), Person.createTestPerson2()); + new GridDropTarget<>(dtGrid, DropMode.BETWEEN) + .addGridDropListener(event -> log("drop on grid row " + + event.getDropTargetRow().orElse(null) + " " + + event.getDragData().orElse(null))); + return new Grid[] { dsGrid, dtGrid }; + } + + private void openWindow() { + Window window = new Window("Window with drag sources"); + VerticalLayout layout = new VerticalLayout(); + layout.addComponents(createLabels()); + layout.addComponents(createGrids()); + window.setContent(layout); + addWindow(window); + } + + @Override + protected String getTestDescription() { + return "Verify that removing drag source and drop target components in a tabsheet/window works"; + } + +} |