diff options
Diffstat (limited to 'uitest/src/com/vaadin/tests/components/upload/TestUploadAndDisableOnSuccess.java')
-rw-r--r-- | uitest/src/com/vaadin/tests/components/upload/TestUploadAndDisableOnSuccess.java | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/uitest/src/com/vaadin/tests/components/upload/TestUploadAndDisableOnSuccess.java b/uitest/src/com/vaadin/tests/components/upload/TestUploadAndDisableOnSuccess.java new file mode 100644 index 0000000000..516ca2d7c9 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/upload/TestUploadAndDisableOnSuccess.java @@ -0,0 +1,106 @@ +package com.vaadin.tests.components.upload; + +import java.io.ByteArrayOutputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.List; + +import com.vaadin.tests.components.ComponentTestCase; +import com.vaadin.ui.Component; +import com.vaadin.ui.Label; +import com.vaadin.ui.Upload; +import com.vaadin.ui.Upload.FinishedEvent; +import com.vaadin.ui.Upload.Receiver; +import com.vaadin.ui.Upload.StartedEvent; + +public class TestUploadAndDisableOnSuccess extends ComponentTestCase<Upload> + implements Receiver { + + @Override + protected String getDescription() { + return "If upload is detached and attached during upload, the client side componenent never receives information that the upload has finished. Second update will not be successful."; + } + + @Override + protected Integer getTicketNumber() { + return 4605; + } + + @Override + protected Class<Upload> getTestClass() { + return Upload.class; + } + + int counter = 0; + private Label l; + + @Override + protected void initializeComponents() { + + final Label labe = new Label(); + + addComponent(labe); + + final Upload u; + u = new Upload(null, this); + u.setImmediate(true); + addTestComponent(u); + + l = new Label(getUploadcount()); + addComponent(l); + + u.addListener(new Upload.StartedListener() { + + @Override + public void uploadStarted(StartedEvent event) { + /* + * Remove component before upload from the same vertical layout. + * Causes upload to be detached/attached -> upload loses it + * target iframes onload listener -> puts VUpload inappropriate + * state. + */ + getLayout().removeComponent(labe); + } + }); + + u.addListener(new Upload.FinishedListener() { + @Override + public void uploadFinished(FinishedEvent event) { + getMainWindow().showNotification("Done"); + l.setValue(getUploadcount()); + } + }); + + } + + private String getUploadcount() { + return counter++ + " uploads"; + } + + @Override + protected List<Component> createActions() { + List<Component> actions = new ArrayList<Component>(); + actions.add(createButtonAction("Toggle Enabled", + new Command<Upload, Boolean>() { + + @Override + public void execute(Upload c, Boolean value, Object data) { + c.setEnabled(!c.isEnabled()); + } + })); + + return actions; + } + + @Override + public OutputStream receiveUpload(String filename, String MIMEType) { + // sleep to ensure change before upload is complete + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return new ByteArrayOutputStream(); + } + +} |