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();
+    }
 }


Reply via email to