Skip to content

Commit

Permalink
Better error handling trying to enable HTML5 DnD for mobile from thre…
Browse files Browse the repository at this point in the history
…ad (vaadin#12170)

- Informative error message
- Reset back to disabled state when enabling fails
- Incorrect usage also detectable using non-mobile devices

Fixes vaadin#12152
  • Loading branch information
Ansku committed Dec 7, 2020
1 parent 02322d1 commit 49f7039
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 0 deletions.
7 changes: 7 additions & 0 deletions server/src/main/java/com/vaadin/ui/UI.java
Original file line number Diff line number Diff line change
Expand Up @@ -1987,6 +1987,13 @@ public void setMobileHtml5DndEnabled(boolean enabled) {
getState().enableMobileHTML5DnD = enabled;

if (isMobileHtml5DndEnabled()) {
if (VaadinService.getCurrentRequest() == null) {
getState().enableMobileHTML5DnD = false;
throw new IllegalStateException("HTML5 DnD cannot be "
+ "enabled for mobile devices when current "
+ "VaadinRequest cannot be accessed. Call this "
+ "method from init(VaadinRequest) to ensure access.");
}
loadMobileHtml5DndPolyfill();
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.vaadin.tests.components.ui;

import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.ui.Label;

public class MobileHtml5DndEnablingError extends AbstractTestUI {

@Override
protected void setup(VaadinRequest request) {
final MobileHtml5DndEnablingError ui = MobileHtml5DndEnablingError.this;
new Thread() {
@Override
public void run() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
ui.access(() -> {
Label label;
try {
ui.setMobileHtml5DndEnabled(true);
label = new Label(
"If you see this, there was no error.");
} catch (Exception e) {
label = new Label("Error message: " + e.getMessage());
}
label.setId("error");
label.setSizeFull();
ui.addComponent(label);
});
}
}.start();
}

@Override
protected String getTestDescription() {
return "Attempting to set HTML5 DnD enabled for mobile devices from "
+ "a thread should give an informative error message.";
}

@Override
protected Integer getTicketNumber() {
return 12152;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.vaadin.tests.components.ui;

import static org.junit.Assert.assertTrue;

import org.junit.Test;

import com.vaadin.testbench.elements.LabelElement;
import com.vaadin.tests.tb3.SingleBrowserTest;

public class MobileHtml5DndEnablingErrorTest extends SingleBrowserTest {

@Test
public void testErrorMessage() {
openTestURL();
LabelElement label = $(LabelElement.class).id("error");
assertTrue("Unexpected Label content: " + label.getText(),
label.getText().startsWith("Error message: HTML5 DnD cannot"));
}
}

0 comments on commit 49f7039

Please sign in to comment.