001 package com.mockrunner.mock.web; 002 003 import org.apache.struts.Globals; 004 005 /** 006 * Used to create all types of struts mock objects. Maintains 007 * the necessary dependencies between the mock objects. 008 * If you use the mock objects returned by this 009 * factory in your tests you can be sure, they are all 010 * up to date. 011 */ 012 public class ActionMockObjectFactory extends WebMockObjectFactory 013 { 014 private MockActionMapping mapping; 015 private MockActionServlet actionServlet; 016 private MockModuleConfig moduleConfig; 017 018 /** 019 * Creates a new set of mock objects. 020 */ 021 public ActionMockObjectFactory() 022 { 023 createMockObjects(); 024 } 025 026 /** 027 * Creates a set of mock objects based on another one. 028 * The created mock objects will have their own 029 * request and session objects, but they will share 030 * one <code>ServletContext</code>. 031 * @param factory the other factory 032 * @see com.mockrunner.base.BaseTestCase#createWebMockObjectFactory(WebMockObjectFactory) 033 */ 034 public ActionMockObjectFactory(WebMockObjectFactory factory) 035 { 036 super(factory); 037 createMockObjects(); 038 } 039 040 /** 041 * Creates a set of mock objects based on another one. 042 * You can specify, if the created mock objects should 043 * share the same session. They will share one 044 * <code>ServletContext</code> anyway. 045 * @param factory the other factory 046 * @param createNewSession <code>true</code> creates a new session, 047 * <code>false</code> uses the session from factory 048 * @see com.mockrunner.base.BaseTestCase#createWebMockObjectFactory(WebMockObjectFactory, boolean) 049 */ 050 public ActionMockObjectFactory(WebMockObjectFactory factory, boolean createNewSession) 051 { 052 super(factory, createNewSession); 053 createMockObjects(); 054 } 055 056 private void createMockObjects() 057 { 058 mapping = new MockActionMapping(); 059 moduleConfig = new MockModuleConfig("testmodule"); 060 actionServlet = new MockActionServlet(); 061 actionServlet.setServletConfig(getMockServletConfig()); 062 actionServlet.setServletContext(getMockServletContext()); 063 refresh(); 064 } 065 066 /** 067 * Refreshes the mock objects dependencies. May be called after setting request 068 * and response wrappers. 069 */ 070 public void refresh() 071 { 072 super.refresh(); 073 getWrappedRequest().setAttribute(Globals.MAPPING_KEY, mapping); 074 getWrappedRequest().setAttribute(Globals.MODULE_KEY, moduleConfig); 075 } 076 077 /** 078 * Returns the {@link com.mockrunner.mock.web.MockActionMapping}. 079 * @return the {@link com.mockrunner.mock.web.MockActionMapping} 080 */ 081 public MockActionMapping getMockActionMapping() 082 { 083 return mapping; 084 } 085 086 /** 087 * Returns the {@link com.mockrunner.mock.web.MockModuleConfig}. 088 * @return the {@link com.mockrunner.mock.web.MockModuleConfig} 089 */ 090 public MockModuleConfig getMockModuleConfig() 091 { 092 return moduleConfig; 093 } 094 095 /** 096 * Returns the {@link com.mockrunner.mock.web.MockModuleConfig}. 097 * @return the {@link com.mockrunner.mock.web.MockModuleConfig} 098 */ 099 public MockActionServlet getMockActionServlet() 100 { 101 return actionServlet; 102 } 103 }