Modified:
/jcatapult-mvc/trunk/.classpath
/jcatapult-mvc/trunk/jcatapult-mvc.eml
/jcatapult-mvc/trunk/jcatapult-mvc.ipr
/jcatapult-mvc/trunk/project.xml
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/action/DefaultActionMappingWorkflow.java
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/action/result/RedirectResult.java
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/AbstractButtonInput.java
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/Button.java
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/Form.java
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/Image.java
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/Reset.java
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/Submit.java
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/action/DefaultActionMappingWorkflowTest.java
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/action/result/RedirectResultTest.java
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/result/form/control/ButtonTest.java
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/result/form/control/FormTest.java
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/result/form/control/ImageTest.java
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/result/form/control/SubmitTest.java
=======================================
--- /jcatapult-mvc/trunk/.classpath Tue Jul 7 15:38:06 2009
+++ /jcatapult-mvc/trunk/.classpath Wed Oct 14 11:38:18 2009
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="src" path="src/conf/main"/>
- <classpathentry kind="src" output="target/classes/test/integration"
path="src/conf/test/integration"/>
- <classpathentry kind="src" output="target/classes/test/unit"
path="src/conf/test/unit"/>
<classpathentry kind="src" path="src/java/main"/>
+ <classpathentry kind="src" path="src/conf/main"/>
<classpathentry kind="src" output="target/classes/test/integration"
path="src/java/test/integration"/>
<classpathentry kind="src" output="target/classes/test/unit"
path="src/java/test/unit"/>
+ <classpathentry kind="src" output="target/classes/test/integration"
path="src/conf/test/integration"/>
+ <classpathentry kind="src" output="target/classes/test/unit"
path="src/conf/test/unit"/>
<classpathentry kind="con"
path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="var"
path="SAVANT_REPOSITORY/com/google/code/guice/guice/1.0/guice-1.0.jar"
sourcepath="/SAVANT_REPOSITORY/com/google/code/guice/guice/1.0/guice-1.0-src.jar"/>
<classpathentry kind="var"
path="SAVANT_REPOSITORY/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar"
sourcepath="/SAVANT_REPOSITORY/javax/persistence/persistence-api/1.0/persistence-api-1.0-src.jar"/>
@@ -21,10 +21,10 @@
<classpathentry kind="var"
path="SAVANT_REPOSITORY/org/easymock/easymock/2.3/easymock-2.3.jar"
sourcepath="/SAVANT_REPOSITORY/org/easymock/easymock/2.3/easymock-2.3-src.jar"/>
<classpathentry kind="var"
path="SAVANT_REPOSITORY/org/freemarker/freemarker/2.3.12/freemarker-2.3.12.jar"
sourcepath="/SAVANT_REPOSITORY/org/freemarker/freemarker/2.3.12/freemarker-2.3.12-src.jar"/>
<classpathentry kind="var"
path="SAVANT_REPOSITORY/org/hsqldb/hsqldb/1.8.9/hsqldb-1.8.9.jar"
sourcepath="/SAVANT_REPOSITORY/org/hsqldb/hsqldb/1.8.9/hsqldb-1.8.9-src.jar"/>
- <classpathentry kind="var"
path="SAVANT_REPOSITORY/org/jcatapult/jcatapult-core/1.0.1/jcatapult-core-1.0.1.jar"
sourcepath="/SAVANT_REPOSITORY/org/jcatapult/jcatapult-core/1.0.1/jcatapult-core-1.0.1-src.jar"/>
- <classpathentry kind="var"
path="SAVANT_REPOSITORY/org/jcatapult/jcatapult-core/1.0.1/jcatapult-core-test-1.0.1.jar"
sourcepath="/SAVANT_REPOSITORY/org/jcatapult/jcatapult-core/1.0.1/jcatapult-core-test-1.0.1-src.jar"/>
+ <classpathentry kind="var"
path="SAVANT_REPOSITORY/org/jcatapult/jcatapult-core/1.0.2/jcatapult-core-1.0.2.jar"
sourcepath="/SAVANT_REPOSITORY/org/jcatapult/jcatapult-core/1.0.2/jcatapult-core-1.0.2-src.jar"/>
+ <classpathentry kind="var"
path="SAVANT_REPOSITORY/org/jcatapult/jcatapult-core/1.0.2/jcatapult-core-test-1.0.2.jar"
sourcepath="/SAVANT_REPOSITORY/org/jcatapult/jcatapult-core/1.0.2/jcatapult-core-test-1.0.2-src.jar"/>
<classpathentry kind="var"
path="SAVANT_REPOSITORY/org/joda/joda-time/joda-time/1.4/joda-time-1.4.jar"
sourcepath="/SAVANT_REPOSITORY/org/joda/joda-time/joda-time/1.4/joda-time-1.4-src.jar"/>
- <classpathentry kind="con"
path="org.eclipse.jdt.junit.JUNIT_CONTAINER/-4.4.jar"/>
+ <classpathentry kind="var"
path="SAVANT_REPOSITORY/org/junit/junit/4.4/junit-4.4.jar"
sourcepath="/SAVANT_REPOSITORY/org/junit/junit/4.4/junit-4.4-src.jar"/>
<classpathentry kind="var"
path="SAVANT_REPOSITORY/org/objectweb/asm/asm/3.1/asm-3.1.jar"
sourcepath="/SAVANT_REPOSITORY/org/objectweb/asm/asm/3.1/asm-3.1-src.jar"/>
<classpathentry kind="output" path="target/classes/main"/>
</classpath>
=======================================
--- /jcatapult-mvc/trunk/jcatapult-mvc.eml Tue Jul 14 12:33:43 2009
+++ /jcatapult-mvc/trunk/jcatapult-mvc.eml Wed Oct 14 11:38:18 2009
@@ -3,8 +3,14 @@
<output-test url="file://$MODULE_DIR$/target/classes/test/unit"/>
<exclude-output/>
<contentEntry url="file://$MODULE_DIR$">
+ <testFolder url="file://$MODULE_DIR$/src/java/test/integration"/>
+ <testFolder url="file://$MODULE_DIR$/src/java/test/unit"/>
+ <testFolder url="file://$MODULE_DIR$/src/conf/test/integration"/>
+ <testFolder url="file://$MODULE_DIR$/src/conf/test/unit"/>
<excludeFolder url="file://$MODULE_DIR$/target"/>
+ <excludeFolder url="file://$MODULE_DIR$/target/classes/main"/>
<excludeFolder url="file://$MODULE_DIR$/target/classes/test/unit"/>
+ <excludeFolder url="file://$MODULE_DIR$/target/classes/main"/>
<excludeFolder url="file://$MODULE_DIR$/target/classes/test/unit"/>
</contentEntry>
</component>
=======================================
--- /jcatapult-mvc/trunk/jcatapult-mvc.ipr Tue Jul 7 15:38:06 2009
+++ /jcatapult-mvc/trunk/jcatapult-mvc.ipr Wed Oct 14 11:38:18 2009
@@ -153,11 +153,12 @@
<inspection_tool class="UnusedLabel" enabled="false"
level="WARNING" enabled_by_default="false" />
</profile>
</profiles>
- <list size="4">
- <item index="0" class="java.lang.String" itemvalue="WARNING" />
- <item index="1" class="java.lang.String" itemvalue="SERVER PROBLEM"
/>
- <item index="2" class="java.lang.String" itemvalue="INFO" />
- <item index="3" class="java.lang.String" itemvalue="ERROR" />
+ <list size="5">
+ <item index="0" class="java.lang.String" itemvalue="TYPO" />
+ <item index="1" class="java.lang.String" itemvalue="WARNING" />
+ <item index="2" class="java.lang.String" itemvalue="SERVER PROBLEM"
/>
+ <item index="3" class="java.lang.String" itemvalue="INFO" />
+ <item index="4" class="java.lang.String" itemvalue="ERROR" />
</list>
</component>
<component name="JavacSettings">
@@ -322,7 +323,9 @@
<component name="ProjectDetails">
<option name="projectName" value="jcatapult-mvc" />
</component>
- <component name="ProjectFileVersion" converted="true" />
+ <component name="ProjectDictionaryState">
+ <dictionary name="bpontarelli" />
+ </component>
<component name="ProjectKey">
<option name="state"
value="https://jcatapult.googlecode.com/svn/jcatapult-mvc/trunk/jcatapult-mvc.ipr"
/>
</component>
@@ -515,8 +518,5 @@
<option name="useAlternate" value="false" />
</LanguageOptions>
</component>
- <UsedPathMacros>
- <macro name="SAVANT_REPOSITORY" description="" />
- </UsedPathMacros>
</project>
=======================================
--- /jcatapult-mvc/trunk/project.xml Sun Aug 2 10:36:15 2009
+++ /jcatapult-mvc/trunk/project.xml Wed Oct 14 11:38:18 2009
@@ -1,7 +1,7 @@
<project xmlns="http://www.inversoft.org/schemas/savant-2.0/project"
name="jcatapult-mvc"
group="jcatapult.org"
- version="1.0.8">
+ version="1.0.9">
<plugin group="plugins.savant.inversoft.org" name="ide" version="1.0"/>
<plugin group="plugins.savant.inversoft.org" name="clean" version="1.0"/>
@@ -12,7 +12,7 @@
<!-- compile properties -->
<property name="jdk.version" value="1.6"/>
- <property name="version.jcatapult" value="1.0.1"/>
+ <property name="version.jcatapult" value="1.0.2"/>
<release>
<publication name="jcatapult-mvc" type="jar" compatType="minor"
file="target/jars/${project.name}-${project.version}.jar"/>
=======================================
---
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/action/DefaultActionMappingWorkflow.java
Tue May 12 22:28:10 2009
+++
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/action/DefaultActionMappingWorkflow.java
Wed Oct 14 11:38:18 2009
@@ -23,6 +23,7 @@
import org.jcatapult.mvc.parameter.InternalParameters;
import org.jcatapult.mvc.util.RequestTools;
+import org.jcatapult.servlet.ServletTools;
import org.jcatapult.servlet.WorkflowChain;
import com.google.inject.Inject;
@@ -94,7 +95,7 @@
// Handle relative URIs
if (!uri.startsWith("/")) {
- String requestURI = request.getRequestURI();
+ String requestURI =
ServletTools.getRequestURI(request);
int index = requestURI.lastIndexOf("/");
if (index >= 0) {
uri = requestURI.substring(0, index) + "/"
+ uri;
@@ -106,7 +107,7 @@
}
if (uri == null) {
- uri = request.getRequestURI();
+ uri = ServletTools.getRequestURI(request);
if (!uri.startsWith("/")) {
uri = "/" + uri;
}
=======================================
---
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/action/result/RedirectResult.java
Sat Jul 12 05:38:22 2008
+++
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/action/result/RedirectResult.java
Wed Oct 14 11:38:18 2009
@@ -18,6 +18,7 @@
import java.io.IOException;
import java.lang.annotation.Annotation;
import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jcatapult.mvc.action.ActionInvocation;
@@ -34,12 +35,15 @@
* @author Brian Pontarelli
*/
public class RedirectResult extends AbstractResult<Redirect> {
+ private final HttpServletRequest request;
private final HttpServletResponse response;
@Inject
- public RedirectResult(ExpressionEvaluator expressionEvaluator,
HttpServletResponse response) {
+ public RedirectResult(ExpressionEvaluator expressionEvaluator,
HttpServletResponse response,
+ HttpServletRequest request) {
super(expressionEvaluator);
this.response = response;
+ this.request = request;
}
/**
@@ -47,6 +51,11 @@
*/
public void execute(Redirect redirect, ActionInvocation invocation)
throws IOException, ServletException {
String page = expand(redirect.uri(), invocation.action());
+ String context = request.getContextPath();
+ if (context.length() > 0 && page.startsWith("/")) {
+ page = context + page;
+ }
+
boolean perm = redirect.perm();
response.setStatus(perm ? 301 : 302);
=======================================
---
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/AbstractButtonInput.java
Tue Sep 30 12:12:27 2008
+++
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/AbstractButtonInput.java
Wed Oct 14 11:38:18 2009
@@ -16,6 +16,9 @@
package org.jcatapult.mvc.result.form.control;
import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+
+import com.google.inject.Inject;
/**
* <p>
@@ -26,8 +29,12 @@
* @author Brian Pontarelli
*/
public abstract class AbstractButtonInput extends AbstractInput {
- public AbstractButtonInput() {
+ private final HttpServletRequest request;
+
+ @Inject
+ public AbstractButtonInput(HttpServletRequest request) {
super(true);
+ this.request = request;
}
/**
@@ -44,6 +51,11 @@
String action = (String) attributes.remove("action");
if (action != null) {
+ String contextPath = request.getContextPath();
+ if (action.startsWith("/") && contextPath.length() > 0) {
+ action = contextPath + action;
+ }
+
parameters.put("actionURI", action);
}
=======================================
---
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/Button.java
Mon Sep 15 07:58:22 2008
+++
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/Button.java
Wed Oct 14 11:38:18 2009
@@ -15,8 +15,12 @@
*/
package org.jcatapult.mvc.result.form.control;
-import org.jcatapult.mvc.result.control.annotation.ControlAttributes;
+import javax.servlet.http.HttpServletRequest;
+
import org.jcatapult.mvc.result.control.annotation.ControlAttribute;
+import org.jcatapult.mvc.result.control.annotation.ControlAttributes;
+
+import com.google.inject.Inject;
/**
* <p>
@@ -37,6 +41,11 @@
}
)
public class Button extends AbstractButtonInput {
+ @Inject
+ public Button(HttpServletRequest request) {
+ super(request);
+ }
+
/**
* @return button.ftl
*/
=======================================
---
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/Form.java
Tue May 12 22:28:10 2009
+++
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/Form.java
Wed Oct 14 11:38:18 2009
@@ -77,10 +77,11 @@
@Override
public void renderStart(Writer writer, Map<String, Object> attributes,
Map<String, String> dynamicAttributes) {
String action = (String) attributes.get("action");
+ boolean fullyQualified = action.startsWith("http://") ||
action.startsWith("https://");
// Handle relative URIs such as 'delete' with a current URI
of '/user/' will result in
// a new URI of '/user/delete'
- if (!action.startsWith("/")) {
+ if (!action.startsWith("/") && !fullyQualified) {
String currentURI = currentInvocation().uri();
int index = currentURI.lastIndexOf("/");
if (index >= 0) {
@@ -90,19 +91,29 @@
}
}
- ActionInvocation current = actionInvocationStore.getCurrent();
-
- ActionInvocation actionInvocation = actionMapper.map(action,
false);
- if (actionInvocation == null || actionInvocation.action() == null)
{
- throw new IllegalArgumentException("The form action [" +
action + "] is not a valid URI " +
- "that maps to an action class by the JCatapult MVC.");
- } else if (current == null || current.action() == null ||
- !current.action().getClass().equals(actionInvocation.action().getClass())){
- actionInvocationStore.setCurrent(actionInvocation);
- differentURI = true;
+ if (!fullyQualified) {
+ ActionInvocation current = actionInvocationStore.getCurrent();
+
+ ActionInvocation actionInvocation = actionMapper.map(action,
false);
+ if (actionInvocation == null || actionInvocation.action() ==
null) {
+ throw new IllegalArgumentException("The form action [" +
action + "] is not a valid URI " +
+ "that maps to an action class by the JCatapult MVC.");
+ } else if (current == null || current.action() == null ||
+ !current.action().getClass().equals(actionInvocation.action().getClass())){
+ actionInvocationStore.setCurrent(actionInvocation);
+ differentURI = true;
+ }
}
formPreparer.prepare();
+
+ // Fix the action URI to include the context path
+ String contextPath = request.getContextPath();
+ if (contextPath.length() > 0 && !fullyQualified) {
+ attributes.put("action", contextPath + action);
+ }
+
+ // Render
super.renderStart(writer, attributes, dynamicAttributes);
}
=======================================
---
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/Image.java
Tue Sep 30 12:12:27 2008
+++
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/Image.java
Wed Oct 14 11:38:18 2009
@@ -15,8 +15,12 @@
*/
package org.jcatapult.mvc.result.form.control;
-import org.jcatapult.mvc.result.control.annotation.ControlAttributes;
+import javax.servlet.http.HttpServletRequest;
+
import org.jcatapult.mvc.result.control.annotation.ControlAttribute;
+import org.jcatapult.mvc.result.control.annotation.ControlAttributes;
+
+import com.google.inject.Inject;
/**
* <p>
@@ -38,6 +42,11 @@
}
)
public class Image extends AbstractButtonInput {
+ @Inject
+ public Image(HttpServletRequest request) {
+ super(request);
+ }
+
/**
* Calls super and then moves the ismap attribute out and if it is
true set it back in as the
* String <code>ismap</code>.
=======================================
---
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/Reset.java
Mon Sep 15 07:58:22 2008
+++
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/Reset.java
Wed Oct 14 11:38:18 2009
@@ -15,8 +15,12 @@
*/
package org.jcatapult.mvc.result.form.control;
-import org.jcatapult.mvc.result.control.annotation.ControlAttributes;
+import javax.servlet.http.HttpServletRequest;
+
import org.jcatapult.mvc.result.control.annotation.ControlAttribute;
+import org.jcatapult.mvc.result.control.annotation.ControlAttributes;
+
+import com.google.inject.Inject;
/**
* <p>
@@ -37,6 +41,11 @@
}
)
public class Reset extends AbstractButtonInput {
+ @Inject
+ public Reset(HttpServletRequest request) {
+ super(request);
+ }
+
/**
* @return reset.ftl
*/
=======================================
---
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/Submit.java
Mon Sep 15 07:58:22 2008
+++
/jcatapult-mvc/trunk/src/java/main/org/jcatapult/mvc/result/form/control/Submit.java
Wed Oct 14 11:38:18 2009
@@ -15,8 +15,12 @@
*/
package org.jcatapult.mvc.result.form.control;
-import org.jcatapult.mvc.result.control.annotation.ControlAttributes;
+import javax.servlet.http.HttpServletRequest;
+
import org.jcatapult.mvc.result.control.annotation.ControlAttribute;
+import org.jcatapult.mvc.result.control.annotation.ControlAttributes;
+
+import com.google.inject.Inject;
/**
* <p>
@@ -37,6 +41,11 @@
}
)
public class Submit extends AbstractButtonInput {
+ @Inject
+ public Submit(HttpServletRequest request) {
+ super(request);
+ }
+
/**
* @return submit.ftl
*/
=======================================
---
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/action/DefaultActionMappingWorkflowTest.java
Tue May 12 22:28:10 2009
+++
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/action/DefaultActionMappingWorkflowTest.java
Wed Oct 14 11:38:18 2009
@@ -74,6 +74,18 @@
run("/admin/user/edit", null);
}
+
+ @Test
+ public void testRequestURIContext() throws IOException,
ServletException {
+ request.setUri("/context-path/admin/user/edit");
+ request.setContextPath("/context-path");
+ request.setPost(true);
+ request.setParameter("__jc_a_submit", "");
+ request.setParameter("__jc_a_cancel", "cancel");
+ request.setParameter("submit", "Submit");
+
+ run("/admin/user/edit", null);
+ }
@Test
public void testExtension() throws IOException, ServletException {
=======================================
---
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/action/result/RedirectResultTest.java
Mon Jun 30 14:10:55 2008
+++
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/action/result/RedirectResultTest.java
Wed Oct 14 11:38:18 2009
@@ -18,11 +18,12 @@
import java.io.IOException;
import java.lang.annotation.Annotation;
import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.easymock.EasyMock;
-import org.jcatapult.mvc.action.result.annotation.Redirect;
+import static org.easymock.EasyMock.*;
import org.jcatapult.mvc.action.DefaultActionInvocation;
+import org.jcatapult.mvc.action.result.annotation.Redirect;
import org.jcatapult.mvc.parameter.el.ExpressionEvaluator;
import org.junit.Test;
@@ -36,55 +37,109 @@
public class RedirectResultTest {
@Test
public void testFullyQualified() throws IOException, ServletException {
- ExpressionEvaluator ee =
EasyMock.createStrictMock(ExpressionEvaluator.class);
- EasyMock.replay(ee);
-
- HttpServletResponse response =
EasyMock.createStrictMock(HttpServletResponse.class);
+ ExpressionEvaluator ee =
createStrictMock(ExpressionEvaluator.class);
+ replay(ee);
+
+ HttpServletRequest request =
createStrictMock(HttpServletRequest.class);
+ expect(request.getContextPath()).andReturn("");
+ replay(request);
+
+ HttpServletResponse response =
createStrictMock(HttpServletResponse.class);
response.setStatus(301);
response.sendRedirect("http://www.google.com");
- EasyMock.replay(response);
+ replay(response);
Redirect redirect = new
RedirectImpl("success", "http://www.google.com", true);
- RedirectResult forwardResult = new RedirectResult(ee, response);
+ RedirectResult forwardResult = new RedirectResult(ee, response,
request);
forwardResult.execute(redirect, new
DefaultActionInvocation(null, "/foo", "", null));
- EasyMock.verify(response);
+ verify(response);
}
@Test
public void testRelative() throws IOException, ServletException {
- ExpressionEvaluator ee =
EasyMock.createStrictMock(ExpressionEvaluator.class);
- EasyMock.replay(ee);
-
- HttpServletResponse response =
EasyMock.createStrictMock(HttpServletResponse.class);
+ ExpressionEvaluator ee =
createStrictMock(ExpressionEvaluator.class);
+ replay(ee);
+
+ HttpServletRequest request =
createStrictMock(HttpServletRequest.class);
+ expect(request.getContextPath()).andReturn("");
+ replay(request);
+
+ HttpServletResponse response =
createStrictMock(HttpServletResponse.class);
response.setStatus(302);
response.sendRedirect("/foo/bar.jsp");
- EasyMock.replay(response);
+ replay(response);
Redirect redirect = new RedirectImpl("success", "/foo/bar.jsp",
false);
- RedirectResult forwardResult = new RedirectResult(ee, response);
+ RedirectResult forwardResult = new RedirectResult(ee, response,
request);
forwardResult.execute(redirect, new
DefaultActionInvocation(null, "foo", "", null));
- EasyMock.verify(response);
+ verify(response);
+ }
+
+ @Test
+ public void testRelativeContext() throws IOException, ServletException
{
+ ExpressionEvaluator ee =
createStrictMock(ExpressionEvaluator.class);
+ replay(ee);
+
+ HttpServletRequest request =
createStrictMock(HttpServletRequest.class);
+ expect(request.getContextPath()).andReturn("/context-path");
+ replay(request);
+
+ HttpServletResponse response =
createStrictMock(HttpServletResponse.class);
+ response.setStatus(302);
+ response.sendRedirect("/context-path/foo/bar.jsp");
+ replay(response);
+
+ Redirect redirect = new RedirectImpl("success", "/foo/bar.jsp",
false);
+ RedirectResult forwardResult = new RedirectResult(ee, response,
request);
+ forwardResult.execute(redirect, new
DefaultActionInvocation(null, "foo", "", null));
+
+ verify(response);
+ }
+
+ @Test
+ public void testRelativeContextNoSlash() throws IOException,
ServletException {
+ ExpressionEvaluator ee =
createStrictMock(ExpressionEvaluator.class);
+ replay(ee);
+
+ HttpServletRequest request =
createStrictMock(HttpServletRequest.class);
+ expect(request.getContextPath()).andReturn("/context-path");
+ replay(request);
+
+ HttpServletResponse response =
createStrictMock(HttpServletResponse.class);
+ response.setStatus(302);
+ response.sendRedirect("foo/bar.jsp");
+ replay(response);
+
+ Redirect redirect = new RedirectImpl("success", "foo/bar.jsp",
false);
+ RedirectResult forwardResult = new RedirectResult(ee, response,
request);
+ forwardResult.execute(redirect, new
DefaultActionInvocation(null, "foo", "", null));
+
+ verify(response);
}
@Test
public void testExpand() throws IOException, ServletException {
Object action = new Object();
- ExpressionEvaluator ee =
EasyMock.createStrictMock(ExpressionEvaluator.class);
- EasyMock.expect(ee.expand("${foo}", action)).andReturn("result");
- EasyMock.replay(ee);
-
- HttpServletResponse response =
EasyMock.createStrictMock(HttpServletResponse.class);
+ ExpressionEvaluator ee =
createStrictMock(ExpressionEvaluator.class);
+ expect(ee.expand("${foo}", action)).andReturn("result");
+ replay(ee);
+
+ HttpServletRequest request =
createStrictMock(HttpServletRequest.class);
+ expect(request.getContextPath()).andReturn("");
+ replay(request);
+
+ HttpServletResponse response =
createStrictMock(HttpServletResponse.class);
response.setStatus(302);
response.sendRedirect("result");
- EasyMock.replay(response);
+ replay(response);
Redirect redirect = new RedirectImpl("success", "${foo}", false);
- RedirectResult forwardResult = new RedirectResult(ee, response);
+ RedirectResult forwardResult = new RedirectResult(ee, response,
request);
forwardResult.execute(redirect, new
DefaultActionInvocation(action, "foo", "", null));
- EasyMock.verify(response);
+ verify(response);
}
public class RedirectImpl implements Redirect {
=======================================
---
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/result/form/control/ButtonTest.java
Wed Mar 25 11:30:44 2009
+++
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/result/form/control/ButtonTest.java
Wed Oct 14 11:38:18 2009
@@ -15,13 +15,13 @@
*/
package org.jcatapult.mvc.result.form.control;
+import static net.java.util.CollectionTools.*;
import org.example.action.user.Edit;
import org.jcatapult.mvc.action.DefaultActionInvocation;
import org.jcatapult.mvc.result.control.ControlBaseTest;
import org.junit.Test;
import com.google.inject.Inject;
-import static net.java.util.CollectionTools.*;
/**
* <p>
@@ -47,7 +47,7 @@
}
@Test
- public void testAction() {
+ public void testCSS() {
ais.setCurrent(new DefaultActionInvocation(new Edit(), "/button",
null, null));
run(button,
mapNV("name", "button", "value", "test-value", "class", "css-class"),
@@ -60,7 +60,7 @@
}
@Test
- public void testActionAttribute() {
+ public void testAction() {
ais.setCurrent(new DefaultActionInvocation(new Edit(), "/button",
null, null));
run(button,
mapNV("name", "button", "action", "/foo", "value", "test-value"),
@@ -71,4 +71,32 @@
"<div class=\"control-container\"><input type=\"button\"
id=\"button\" name=\"button\" value=\"Button\"/></div>\n" +
"</div>\n");
}
-}
+
+ @Test
+ public void testActionContext() {
+ request.setContextPath("/context");
+ ais.setCurrent(new DefaultActionInvocation(new Edit(), "/button",
null, null));
+ run(button,
+
mapNV("name", "button", "action", "/foo", "value", "test-value"),
+ null, "<input type=\"hidden\" name=\"button@param\"
value=\"param-value\"/>\n" +
+ "<input type=\"hidden\" name=\"__jc_a_button\"
value=\"/context/foo\"/>\n" +
+ "<div class=\"button-button button control\">\n" +
+ "<div class=\"label-container\"> </div>\n" +
+ "<div class=\"control-container\"><input type=\"button\"
id=\"button\" name=\"button\" value=\"Button\"/></div>\n" +
+ "</div>\n");
+ }
+
+ @Test
+ public void testActionContextRelative() {
+ request.setContextPath("/context");
+ ais.setCurrent(new DefaultActionInvocation(new Edit(), "/button",
null, null));
+ run(button,
+
mapNV("name", "button", "action", "foo", "value", "test-value"),
+ null, "<input type=\"hidden\" name=\"button@param\"
value=\"param-value\"/>\n" +
+ "<input type=\"hidden\" name=\"__jc_a_button\"
value=\"foo\"/>\n" +
+ "<div class=\"button-button button control\">\n" +
+ "<div class=\"label-container\"> </div>\n" +
+ "<div class=\"control-container\"><input type=\"button\"
id=\"button\" name=\"button\" value=\"Button\"/></div>\n" +
+ "</div>\n");
+ }
+}
=======================================
---
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/result/form/control/FormTest.java
Tue Sep 30 12:12:27 2008
+++
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/result/form/control/FormTest.java
Wed Oct 14 11:38:18 2009
@@ -19,16 +19,15 @@
import java.io.StringWriter;
import javax.servlet.ServletException;
+import static net.java.util.CollectionTools.*;
import org.example.action.user.Edit;
import org.example.action.user.Index;
import org.jcatapult.mvc.action.DefaultActionInvocation;
import org.jcatapult.mvc.result.control.ControlBaseTest;
import static org.junit.Assert.*;
-import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.google.inject.Inject;
-import static net.java.util.CollectionTools.*;
/**
* <p>
@@ -53,6 +52,79 @@
"</form>\n" +
"</div>\n");
}
+
+ @Test
+ public void testNoPrepareRelative() {
+ request.setUri("/user/");
+ Index index = new Index();
+ ais.setCurrent(new DefaultActionInvocation(index, "/user/", null,
null));
+
+ run(form,
+ mapNV("action", "edit", "method", "POST"),
+ null, "<div class=\"form\">\n" +
+ "<form action=\"edit\" method=\"POST\">\n" +
+ "</form>\n" +
+ "</div>\n");
+ }
+
+ @Test
+ public void testNoPrepareFullyQualified() {
+ request.setUri("/user/");
+ Index index = new Index();
+ ais.setCurrent(new DefaultActionInvocation(index, "/user/", null,
null));
+
+ run(form,
+ mapNV("action", "https://www.google.com", "method", "POST"),
+ null, "<div class=\"form\">\n" +
+ "<form action=\"https://www.google.com\" method=\"POST\">\n" +
+ "</form>\n" +
+ "</div>\n");
+ }
+
+ @Test
+ public void testNoPrepareContextPath() {
+ request.setUri("/context/user/");
+ request.setContextPath("/context");
+ Index index = new Index();
+ ais.setCurrent(new DefaultActionInvocation(index, "/user/", null,
null));
+
+ run(form,
+ mapNV("action", "/user/", "method", "POST"),
+ null, "<div class=\"form\">\n" +
+ "<form action=\"/context/user/\" method=\"POST\">\n" +
+ "</form>\n" +
+ "</div>\n");
+ }
+
+ @Test
+ public void testRelativeContextPath() {
+ request.setUri("/context/user/");
+ request.setContextPath("/context");
+ Index index = new Index();
+ ais.setCurrent(new DefaultActionInvocation(index, "/user/", null,
null));
+
+ run(form,
+ mapNV("action", "edit", "method", "POST"),
+ null, "<div class=\"form\">\n" +
+ "<form action=\"/context/user/edit\" method=\"POST\">\n" +
+ "</form>\n" +
+ "</div>\n");
+ }
+
+ @Test
+ public void testFullyQualifiedContextPath() {
+ request.setUri("/context/user/");
+ request.setContextPath("/context");
+ Index index = new Index();
+ ais.setCurrent(new DefaultActionInvocation(index, "/user/", null,
null));
+
+ run(form,
+ mapNV("action", "https://www.google.com", "method", "POST"),
+ null, "<div class=\"form\">\n" +
+ "<form action=\"https://www.google.com\" method=\"POST\">\n" +
+ "</form>\n" +
+ "</div>\n");
+ }
@Test
public void testPrepare() throws IOException, ServletException {
=======================================
---
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/result/form/control/ImageTest.java
Wed Mar 25 11:30:44 2009
+++
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/result/form/control/ImageTest.java
Wed Oct 14 11:38:18 2009
@@ -15,13 +15,13 @@
*/
package org.jcatapult.mvc.result.form.control;
+import static net.java.util.CollectionTools.*;
import org.example.action.user.Edit;
import org.jcatapult.mvc.action.DefaultActionInvocation;
import org.jcatapult.mvc.result.control.ControlBaseTest;
import org.junit.Test;
import com.google.inject.Inject;
-import static net.java.util.CollectionTools.*;
/**
* <p>
@@ -84,4 +84,32 @@
"<div class=\"control-container\"><input type=\"image\"
id=\"image\" ismap=\"ismap\" name=\"image\" src=\"foo.gif\"
value=\"Image\"/></div>\n" +
"</div>\n");
}
-}
+
+ @Test
+ public void testActionContext() {
+ request.setContextPath("/context");
+ ais.setCurrent(new DefaultActionInvocation(new Edit(), "/image",
null, null));
+ run(image,
+
mapNV("name", "image", "value", "test-value", "action", "/foo", "src", "foo.gif"),
+ null, "<input type=\"hidden\" name=\"image@param\"
value=\"param-value\"/>\n" +
+ "<input type=\"hidden\" name=\"__jc_a_image\"
value=\"/context/foo\"/>\n" +
+ "<div class=\"image-button button control\">\n" +
+ "<div class=\"label-container\"> </div>\n" +
+ "<div class=\"control-container\"><input type=\"image\"
id=\"image\" name=\"image\" src=\"foo.gif\" value=\"Image\"/></div>\n" +
+ "</div>\n");
+ }
+
+ @Test
+ public void testActionContextRelative() {
+ request.setContextPath("/context");
+ ais.setCurrent(new DefaultActionInvocation(new Edit(), "/image",
null, null));
+ run(image,
+
mapNV("name", "image", "value", "test-value", "action", "foo", "src", "foo.gif"),
+ null, "<input type=\"hidden\" name=\"image@param\"
value=\"param-value\"/>\n" +
+ "<input type=\"hidden\" name=\"__jc_a_image\"
value=\"foo\"/>\n" +
+ "<div class=\"image-button button control\">\n" +
+ "<div class=\"label-container\"> </div>\n" +
+ "<div class=\"control-container\"><input type=\"image\"
id=\"image\" name=\"image\" src=\"foo.gif\" value=\"Image\"/></div>\n" +
+ "</div>\n");
+ }
+}
=======================================
---
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/result/form/control/SubmitTest.java
Wed Mar 25 11:30:44 2009
+++
/jcatapult-mvc/trunk/src/java/test/unit/org/jcatapult/mvc/result/form/control/SubmitTest.java
Wed Oct 14 11:38:18 2009
@@ -15,13 +15,13 @@
*/
package org.jcatapult.mvc.result.form.control;
+import static net.java.util.CollectionTools.*;
import org.example.action.user.Edit;
import org.jcatapult.mvc.action.DefaultActionInvocation;
import org.jcatapult.mvc.result.control.ControlBaseTest;
import org.junit.Test;
import com.google.inject.Inject;
-import static net.java.util.CollectionTools.*;
/**
* <p>
@@ -71,4 +71,32 @@
"<div class=\"control-container\"><input type=\"submit\"
id=\"button\" name=\"button\" value=\"Button\"/></div>\n" +
"</div>\n");
}
-}
+
+ @Test
+ public void testActionAttributeContext() {
+ request.setContextPath("/context");
+ ais.setCurrent(new DefaultActionInvocation(new Edit(), "/button",
null, null));
+ run(submit,
+
mapNV("name", "button", "action", "/foo", "value", "test-value"),
+ null, "<input type=\"hidden\" name=\"button@param\"
value=\"param-value\"/>\n" +
+ "<input type=\"hidden\" name=\"__jc_a_button\"
value=\"/context/foo\"/>\n" +
+ "<div class=\"submit-button button control\">\n" +
+ "<div class=\"label-container\"> </div>\n" +
+ "<div class=\"control-container\"><input type=\"submit\"
id=\"button\" name=\"button\" value=\"Button\"/></div>\n" +
+ "</div>\n");
+ }
+
+ @Test
+ public void testActionAttributeContextRelative() {
+ request.setContextPath("/context");
+ ais.setCurrent(new DefaultActionInvocation(new Edit(), "/button",
null, null));
+ run(submit,
+
mapNV("name", "button", "action", "foo", "value", "test-value"),
+ null, "<input type=\"hidden\" name=\"button@param\"
value=\"param-value\"/>\n" +
+ "<input type=\"hidden\" name=\"__jc_a_button\"
value=\"foo\"/>\n" +
+ "<div class=\"submit-button button control\">\n" +
+ "<div class=\"label-container\"> </div>\n" +
+ "<div class=\"control-container\"><input type=\"submit\"
id=\"button\" name=\"button\" value=\"Button\"/></div>\n" +
+ "</div>\n");
+ }
+}