You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2012/08/20 20:22:26 UTC

[2/6] git commit: Introduce a distinction between the core stack and all other stacks (and JavaScript) - allows more stacks/libraries to continue working under 5.4 without change

Introduce a distinction between the core stack and all other stacks (and JavaScript)
- allows more stacks/libraries to continue working under 5.4 without change


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/bbeca8f5
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/bbeca8f5
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/bbeca8f5

Branch: refs/heads/5.4-js-rewrite
Commit: bbeca8f53e8ee4a8ba33d4c90622b659b87f209c
Parents: 300494b
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Mon Aug 20 10:51:01 2012 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Mon Aug 20 10:51:01 2012 -0700

----------------------------------------------------------------------
 .../META-INF/modules/core/pageinit.coffee          |   20 +++++---
 .../internal/services/DocumentLinker.java          |   24 ++++++++-
 .../internal/services/DocumentLinkerImpl.java      |   13 +++++-
 .../services/PartialMarkupDocumentLinker.java      |    7 +++
 .../services/ajax/JavaScriptSupportImpl.java       |   37 ++++++++------
 .../services/javascript/ModuleManagerImpl.java     |    3 +-
 .../services/javascript/ModuleManager.java         |   11 +++--
 .../resources/org/apache/tapestry5/core.properties |    2 +-
 .../resources/org/apache/tapestry5/t5-forceload.js |    9 ++--
 .../services/DocumentLinkerImplTest.groovy         |   20 ++++----
 .../services/ajax/JavaScriptSupportImplTest.groovy |    5 +-
 11 files changed, 102 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bbeca8f5/tapestry-core/src/main/coffeescript/META-INF/modules/core/pageinit.coffee
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/coffeescript/META-INF/modules/core/pageinit.coffee b/tapestry-core/src/main/coffeescript/META-INF/modules/core/pageinit.coffee
index bf1850b..4032d39 100644
--- a/tapestry-core/src/main/coffeescript/META-INF/modules/core/pageinit.coffee
+++ b/tapestry-core/src/main/coffeescript/META-INF/modules/core/pageinit.coffee
@@ -134,13 +134,19 @@ define ["_", "core/console", "core/spi", "core/events"],
 
         finalCallback.call null
 
-      # Loads all the libraries, in order. It then executes the immediate initializations.
-      # After that, it waits for the DOM to be ready and executes the other initializations.
-      loadLibrariesAndInitialize: (libraries, immediateInits, otherInits) ->
-        exports.loadLibraries libraries, ->
-          exports.initialize immediateInits
-
-          spi.domReady -> exports.initialize otherInits
+      # Loads all the core libraries (the core JavaScript Stack), in order.It then ensures that some key modules have
+      # initialized, and loads all other libraries in order (this includes other stacks beyond core, and free-standing
+      # libraries). It then executes the immediate initializations. After that, it waits for the DOM to be ready and
+      # executes the other initializations. A lot of the complexity here is for compatibility with Tapestry 5.3 and
+      # earlier, where dependencies were exclusively defined in terms of load order (and there were lots of globals).
+      loadLibrariesAndInitialize: (coreLibraries, libraries, immediateInits, otherInits) ->
+        exports.loadLibraries coreLibraries, ->
+          require ["core/compat/t5-forceload"], ->
+            console.debug "Core libraries loaded."
+            exports.loadLibraries libraries, ->
+              exports.initialize immediateInits
+
+              spi.domReady -> exports.initialize otherInits
 
       evalJavaScript: (js) ->
         require ["core/compat/tapestry"], ->

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bbeca8f5/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinker.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinker.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinker.java
index 34eafd3..eafddd6 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinker.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinker.java
@@ -1,4 +1,4 @@
-// Copyright 2007, 2008, 2010 The Apache Software Foundation
+// Copyright 2007, 2008, 2010, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,12 +21,30 @@ import org.apache.tapestry5.services.javascript.StylesheetLink;
 /**
  * Responsible for injecting script and style links into the &lt;head&gt; and &lt;body&gt; element of the rendered HTML
  * document.
+ *
+ * @see org.apache.tapestry5.services.javascript.ModuleManager#writeInitialization(org.apache.tapestry5.dom.Element, java.util.List, java.util.List, java.util.List, java.util.List)
+ * @since 5.4
  */
 public interface DocumentLinker
 {
     /**
-     * Adds a link to load a JavaScript library. . The &lt;script&gt; elements will be added inside
-     * the document's &lt;head&gt;.
+     * Special handling for the
+     * {@linkplain org.apache.tapestry5.internal.services.javascript.CoreJavaScriptStack }core JavaScriptStack},
+     * whose contents are loaded directly at page startup. This represents special treatment of the core JavaScriptStack,
+     * starting in release 5.4. It is necessary during the transition from JavaScript libraries (that make use of the
+     * client-side Tapestry and/or T5 globals) to modules.
+     *
+     *
+     * @param libraryURL
+     * @since 5.4
+     */
+    void addCoreLibrary(String libraryURL);
+
+    /**
+     * Adds a link to load a non-core JavaScript library. These libraries are loaded, sequentially, only once
+     * the core libraries have loaded and initialized. Thus difference between core libraries and other libraries
+     * is new in 5.4, and represents a conflict between asynchronous loading of modules (introduced in 5.4) and
+     * sequential loading of libraries (in 5.3 and earlier).
      */
     void addLibrary(String libraryURL);
 

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bbeca8f5/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinkerImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinkerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinkerImpl.java
index 80235f3..4301b86 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinkerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DocumentLinkerImpl.java
@@ -26,6 +26,8 @@ import java.util.List;
 
 public class DocumentLinkerImpl implements DocumentLinker
 {
+    private final List<String> coreLibraryURLs = CollectionFactory.newList();
+
     private final List<String> libraryURLs = CollectionFactory.newList();
 
     private final ModuleInitsManager initsManager = new ModuleInitsManager();
@@ -62,6 +64,15 @@ public class DocumentLinkerImpl implements DocumentLinker
         includedStylesheets.add(sheet);
     }
 
+
+    @Override
+    public void addCoreLibrary(String libraryURL)
+    {
+        coreLibraryURLs.add(libraryURL);
+
+        hasScriptsOrInitializations = true;
+    }
+
     public void addLibrary(String libraryURL)
     {
         libraryURLs.add(libraryURL);
@@ -188,7 +199,7 @@ public class DocumentLinkerImpl implements DocumentLinker
         // (in <head> or at bottom of <body>). Switching to a module approach gives us a new chance to fix this.
         // Eventually, (nearly) everything will be loaded as modules.
 
-        moduleManager.writeInitialization(body, libraryURLs,
+        moduleManager.writeInitialization(body, coreLibraryURLs, libraryURLs,
                 initsManager.forPriority(InitializationPriority.IMMEDIATE),
                 initsManager.forPriority(InitializationPriority.EARLY, InitializationPriority.NORMAL, InitializationPriority.LATE));
     }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bbeca8f5/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PartialMarkupDocumentLinker.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PartialMarkupDocumentLinker.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PartialMarkupDocumentLinker.java
index fe64a04..a802339 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PartialMarkupDocumentLinker.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PartialMarkupDocumentLinker.java
@@ -28,6 +28,13 @@ public class PartialMarkupDocumentLinker implements DocumentLinker
 
     private final ModuleInitsManager initsManager = new ModuleInitsManager();
 
+    @Override
+    public void addCoreLibrary(String libraryURL)
+    {
+        // Really, this will never happen.
+        throw new IllegalStateException("Core libraries may not be added during a partial page render.");
+    }
+
     public void addLibrary(String libraryURL)
     {
         libraryURLs.put(libraryURL);

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bbeca8f5/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImpl.java
index c9c26ba..be9adee 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImpl.java
@@ -44,9 +44,7 @@ public class JavaScriptSupportImpl implements JavaScriptSupport
 
     private final Map<String, Boolean> addedStacks = CollectionFactory.newCaseInsensitiveMap();
 
-    private final List<String> stackLibraries = CollectionFactory.newList();
-
-    private final List<String> otherLibraries = CollectionFactory.newList();
+    private final Set<String> otherLibraries = CollectionFactory.newSet();
 
     private final Set<String> importedStylesheetURLs = CollectionFactory.newSet();
 
@@ -64,6 +62,8 @@ public class JavaScriptSupportImpl implements JavaScriptSupport
 
     private String focusFieldId;
 
+    private Map<String, String> libraryURLToStackName;
+
     class InitializationImpl implements Initialization
     {
         InitializationPriority priority = InitializationPriority.NORMAL;
@@ -163,17 +163,6 @@ public class JavaScriptSupportImpl implements JavaScriptSupport
             }
         });
 
-        Worker<String> linkLibrary = new Worker<String>()
-        {
-            public void work(String value)
-            {
-                linker.addLibrary(value);
-            }
-        };
-
-        F.flow(stackLibraries).each(linkLibrary);
-        F.flow(otherLibraries).each(linkLibrary);
-
         F.flow(inits).sort(new Comparator<InitializationImpl>()
         {
             @Override
@@ -283,13 +272,14 @@ public class JavaScriptSupportImpl implements JavaScriptSupport
 
         if (!otherLibraries.contains(libraryURL))
         {
+            linker.addLibrary(libraryURL);
+
             otherLibraries.add(libraryURL);
         }
 
         return this;
     }
 
-    private Map<String, String> libraryURLToStackName;
 
     /**
      * Locates the name of the stack that includes the library URL. Returns the stack,
@@ -326,7 +316,9 @@ public class JavaScriptSupportImpl implements JavaScriptSupport
     private void addAssetsFromStack(String stackName)
     {
         if (addedStacks.containsKey(stackName))
+        {
             return;
+        }
 
         JavaScriptStack stack = javascriptStackSource.getStack(stackName);
 
@@ -335,7 +327,18 @@ public class JavaScriptSupportImpl implements JavaScriptSupport
             addAssetsFromStack(dependentStackname);
         }
 
-        stackLibraries.addAll(stackPathConstructor.constructPathsForJavaScriptStack(stackName));
+        List<String> libraryURLs = stackPathConstructor.constructPathsForJavaScriptStack(stackName);
+
+        for (String libraryURL : libraryURLs)
+        {
+            if (stackName.equals(InternalConstants.CORE_STACK_NAME))
+            {
+                linker.addCoreLibrary(libraryURL);
+            } else
+            {
+                linker.addLibrary(libraryURL);
+            }
+        }
 
         stylesheetLinks.addAll(stack.getStylesheets());
 
@@ -344,7 +347,9 @@ public class JavaScriptSupportImpl implements JavaScriptSupport
         String initialization = stack.getInitialization();
 
         if (initialization != null)
+        {
             addScript(InitializationPriority.IMMEDIATE, initialization);
+        }
     }
 
     public JavaScriptSupport importStylesheet(Asset stylesheet)

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bbeca8f5/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleManagerImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleManagerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleManagerImpl.java
index 3509f79..cfa2927 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleManagerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleManagerImpl.java
@@ -139,7 +139,7 @@ public class ModuleManagerImpl implements ModuleManager
         tracker.clearOnInvalidation(cache);
     }
 
-    public void writeInitialization(Element body, List<String> libraryURLs, List<JSONArray> immediateInits, List<JSONArray> deferredInits)
+    public void writeInitialization(Element body, List<String> coreLibraryURLs, List<String> libraryURLs, List<JSONArray> immediateInits, List<JSONArray> deferredInits)
     {
         body.element("script", "src", requireJS.toClientURL());
 
@@ -150,6 +150,7 @@ public class ModuleManagerImpl implements ModuleManager
         StringBuilder content = new StringBuilder(1000);
 
         content.append(globalMessages.format("core-page-initialization-template",
+                convert(coreLibraryURLs),
                 convert(libraryURLs),
                 convert(immediateInits),
                 convert(deferredInits)));

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bbeca8f5/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/ModuleManager.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/ModuleManager.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/ModuleManager.java
index a4dde1d..4913175 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/ModuleManager.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/ModuleManager.java
@@ -42,14 +42,17 @@ public interface ModuleManager
      *
      * @param body
      *         {@code <body>} element of the page, to which new {@code <script>>} element(s) will be added.
-     * @param libraryURLs
+     * @param coreLibraryURLs
      *         list of static JavaScript library URLs that must be loaded on the page, prior to any initializations
+     * @param libraryURLs
+     *         list of additional static JavaScript library URLs that must be loaded on the page, after the
+     *         coreLibraryURLs, and before an initializations
      * @param immediateInits
-     *         list of immediate initializations that occur as soon as the static   JavaScript libraries are loaded
+     *         list of immediate initializations that occur as soon as the static JavaScript libraries are loaded
      * @param deferredInits
-     *         List of deferred initializations that occur once the page has loaded
+     *          list of initializations that are deferred until after the browser document is ready    *
      */
-    void writeInitialization(Element body, List<String> libraryURLs, List<JSONArray> immediateInits, List<JSONArray> deferredInits);
+    void writeInitialization(Element body, List<String> coreLibraryURLs, List<String> libraryURLs, List<JSONArray> immediateInits, List<JSONArray> deferredInits);
 
     /**
      * Given a module name (which may be a path of names separated by slashes), locates the corresponding {@link Resource}.

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bbeca8f5/tapestry-core/src/main/resources/org/apache/tapestry5/core.properties
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/resources/org/apache/tapestry5/core.properties b/tapestry-core/src/main/resources/org/apache/tapestry5/core.properties
index cdf5d6b..5488e7a 100644
--- a/tapestry-core/src/main/resources/org/apache/tapestry5/core.properties
+++ b/tapestry-core/src/main/resources/org/apache/tapestry5/core.properties
@@ -49,5 +49,5 @@ required=You must provide a value for %s.
 
 core-page-initialization-template=\
 require(["core/pageinit"], function(pageinit) {\
-  pageinit.loadLibrariesAndInitialize(%s, %s, %s); \
+  pageinit.loadLibrariesAndInitialize(%s, %s, %s, %s); \
 });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bbeca8f5/tapestry-core/src/main/resources/org/apache/tapestry5/t5-forceload.js
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/resources/org/apache/tapestry5/t5-forceload.js b/tapestry-core/src/main/resources/org/apache/tapestry5/t5-forceload.js
index 1ff8940..9bec9ee 100644
--- a/tapestry-core/src/main/resources/org/apache/tapestry5/t5-forceload.js
+++ b/tapestry-core/src/main/resources/org/apache/tapestry5/t5-forceload.js
@@ -19,12 +19,11 @@
  * the loading of the other modules before older (and third party) JavaScript code attempts to make use
  * of methods inside the T5 and Tapestry namespace objects.
  */
-require([
+define("core/compat/t5-forceload", [
     "core/compat/t5-alerts",
     "core/compat/t5-formfragment",
     "core/compat/tree",
     "core/compat/tapestry-messages"],
-        function () {
-            // Does nothing, but forces the other define()-ed "modules" to have their dependencies
-            // loaded, and to be loaded themselves.
-        });
+        // Does nothing, but forces the other define()-ed "modules" to have their dependencies
+        // loaded, and to be loaded themselves.
+        null);

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bbeca8f5/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/DocumentLinkerImplTest.groovy
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/DocumentLinkerImplTest.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/DocumentLinkerImplTest.groovy
index f23f1ab..bab9659 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/DocumentLinkerImplTest.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/DocumentLinkerImplTest.groovy
@@ -93,12 +93,13 @@ class DocumentLinkerImplTest extends InternalBaseTestCase {
 
         document.newRootElement("html").element("body").element("p").text("Ready to be updated with scripts.")
 
-        def manager = mockModuleManager(["foo.js", "bar/baz.js"], [], [new JSONArray("core/pageinit:evalJavaScript", "pageInitialization();")])
+        def manager = mockModuleManager(["core.js"], ["foo.js", "bar/baz.js"], [], [new JSONArray("core/pageinit:evalJavaScript", "pageInitialization();")])
 
         DocumentLinkerImpl linker = new DocumentLinkerImpl(manager, true, "1.2.3")
 
         replay()
 
+        linker.addCoreLibrary("core.js")
         linker.addLibrary("foo.js")
         linker.addLibrary("bar/baz.js")
         linker.addScript(InitializationPriority.NORMAL, "pageInitialization();")
@@ -196,7 +197,7 @@ class DocumentLinkerImplTest extends InternalBaseTestCase {
 
         document.newRootElement("html").element("body").element("p").text("Ready to be updated with scripts.")
 
-        def manager = mockModuleManager([], [new JSONArray("core/pageinit:evalJavaScript", "doSomething();")], [])
+        def manager = mockModuleManager([], [], [new JSONArray("core/pageinit:evalJavaScript", "doSomething();")], [])
 
         DocumentLinkerImpl linker = new DocumentLinkerImpl(manager, true, "1.2.3")
 
@@ -222,7 +223,7 @@ class DocumentLinkerImplTest extends InternalBaseTestCase {
 
         document.newRootElement("html").element("notbody").element("p").text("Ready to be updated with scripts.")
 
-        def manager = mockModuleManager(["foo.js"], [], [])
+        def manager = mockModuleManager([], ["foo.js"], [], [])
 
         DocumentLinkerImpl linker = new DocumentLinkerImpl(manager, true, "1.2.3")
 
@@ -249,7 +250,7 @@ class DocumentLinkerImplTest extends InternalBaseTestCase {
         head.element("meta")
         head.element("script")
 
-        def manager = mockModuleManager([], [new JSONArray("['immediate/module:myfunc', {'fred':'barney'}]")], [])
+        def manager = mockModuleManager([], [], [new JSONArray("['immediate/module:myfunc', {'fred':'barney'}]")], [])
 
         DocumentLinkerImpl linker = new DocumentLinkerImpl(manager, true, "1.2.3")
 
@@ -276,7 +277,7 @@ class DocumentLinkerImplTest extends InternalBaseTestCase {
         head.element("meta")
         head.element("script")
 
-        def manager = mockModuleManager([], [], [new JSONArray("['my/module', 'barney']")])
+        def manager = mockModuleManager([], [], [], [new JSONArray("['my/module', 'barney']")])
 
         DocumentLinkerImpl linker = new DocumentLinkerImpl(manager, true, "1.2.3")
 
@@ -340,7 +341,7 @@ class DocumentLinkerImplTest extends InternalBaseTestCase {
 
         head.element("meta")
 
-        def manager = mockModuleManager([], [], [new JSONArray("['my/module']"),
+        def manager = mockModuleManager([], [], [], [new JSONArray("['my/module']"),
             new JSONArray("my/other/module:normal", 111, 222),
             new JSONArray("my/other/module:late", 333, 444)])
 
@@ -369,7 +370,7 @@ class DocumentLinkerImplTest extends InternalBaseTestCase {
 
         head.element("meta")
 
-        def manager = mockModuleManager([], [], [new JSONArray("['my/module']"),
+        def manager = mockModuleManager([], [], [], [new JSONArray("['my/module']"),
             new JSONArray("my/other/module:normal", 111, 222)])
 
         DocumentLinkerImpl linker = new DocumentLinkerImpl(manager, true, "1.2.3")
@@ -389,12 +390,13 @@ class DocumentLinkerImplTest extends InternalBaseTestCase {
         verify()
     }
 
-    private ModuleManager mockModuleManager(scripts, immediateInits, deferredInits) {
+    private ModuleManager mockModuleManager(def coreLibraryURLs, def libraryURLs, def immediateInits, def deferredInits) {
 
         ModuleManager mock = newMock(ModuleManager);
 
         expect(mock.writeInitialization(isA(Element),
-            eq(scripts),
+            eq(coreLibraryURLs),
+            eq(libraryURLs),
             eq(immediateInits),
             eq(deferredInits))).andAnswer({
             def body = EasyMock.currentArguments[0]

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bbeca8f5/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.groovy
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.groovy
index e1aa596..3740f53 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ajax/JavaScriptSupportImplTest.groovy
@@ -60,6 +60,7 @@ class JavaScriptSupportImplTest extends InternalBaseTestCase {
         DocumentLinker linker = mockDocumentLinker()
         JavaScriptStackSource stackSource = mockJavaScriptStackSource()
         JavaScriptStackPathConstructor pathConstructor = mockJavaScriptStackPathConstructor()
+
         trainForCoreStack(linker, stackSource, pathConstructor)
 
         linker.addScript(InitializationPriority.IMMEDIATE, "stackInit();")
@@ -107,8 +108,8 @@ class JavaScriptSupportImplTest extends InternalBaseTestCase {
 
         expect(stack.stacks).andReturn([])
 
-        linker.addLibrary("stack1.js")
-        linker.addLibrary("stack2.js")
+        linker.addCoreLibrary("stack1.js")
+        linker.addCoreLibrary("stack2.js")
         linker.addStylesheetLink(stylesheetLink)
     }