/** * Copyright SocialSite (C) 2009 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.socialsite.util; import javax.servlet.ServletContext; import org.apache.wicket.protocol.http.MockServletContext; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.util.tester.WicketTester; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.XmlWebApplicationContext; import com.socialsite.SocialSiteApplication; /** * Spring enabled WicketTester allows a user to test applications that have been * wired using the SpringComponentInjector. This subclass of the WicketTester * sets up the spring web context, which is normally set up by the * org.springframework.web.context.ContextLoaderListener class. */ public class SpringWicketTester extends WicketTester { /** * The Spring web application context */ private XmlWebApplicationContext spring; /** * constructor */ public SpringWicketTester() { this(new SocialSiteApplication(), null, "classpath:applicationContext.xml"); } /** * Instantiate the WicketTester with your application and a set of URLs to * find the Spring XML configuration files. Ex: * * <pre> * new SpringWicketTester(new MyApp(), "myapp", * * "classpath:application.xml", * * "classpath:application-test.xml"); * </pre> * * @param app * Your Wicket web application * @param context * The base url for the application * @param springConfigURLs * The set of URLs for the configuration files. */ public SpringWicketTester(final WebApplication app, final String context, final String... springConfigURLs) { super(app, context); reconfigure(springConfigURLs); } /** * Lazy loader for the creating the SpringContext. Required to work around * the initialization in the constructor. * * @return the single web application context for this tester */ private XmlWebApplicationContext getSpringContext() { if (null == spring) { spring = new XmlWebApplicationContext(); } return spring; } /** * Create the new ServletContext that will be used with this test session. * This method configures the spring web context to be included in your * Servlet context. It's the magic that makes everything happy. * * @param path * the root context path for URLs * * @return a configured ServletContext */ @Override public ServletContext newServletContext(final String path) { final ServletContext context = new MockServletContext(getApplication(), path); getSpringContext().setServletContext(context); context.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, spring); return context; } /** * Reconfigure the tester with new spring configuration files. This method * also calls the Spring <code>refresh</code> method to force the files to * load. * * @param springConfigURLs * The set of URLs for the configuration files. */ public void reconfigure(final String... springConfigURLs) { getSpringContext().setConfigLocations(springConfigURLs); getSpringContext().refresh(); } }