Author: hlship
Date: Mon Apr 19 14:07:16 2010
New Revision: 935582
URL: http://svn.apache.org/viewvc?rev=935582&view=rev
Log:
Test that libraries and stylesheets are ignored if previously imported
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavascriptSupportImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.java
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavascriptSupportImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavascriptSupportImpl.java?rev=935582&r1=935581&r2=935582&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavascriptSupportImpl.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavascriptSupportImpl.java
Mon Apr 19 14:07:16 2010
@@ -16,6 +16,7 @@ package org.apache.tapestry5.internal.se
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.apache.tapestry5.Asset;
import org.apache.tapestry5.ComponentResources;
@@ -66,6 +67,8 @@ public class JavascriptSupportImpl imple
private final List<String> stackStylesheets = CollectionFactory.newList();
+ private final Set<String> importedStylesheets = CollectionFactory.newSet();
+
private final List<Stylesheet> otherStylesheets =
CollectionFactory.newList();
private final Map<InitializationPriority, StringBuilder> scripts =
CollectionFactory.newMap();
@@ -327,9 +330,13 @@ public class JavascriptSupportImpl imple
{
Defense.notBlank(stylesheetURL, "stylesheetURL");
- if (otherStylesheets.contains(stylesheetURL))
+ // Assumes no overlap between stack stylesheets and all other
stylesheets
+
+ if (importedStylesheets.contains(stylesheetURL))
return;
+ importedStylesheets.add(stylesheetURL);
+
otherStylesheets.add(new Stylesheet(stylesheetURL, media));
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.java?rev=935582&r1=935581&r2=935582&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.java
Mon Apr 19 14:07:16 2010
@@ -21,13 +21,11 @@ import org.apache.tapestry5.Asset;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.internal.InternalConstants;
import org.apache.tapestry5.internal.services.DocumentLinker;
-import org.apache.tapestry5.internal.services.ajax.JavascriptSupportImpl;
import
org.apache.tapestry5.internal.services.javascript.JavascriptStackPathConstructor;
import org.apache.tapestry5.internal.test.InternalBaseTestCase;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.internal.util.IdAllocator;
import org.apache.tapestry5.json.JSONObject;
-import org.apache.tapestry5.services.ClientInfrastructure;
import org.apache.tapestry5.services.javascript.InitializationPriority;
import org.apache.tapestry5.services.javascript.JavascriptStack;
import org.apache.tapestry5.services.javascript.JavascriptStackSource;
@@ -136,17 +134,17 @@ public class JavascriptSupportImplTest e
linker.addStylesheetLink("style.css", null);
}
- private JavascriptStack mockJavascriptStack()
+ protected final JavascriptStack mockJavascriptStack()
{
return newMock(JavascriptStack.class);
}
- private JavascriptStackPathConstructor mockJavascriptStackPathConstructor()
+ protected final JavascriptStackPathConstructor
mockJavascriptStackPathConstructor()
{
return newMock(JavascriptStackPathConstructor.class);
}
- protected JavascriptStackSource mockJavascriptStackSource()
+ protected final JavascriptStackSource mockJavascriptStackSource()
{
return newMock(JavascriptStackSource.class);
}
@@ -244,6 +242,33 @@ public class JavascriptSupportImplTest e
}
@Test
+ public void duplicate_imported_libraries_are_filtered()
+ {
+ DocumentLinker linker = mockDocumentLinker();
+ JavascriptStackSource stackSource = mockJavascriptStackSource();
+ JavascriptStackPathConstructor pathConstructor =
mockJavascriptStackPathConstructor();
+ trainForEmptyCoreStack(linker, stackSource, pathConstructor);
+
+ Asset library1 = mockAsset("mylib1.js");
+ Asset library2 = mockAsset("mylib2.js");
+
+ linker.addScriptLink("mylib1.js");
+ linker.addScriptLink("mylib2.js");
+
+ replay();
+
+ JavascriptSupportImpl jss = new JavascriptSupportImpl(linker,
stackSource, pathConstructor);
+
+ jss.importJavascriptLibrary(library1);
+ jss.importJavascriptLibrary(library2);
+ jss.importJavascriptLibrary(library1);
+
+ jss.commit();
+
+ verify();
+ }
+
+ @Test
public void init_once()
{
DocumentLinker linker = mockDocumentLinker();
@@ -382,17 +407,41 @@ public class JavascriptSupportImplTest e
verify();
}
- private void train_for_stack(ClientInfrastructure infra, DocumentLinker
linker)
+ @Test
+ public void import_stylesheet_as_asset()
{
- Asset asset1 = mockAsset("script1.js");
- Asset asset2 = mockAsset("script2.js");
+ DocumentLinker linker = mockDocumentLinker();
+ Asset stylesheet = mockAsset("style.css");
+
+ linker.addStylesheetLink("style.css", "print");
+
+ replay();
+
+ JavascriptSupportImpl jss = new JavascriptSupportImpl(linker, null,
null);
- List<Asset> assets = CollectionFactory.newList(asset1, asset2);
+ jss.importStylesheet(stylesheet, "print");
- expect(infra.getJavascriptStack()).andReturn(assets);
+ jss.commit();
- linker.addScriptLink("script1.js");
- linker.addScriptLink("script2.js");
+ verify();
}
+ @Test
+ public void duplicate_stylesheet_ignored_first_media_wins()
+ {
+ DocumentLinker linker = mockDocumentLinker();
+
+ linker.addStylesheetLink("style.css", "print");
+
+ replay();
+
+ JavascriptSupportImpl jss = new JavascriptSupportImpl(linker, null,
null);
+
+ jss.importStylesheet("style.css", "print");
+ jss.importStylesheet("style.css", "screen");
+
+ jss.commit();
+
+ verify();
+ }
}