craigmcc 2003/02/08 13:01:52 Modified: src/test/org/apache/struts/mock TestMockBase.java src/test/org/apache/struts/util TestRequestUtils.java Log: As part of the investigation of Bugzilla ticket #16603, create unit tests that validate the current behavior of RequestUtils.forwardURL() -- in other words, practice what I've started preaching about "test first" design. I think I've got 100% coverage on the functional behavior of this method, and have found no functional flaws yet. Now, on to pageURL(). PR: 16603 Submitted by: Malik Recoing Revision Changes Path 1.10 +140 -4 jakarta-struts/src/test/org/apache/struts/mock/TestMockBase.java Index: TestMockBase.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/test/org/apache/struts/mock/TestMockBase.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- TestMockBase.java 24 Dec 2002 18:49:52 -0000 1.9 +++ TestMockBase.java 8 Feb 2003 21:01:52 -0000 1.10 @@ -72,7 +72,9 @@ import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.config.ApplicationConfig; +import org.apache.struts.config.ControllerConfig; import org.apache.struts.config.FormPropertyConfig; +import org.apache.struts.config.ForwardConfig; @@ -116,6 +118,7 @@ protected ApplicationConfig appConfig = null; protected ApplicationConfig appConfig2 = null; + protected ApplicationConfig appConfig3 = null; protected MockServletConfig config = null; protected MockServletContext context = null; protected MockPageContext page = null; @@ -144,6 +147,7 @@ // Set up application configurations for our supported modules setUpDefaultApp(); setUpSecondApp(); + setUpThirdApp(); // NOTE - we do not initialize the request attribute // for the selected module so that fallbacks to the @@ -256,6 +260,43 @@ mapping.setType("org.apache.struts.mock.MockAction"); appConfig.addActionConfig(mapping); + // Configure global forward declarations + appConfig.addForwardConfig + (new ForwardConfig("moduleForward", + "/module/forward", + false, // No redirect + false)); // Not context relative + + appConfig.addForwardConfig + (new ForwardConfig("moduleRedirect", + "/module/redirect", + true, // Redirect + false)); // Not context relative + + appConfig.addForwardConfig + (new ForwardConfig("contextForward", + "/context/forward", + false, // No redirect + true)); // Context relative + + appConfig.addForwardConfig + (new ForwardConfig("contextRedirect", + "/context/redirect", + true, // Redirect + true)); // Context relative + + appConfig.addForwardConfig + (new ForwardConfig("moduleNoslash", + "module/noslash", + false, // No redirect + false)); // Not context relative + + appConfig.addForwardConfig + (new ForwardConfig("contextNoslash", + "context/noslash", + false, // No redirect + true)); // Not context relative + } @@ -325,11 +366,106 @@ mapping.setType("org.apache.struts.mock.MockAction"); appConfig2.addActionConfig(mapping); + // Configure global forward declarations + appConfig2.addForwardConfig + (new ForwardConfig("moduleForward", + "/module/forward", + false, // No redirect + false)); // Not context relative + + appConfig2.addForwardConfig + (new ForwardConfig("moduleRedirect", + "/module/redirect", + true, // Redirect + false)); // Not context relative + + appConfig2.addForwardConfig + (new ForwardConfig("contextForward", + "/context/forward", + false, // No redirect + true)); // Context relative + + appConfig2.addForwardConfig + (new ForwardConfig("contextRedirect", + "/context/redirect", + true, // Redirect + true)); // Context relative + + appConfig2.addForwardConfig + (new ForwardConfig("moduleNoslash", + "module/noslash", + false, // No redirect + false)); // Not context relative + + appConfig2.addForwardConfig + (new ForwardConfig("contextNoslash", + "context/noslash", + false, // No redirect + true)); // Not context relative + + } + + + // Set up third app for testing URL mapping + protected void setUpThirdApp() { + + + appConfig3 = new ApplicationConfig("/3"); + context.setAttribute(Action.APPLICATION_KEY + "/3", appConfig3); + + // Instantiate the controller configuration for this app + ControllerConfig controller = new ControllerConfig(); + appConfig3.setControllerConfig(controller); + + // Configure the properties we will be testing + controller.setForwardPattern("/forwarding$M$P"); + controller.setInputForward(true); + controller.setPagePattern("/paging$M$P"); + + // Configure global forward declarations + appConfig3.addForwardConfig + (new ForwardConfig("moduleForward", + "/module/forward", + false, // No redirect + false)); // Not context relative + + appConfig3.addForwardConfig + (new ForwardConfig("moduleRedirect", + "/module/redirect", + true, // Redirect + false)); // Not context relative + + appConfig3.addForwardConfig + (new ForwardConfig("contextForward", + "/context/forward", + false, // No redirect + true)); // Context relative + + appConfig3.addForwardConfig + (new ForwardConfig("contextRedirect", + "/context/redirect", + true, // Redirect + true)); // Context relative + + appConfig3.addForwardConfig + (new ForwardConfig("moduleNoslash", + "module/noslash", + false, // No redirect + false)); // Not context relative + + appConfig3.addForwardConfig + (new ForwardConfig("contextNoslash", + "context/noslash", + false, // No redirect + true)); // Not context relative + } public void tearDown() { + appConfig3 = null; + appConfig2 = null; appConfig = null; config = null; context = null; 1.16 +203 -4 jakarta-struts/src/test/org/apache/struts/util/TestRequestUtils.java Index: TestRequestUtils.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/test/org/apache/struts/util/TestRequestUtils.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- TestRequestUtils.java 24 Dec 2002 18:49:52 -0000 1.15 +++ TestRequestUtils.java 8 Feb 2003 21:01:52 -0000 1.16 @@ -78,6 +78,7 @@ import org.apache.struts.action.DynaActionForm; import org.apache.struts.action.RequestProcessor; import org.apache.struts.config.ApplicationConfig; +import org.apache.struts.config.ForwardConfig; import org.apache.struts.mock.MockFormBean; import org.apache.struts.mock.MockPrincipal; import org.apache.struts.mock.TestMockBase; @@ -1202,6 +1203,204 @@ } + + + // ----------------------------------------------------------- forwardURL() + + + // Default module (default forwardPattern) + public void testForwardURL1() { + + request.setAttribute(Action.APPLICATION_KEY, appConfig); + request.setPathElements("/myapp", "/action.do", null, null); + ForwardConfig forward = null; + String result = null; + + // redirect=false, contextRelative=false + forward = appConfig.findForwardConfig("moduleForward"); + assertNotNull("moduleForward found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("moduleForward computed", result); + assertEquals("moduleForward value", + "/module/forward", + result); + + // redirect=true, contextRelative=false + forward = appConfig.findForwardConfig("moduleRedirect"); + assertNotNull("moduleRedirect found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("moduleRedirect computed", result); + assertEquals("moduleRedirect value", + "/module/redirect", + result); + + // redirect=false, contextRelative=true + forward = appConfig.findForwardConfig("contextForward"); + assertNotNull("contextForward found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("contextForward computed", result); + assertEquals("contextForward value", + "/context/forward", + result); + + // redirect=true, contextRelative=true + forward = appConfig.findForwardConfig("contextRedirect"); + assertNotNull("contextRedirect found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("contextRedirect computed", result); + assertEquals("contextRedirct value", + "/context/redirect", + result); + + // noslash, contextRelative=false + forward = appConfig.findForwardConfig("moduleNoslash"); + assertNotNull("moduleNoslash found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("moduleNoslash computed", result); + assertEquals("moduleNoslash value", + "/module/noslash", + result); + + // noslash, contextRelative=true + forward = appConfig.findForwardConfig("contextNoslash"); + assertNotNull("contextNoslash found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("contextNoslash computed", result); + assertEquals("contextNoslash value", + "/context/noslash", + result); + + } + + + // Second module (default forwardPattern) + public void testForwardURL2() { + + request.setAttribute(Action.APPLICATION_KEY, appConfig2); + request.setPathElements("/myapp", "/2/action.do", null, null); + ForwardConfig forward = null; + String result = null; + + // redirect=false, contextRelative=false + forward = appConfig2.findForwardConfig("moduleForward"); + assertNotNull("moduleForward found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("moduleForward computed", result); + assertEquals("moduleForward value", + "/2/module/forward", + result); + + // redirect=true, contextRelative=false + forward = appConfig2.findForwardConfig("moduleRedirect"); + assertNotNull("moduleRedirect found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("moduleRedirect computed", result); + assertEquals("moduleRedirect value", + "/2/module/redirect", + result); + + // redirect=false, contextRelative=true + forward = appConfig2.findForwardConfig("contextForward"); + assertNotNull("contextForward found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("contextForward computed", result); + assertEquals("contextForward value", + "/context/forward", + result); + + // redirect=true, contextRelative=true + forward = appConfig2.findForwardConfig("contextRedirect"); + assertNotNull("contextRedirect found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("contextRedirect computed", result); + assertEquals("contextRedirct value", + "/context/redirect", + result); + + // noslash, contextRelative=false + forward = appConfig2.findForwardConfig("moduleNoslash"); + assertNotNull("moduleNoslash found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("moduleNoslash computed", result); + assertEquals("moduleNoslash value", + "/2/module/noslash", + result); + + // noslash, contextRelative=true + forward = appConfig2.findForwardConfig("contextNoslash"); + assertNotNull("contextNoslash found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("contextNoslash computed", result); + assertEquals("contextNoslash value", + "/context/noslash", + result); + + } + + + // Third module (custom forwardPattern) + public void testForwardURL3() { + + request.setAttribute(Action.APPLICATION_KEY, appConfig3); + request.setPathElements("/myapp", "/3/action.do", null, null); + ForwardConfig forward = null; + String result = null; + + // redirect=false, contextRelative=false + forward = appConfig3.findForwardConfig("moduleForward"); + assertNotNull("moduleForward found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("moduleForward computed", result); + assertEquals("moduleForward value", + "/forwarding/3/module/forward", + result); + + // redirect=true, contextRelative=false + forward = appConfig3.findForwardConfig("moduleRedirect"); + assertNotNull("moduleRedirect found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("moduleRedirect computed", result); + assertEquals("moduleRedirect value", + "/forwarding/3/module/redirect", + result); + + // redirect=false, contextRelative=true + forward = appConfig3.findForwardConfig("contextForward"); + assertNotNull("contextForward found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("contextForward computed", result); + assertEquals("contextForward value", + "/context/forward", + result); + + // redirect=true, contextRelative=true + forward = appConfig3.findForwardConfig("contextRedirect"); + assertNotNull("contextRedirect found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("contextRedirect computed", result); + assertEquals("contextRedirct value", + "/context/redirect", + result); + + // noslash, contextRelative=false + forward = appConfig3.findForwardConfig("moduleNoslash"); + assertNotNull("moduleNoslash found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("moduleNoslash computed", result); + assertEquals("moduleNoslash value", + "/forwarding/3/module/noslash", + result); + + // noslash, contextRelative=true + forward = appConfig3.findForwardConfig("contextNoslash"); + assertNotNull("contextNoslash found", forward); + result = RequestUtils.forwardURL(request, forward); + assertNotNull("contextNoslash computed", result); + assertEquals("contextNoslash value", + "/context/noslash", + result); + + } // ----------------------------------------------------------- requestURL()
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]