aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtur <artur@vaadin.com>2017-04-13 10:26:13 +0300
committerTeemu Suo-Anttila <tsuoanttila@users.noreply.github.com>2017-05-08 14:46:35 +0300
commit1eaebb8c31e95d212f4e49f2763cb51fa30e5387 (patch)
tree31baf1a040fba635653c928da9c8225fdf654d28
parent9a70e9123384e78d6af8b716128895957692fca0 (diff)
downloadvaadin-framework-1eaebb8c31e95d212f4e49f2763cb51fa30e5387.tar.gz
vaadin-framework-1eaebb8c31e95d212f4e49f2763cb51fa30e5387.zip
Notify a resource load listener many times if it has been added many times (#9075)
This is what the javadoc promises and what DependencyLoader relies on
-rw-r--r--client/src/main/java/com/vaadin/client/ResourceLoader.java7
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/javascriptcomponent/DuplicateJavascriptDependencies.java45
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/javascriptcomponent/DuplicateJavascriptDependenciesTest.java34
3 files changed, 83 insertions, 3 deletions
diff --git a/client/src/main/java/com/vaadin/client/ResourceLoader.java b/client/src/main/java/com/vaadin/client/ResourceLoader.java
index c52e6f16d0..69cb11dc9f 100644
--- a/client/src/main/java/com/vaadin/client/ResourceLoader.java
+++ b/client/src/main/java/com/vaadin/client/ResourceLoader.java
@@ -16,6 +16,7 @@
package com.vaadin.client;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
@@ -401,12 +402,12 @@ public class ResourceLoader {
if (rules === undefined) {
rules = sheet.rules;
}
-
+
if (rules === null) {
// Style sheet loaded, but can't access length because of XSS -> assume there's something there
return 1;
}
-
+
// Return length so we can distinguish 0 (probably 404 error) from normal case.
return rules.length;
} catch (err) {
@@ -423,7 +424,7 @@ public class ResourceLoader {
Map<String, Collection<ResourceLoadListener>> listenerMap) {
Collection<ResourceLoadListener> listeners = listenerMap.get(url);
if (listeners == null) {
- listeners = new HashSet<>();
+ listeners = new ArrayList<>();
listeners.add(listener);
listenerMap.put(url, listeners);
return true;
diff --git a/uitest/src/main/java/com/vaadin/tests/components/javascriptcomponent/DuplicateJavascriptDependencies.java b/uitest/src/main/java/com/vaadin/tests/components/javascriptcomponent/DuplicateJavascriptDependencies.java
new file mode 100644
index 0000000000..caffe145f2
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/javascriptcomponent/DuplicateJavascriptDependencies.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2000-2016 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.tests.components.javascriptcomponent;
+
+import com.vaadin.annotations.JavaScript;
+import com.vaadin.annotations.Widgetset;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUIWithLog;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Label;
+
+@JavaScript({ "notfound.js", "notfound.js" })
+@Widgetset("com.vaadin.DefaultWidgetSet")
+public class DuplicateJavascriptDependencies extends AbstractTestUIWithLog {
+
+ @JavaScript({ "notfound2.js", "notfound2.js" })
+ public static class ResultLabel extends Label {
+
+ public ResultLabel(String text) {
+ super(text);
+ setId("result");
+ }
+ }
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ addComponent(new Button("Test", e -> {
+ addComponent(new ResultLabel("It works"));
+ }));
+ }
+
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/javascriptcomponent/DuplicateJavascriptDependenciesTest.java b/uitest/src/test/java/com/vaadin/tests/components/javascriptcomponent/DuplicateJavascriptDependenciesTest.java
new file mode 100644
index 0000000000..652cd75e03
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/javascriptcomponent/DuplicateJavascriptDependenciesTest.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2000-2016 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.tests.components.javascriptcomponent;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.LabelElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class DuplicateJavascriptDependenciesTest extends SingleBrowserTest {
+
+ @Test
+ public void duplicateJavascriptsDoNotCauseProblems() {
+ openTestURL();
+ $(ButtonElement.class).first().click();
+ Assert.assertEquals("It works",
+ $(LabelElement.class).id("result").getText());
+ }
+}