Skip to content

Commit

Permalink
fix: set maxFiles to Infinity when setting a MultiFileReceiver (#6253)
Browse files Browse the repository at this point in the history
  • Loading branch information
vursen committed May 20, 2024
1 parent 9bcbceb commit 4876819
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/*
* Copyright 2000-2024 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.flow.component.upload.tests;

import com.vaadin.flow.component.html.NativeButton;

import com.vaadin.flow.component.html.Div;
import com.vaadin.flow.component.upload.Upload;
import com.vaadin.flow.component.upload.receivers.MemoryBuffer;
import com.vaadin.flow.component.upload.receivers.MultiFileMemoryBuffer;
import com.vaadin.flow.router.Route;

@Route("vaadin-upload/switch-receivers")
public class SwitchReceiversPage extends Div {

public SwitchReceiversPage() {
Upload upload = new Upload();

NativeButton setSingleFileReceiver = new NativeButton(
"Set single file receiver", event -> {
MemoryBuffer buffer = new MemoryBuffer();
upload.setReceiver(buffer);
});
setSingleFileReceiver.setId("set-single-file-receiver");

NativeButton setMultiFileReceiver = new NativeButton(
"Set multi file receiver", event -> {
MultiFileMemoryBuffer buffer = new MultiFileMemoryBuffer();
upload.setReceiver(buffer);
});
setMultiFileReceiver.setId("set-multi-file-receiver");

add(upload, setSingleFileReceiver, setMultiFileReceiver);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/*
* Copyright 2000-2024 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.flow.component.upload.tests;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import com.vaadin.flow.component.upload.testbench.UploadElement;
import com.vaadin.flow.testutil.TestPath;

@TestPath("vaadin-upload/switch-receivers")
public class SwitchReceiversIT extends AbstractUploadIT {

private UploadElement upload;

@Before
public void init() {
open();
upload = $(UploadElement.class).first();
}

@Test
public void switchBetweenSingleAndMultiFileReceiver_assertMaxFilesProperty() {
$("button").id("set-single-file-receiver").click();
Assert.assertEquals(
"The maxFiles property should equal 1 when single file receiver is set",
1, (int) upload.getPropertyInteger("maxFiles"));

$("button").id("set-multi-file-receiver").click();
Assert.assertTrue(
"The maxFiles property should equal Infinity when multi file receiver is set",
(boolean) executeScript(
"return arguments[0].maxFiles === Infinity", upload));

$("button").id("set-single-file-receiver").click();
Assert.assertEquals(
"The maxFiles property should equal 1 when single file receiver is set",
1, (int) upload.getPropertyInteger("maxFiles"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -633,10 +633,11 @@ public Receiver getReceiver() {
*/
public void setReceiver(Receiver receiver) {
this.receiver = receiver;
if (!(receiver instanceof MultiFileReceiver)) {
setMaxFiles(1);
if (receiver instanceof MultiFileReceiver) {
getElement().removeProperty("maxFiles");
getElement().executeJs("this.maxFiles = Infinity");
} else {
getElement().removeAttribute("maxFiles");
setMaxFiles(1);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
import com.vaadin.flow.component.upload.Upload;

import org.junit.Test;
import org.junit.Assert;

import com.vaadin.flow.component.upload.receivers.MemoryBuffer;
import com.vaadin.flow.component.upload.receivers.MultiFileMemoryBuffer;

public class UploadTest {

Expand All @@ -11,4 +15,18 @@ public void uploadNewUpload() {
// Test no NPE due missing UI when setAttribute is called.
Upload upload = new Upload();
}

@Test
public void switchBetweenSingleAndMultiFileReceiver_assertMaxFilesProperty() {
Upload upload = new Upload();

upload.setReceiver(new MemoryBuffer());
Assert.assertEquals(1, upload.getElement().getProperty("maxFiles", 0));

upload.setReceiver(new MultiFileMemoryBuffer());
Assert.assertNull(upload.getElement().getProperty("maxFiles"));

upload.setReceiver(new MemoryBuffer());
Assert.assertEquals(1, upload.getElement().getProperty("maxFiles", 0));
}
}

0 comments on commit 4876819

Please sign in to comment.