aboutsummaryrefslogtreecommitdiffstats
path: root/uitest/src/com/vaadin/tests/components/upload/TestUploadAndDisableOnSuccess.java
diff options
context:
space:
mode:
Diffstat (limited to 'uitest/src/com/vaadin/tests/components/upload/TestUploadAndDisableOnSuccess.java')
-rw-r--r--uitest/src/com/vaadin/tests/components/upload/TestUploadAndDisableOnSuccess.java106
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();
+ }
+
+}