From 1c040bc8aa583916580d4b080711baf1f28beb5b Mon Sep 17 00:00:00 2001 From: Andy Berry Date: Mon, 6 Jul 2015 10:10:33 +0100 Subject: [PATCH 1/2] fixing bug where tokens weren't replaced in index.jsp --- .../spec/brjs/appserver/ServedAppTest.java | 12 ++++++++++++ .../org/bladerunnerjs/spec/app/BuildAppTest.java | 12 +++++++++++- .../appserver/ServletContentAccessor.java | 4 +++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/brjs-core-tests/src/test-integration/java/org/bladerunnerjs/spec/brjs/appserver/ServedAppTest.java b/brjs-core-tests/src/test-integration/java/org/bladerunnerjs/spec/brjs/appserver/ServedAppTest.java index e74a4d796..468d067c0 100644 --- a/brjs-core-tests/src/test-integration/java/org/bladerunnerjs/spec/brjs/appserver/ServedAppTest.java +++ b/brjs-core-tests/src/test-integration/java/org/bladerunnerjs/spec/brjs/appserver/ServedAppTest.java @@ -108,6 +108,18 @@ public void indexPageCanBeAccessed() throws Exception then(appServer).requestForUrlReturns("/app/", "aspect index.html"); } + @Test + public void tokensInIndexJspAreReplaced() throws Exception + { + given(app).hasBeenPopulated("default") + .and(app).containsFileWithContents("app.conf", "localeCookieName: BRJS.LOCALE\n" + + "locales: en\n" + + "requirePrefix: appns") + .and(aspect).containsFileWithContents("index.jsp", "<@tagToken @/>") + .and(appServer).started(); + then(appServer).requestForUrlReturns("/app/", "dev replacement"); + } + @Test public void localeForwarderPageCanBeAccessedWithoutEndingInForwardSlash() throws Exception { diff --git a/brjs-core-tests/src/test/java/org/bladerunnerjs/spec/app/BuildAppTest.java b/brjs-core-tests/src/test/java/org/bladerunnerjs/spec/app/BuildAppTest.java index 3e405cc8b..681160eca 100644 --- a/brjs-core-tests/src/test/java/org/bladerunnerjs/spec/app/BuildAppTest.java +++ b/brjs-core-tests/src/test/java/org/bladerunnerjs/spec/app/BuildAppTest.java @@ -8,6 +8,7 @@ import org.bladerunnerjs.api.Aspect; import org.bladerunnerjs.api.BladerunnerConf; import org.bladerunnerjs.api.spec.engine.SpecTest; +import org.bladerunnerjs.spec.brjs.appserver.MockTagHandler; import org.bladerunnerjs.testing.utility.MockContentPlugin; import org.bladerunnerjs.testing.utility.ScriptedContentPlugin; import org.bladerunnerjs.testing.utility.ScriptedRequestGeneratingTagHandlerPlugin; @@ -29,6 +30,7 @@ public void initTestObjects() throws Exception { given(brjs).automaticallyFindsBundlerPlugins() .and(brjs).automaticallyFindsMinifierPlugins() .and(brjs).hasContentPlugins(new MockContentPlugin()) + .and(brjs).hasTagHandlerPlugins(new MockTagHandler("tagToken", "dev replacement", "prod replacement")) .and(brjs).hasBeenCreated(); app = brjs.app("app1"); appConf = app.appConf(); @@ -88,7 +90,7 @@ public void builtAppHasLocalizedIndexPagePerLocale() throws Exception { } @Test - public void jspIndexPagesAreUnprocessedAndKeepTheJspSuffix() throws Exception { + public void indexJspIndexPagesAreUnprocessedAndKeepTheJspSuffix() throws Exception { given(defaultAspect).containsFileWithContents("index.jsp", "<%= 1 + 2 %>\n<@js.bundle@/>") .and(brjs).localeSwitcherHasContents("") .and(app).hasBeenBuilt(targetDir); @@ -96,6 +98,14 @@ public void jspIndexPagesAreUnprocessedAndKeepTheJspSuffix() throws Exception { .and(targetDir).containsFileWithContents("/index.jsp", "/js/prod/combined/bundle.js"); } + @Test + public void tokensInIndexJspAreReplaced() throws Exception + { + given(defaultAspect).containsFileWithContents("index.jsp", "<@tagToken @/>") + .and(app).hasBeenBuilt(targetDir); + then(targetDir).containsFileWithContents("/index.jsp", "prod replacement"); + } + @Test public void nonDefaultAspectsHaveTheSameIndexPagesButWithinANamedDirectory() throws Exception { given(appConf).supportsLocales("en", "de") diff --git a/brjs-core/src/main/java/org/bladerunnerjs/appserver/ServletContentAccessor.java b/brjs-core/src/main/java/org/bladerunnerjs/appserver/ServletContentAccessor.java index c07b3e875..14f6978d8 100644 --- a/brjs-core/src/main/java/org/bladerunnerjs/appserver/ServletContentAccessor.java +++ b/brjs-core/src/main/java/org/bladerunnerjs/appserver/ServletContentAccessor.java @@ -50,7 +50,9 @@ public void handleRequest(String urlPath, OutputStream output) throws IOExceptio if (urlPath.endsWith(".jsp")) { urlPath = (!urlPath.startsWith("/")) ? "/"+urlPath : urlPath; request.setAttribute(BRJSDevServletFilter.IGNORE_REQUEST_ATTRIBUTE, true); - servletContext.getRequestDispatcher(urlPath).forward(request, response); + CharResponseWrapper responseWrapper = new CharResponseWrapper(response); + servletContext.getRequestDispatcher(urlPath).forward(request, responseWrapper); + IOUtils.copy(responseWrapper.getReader(), output); } else { super.writeLocalUrlContentsToOutputStream(urlPath, output); } From da1d7fe2629d0f785b7a4b1b874ad03bf9a4e8b5 Mon Sep 17 00:00:00 2001 From: Andy Berry Date: Mon, 6 Jul 2015 10:17:52 +0100 Subject: [PATCH 2/2] deprecating UrlContentAccessor.writeLocalUrlContentsToOutputStream() since its now identical to handleRequest() --- .../appserver/ServletContentAccessor.java | 13 +------------ .../org/bladerunnerjs/model/UrlContentAccessor.java | 7 ++++--- .../bladerunnerjs/utility/AppRequestHandler.java | 2 +- 3 files changed, 6 insertions(+), 16 deletions(-) diff --git a/brjs-core/src/main/java/org/bladerunnerjs/appserver/ServletContentAccessor.java b/brjs-core/src/main/java/org/bladerunnerjs/appserver/ServletContentAccessor.java index 14f6978d8..4694d7a02 100644 --- a/brjs-core/src/main/java/org/bladerunnerjs/appserver/ServletContentAccessor.java +++ b/brjs-core/src/main/java/org/bladerunnerjs/appserver/ServletContentAccessor.java @@ -30,18 +30,7 @@ public ServletContentAccessor(App app, ServletContext servletContext, HttpServle @Override public void writeLocalUrlContentsToOutputStream(String urlPath, OutputStream output) throws IOException { - try { - if (urlPath.endsWith(".jsp")) { - urlPath = (!urlPath.startsWith("/")) ? "/"+urlPath : urlPath; - CharResponseWrapper responseWrapper = new CharResponseWrapper(response); - servletContext.getRequestDispatcher(urlPath).include(request, responseWrapper); - IOUtils.copy(responseWrapper.getReader(), output); - } else { - super.writeLocalUrlContentsToOutputStream(urlPath, output); - } - } catch (ServletException ex) { - throw new IOException(ex); - } + handleRequest(urlPath, output); } @Override diff --git a/brjs-core/src/main/java/org/bladerunnerjs/model/UrlContentAccessor.java b/brjs-core/src/main/java/org/bladerunnerjs/model/UrlContentAccessor.java index bac5d264a..ae77dcd88 100644 --- a/brjs-core/src/main/java/org/bladerunnerjs/model/UrlContentAccessor.java +++ b/brjs-core/src/main/java/org/bladerunnerjs/model/UrlContentAccessor.java @@ -8,14 +8,15 @@ public abstract class UrlContentAccessor { /** - * * Write the contents of the reply from the given URL to the output stream. + * @deprecated Use handleRequest(String, OutputStream) instead */ public abstract void writeLocalUrlContentsToOutputStream(String urlPath, OutputStream output) throws IOException; /** - * Attempts to handle the request using the server. If a server context isn't available writes the content of the local url path to the output stream, otherwise - * use the server context directly to handle the request. + * Attempts to handle the request using the server. + * If a server context isn't available writes the content of the local URL path to the output stream, otherwise + * uses the server context to handle the request and write to the output stream. */ public abstract void handleRequest(String urlPath, OutputStream output) throws IOException; diff --git a/brjs-core/src/main/java/org/bladerunnerjs/utility/AppRequestHandler.java b/brjs-core/src/main/java/org/bladerunnerjs/utility/AppRequestHandler.java index 08b109474..bf8f50e61 100644 --- a/brjs-core/src/main/java/org/bladerunnerjs/utility/AppRequestHandler.java +++ b/brjs-core/src/main/java/org/bladerunnerjs/utility/AppRequestHandler.java @@ -186,7 +186,7 @@ public Map> getTagsAndAttributesFromIndexPage(Browsabl String pathRelativeToApp = app.dir().getRelativePath(indexPage); ByteArrayOutputStream indexPageContent = new ByteArrayOutputStream(); - contentAccessor.writeLocalUrlContentsToOutputStream(pathRelativeToApp, indexPageContent); + contentAccessor.handleRequest(pathRelativeToApp, indexPageContent); return TagPluginUtility.getUsedTagsAndAttributes(indexPageContent.toString(), browsableNode.getBundleSet(), requestMode, locale); }