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 2014/08/01 19:38:24 UTC
git commit: TAP5-2278: ModuleDispatcher should send 404 response when
the request includes the prefix, but not a valid module path
Repository: tapestry-5
Updated Branches:
refs/heads/master 0d3c9bc95 -> 37c2f877b
TAP5-2278: ModuleDispatcher should send 404 response when the request includes the prefix, but not a valid module path
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/37c2f877
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/37c2f877
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/37c2f877
Branch: refs/heads/master
Commit: 37c2f877be6fc7181c37bcfc8493f396409f90e8
Parents: 0d3c9bc
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Fri Aug 1 10:38:27 2014 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Fri Aug 1 10:38:27 2014 -0700
----------------------------------------------------------------------
.../services/javascript/ModuleDispatcher.java | 18 ++++++++++++++----
.../javascript/ModuleDispatcherTests.groovy | 14 ++++++++++++--
2 files changed, 26 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/37c2f877/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleDispatcher.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleDispatcher.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleDispatcher.java
index a841578..372fabd 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleDispatcher.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleDispatcher.java
@@ -1,5 +1,3 @@
-// Copyright 2012, 2013 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.
// You may obtain a copy of the License at
@@ -25,6 +23,7 @@ import org.apache.tapestry5.services.Request;
import org.apache.tapestry5.services.Response;
import org.apache.tapestry5.services.javascript.ModuleManager;
+import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.EnumSet;
import java.util.Set;
@@ -69,8 +68,19 @@ public class ModuleDispatcher implements Dispatcher
{
String path = request.getPath();
- return path.startsWith(requestPrefix) &&
- handleModuleRequest(path.substring(requestPrefix.length()));
+ if (path.startsWith(requestPrefix))
+ {
+ String extraPath = path.substring(requestPrefix.length());
+
+ if (! handleModuleRequest(extraPath))
+ {
+ response.sendError(HttpServletResponse.SC_NOT_FOUND, String.format("No module for path '%s'.", extraPath));
+ }
+
+ return true;
+ }
+
+ return false;
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/37c2f877/tapestry-core/src/test/groovy/org/apache/tapestry5/services/javascript/ModuleDispatcherTests.groovy
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/services/javascript/ModuleDispatcherTests.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/services/javascript/ModuleDispatcherTests.groovy
index c239026..30d0066 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/services/javascript/ModuleDispatcherTests.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/services/javascript/ModuleDispatcherTests.groovy
@@ -5,25 +5,32 @@ import org.apache.tapestry5.ioc.internal.QuietOperationTracker
import org.apache.tapestry5.ioc.test.TestBase
import org.apache.tapestry5.services.PathConstructor
import org.apache.tapestry5.services.Request
+import org.apache.tapestry5.services.Response
+import org.easymock.EasyMock
import org.testng.annotations.DataProvider
import org.testng.annotations.Test
+import javax.servlet.http.HttpServletResponse
+
class ModuleDispatcherTests extends TestBase {
@Test(dataProvider = "unknownPaths")
void "invalid extension is ignored"(path) {
def request = newMock Request
+ def response = newMock Response
def pc = newMock PathConstructor
expect(pc.constructDispatchPath("modules")).andReturn("/modules")
expect(request.path).andReturn(path)
+ expect(response.sendError(EasyMock.eq(HttpServletResponse.SC_NOT_FOUND), EasyMock.notNull()))
+
replay()
def handler = new ModuleDispatcher(null, null, new QuietOperationTracker(), pc, "modules", false)
- assert handler.dispatch(request, null) == false
+ assert handler.dispatch(request, response) == true
verify()
}
@@ -43,6 +50,7 @@ class ModuleDispatcherTests extends TestBase {
def manager = newMock ModuleManager
def request = newMock Request
+ def response = newMock Response
def pc = newMock PathConstructor
expect(pc.constructDispatchPath("modules")).andReturn("/modules")
@@ -51,11 +59,13 @@ class ModuleDispatcherTests extends TestBase {
expect(manager.findResourceForModule("foo/bar")).andReturn null
+ expect(response.sendError(EasyMock.eq(HttpServletResponse.SC_NOT_FOUND), EasyMock.notNull()))
+
replay()
def handler = new ModuleDispatcher(manager, null, new QuietOperationTracker(), pc, "modules", false)
- assert handler.dispatch(request, null) == false
+ assert handler.dispatch(request, response) == true
verify()
}