// Path: src/main/java/com/raibledesigns/Constants.java
// public final class Constants {
// 
//     private Constants() {
//         // hide me
//     }
//     //~ Static fields/initializers =============================================
// 
//     /**
//      * Assets Version constant
//      */
//     public static final String ASSETS_VERSION = "assetsVersion";
//     /**
//      * The name of the ResourceBundle used in this application
//      */
//     public static final String BUNDLE_KEY = "ApplicationResources";
// 
//     /**
//      * File separator from System properties
//      */
//     public static final String FILE_SEP = System.getProperty("file.separator");
// 
//     /**
//      * User home from System properties
//      */
//     public static final String USER_HOME = System.getProperty("user.home") + FILE_SEP;
// 
//     /**
//      * The name of the configuration hashmap stored in application scope.
//      */
//     public static final String CONFIG = "appConfig";
// 
//     /**
//      * Session scope attribute that holds the locale set by the user. By setting this key
//      * to the same one that Struts uses, we get synchronization in Struts w/o having
//      * to do extra work or have two session-level variables.
//      */
//     public static final String PREFERRED_LOCALE_KEY = "org.apache.struts2.action.LOCALE";
// 
//     /**
//      * The request scope attribute under which an editable user form is stored
//      */
//     public static final String USER_KEY = "userForm";
// 
//     /**
//      * The request scope attribute that holds the user list
//      */
//     public static final String USER_LIST = "userList";
// 
//     /**
//      * The request scope attribute for indicating a newly-registered user
//      */
//     public static final String REGISTERED = "registered";
// 
//     /**
//      * The name of the Administrator role, as specified in web.xml
//      */
//     public static final String ADMIN_ROLE = "ROLE_ADMIN";
// 
//     /**
//      * The name of the User role, as specified in web.xml
//      */
//     public static final String USER_ROLE = "ROLE_USER";
// 
//     /**
//      * The name of the user's role list, a request-scoped attribute
//      * when adding/editing a user.
//      */
//     public static final String USER_ROLES = "userRoles";
// 
//     /**
//      * The name of the available roles list, a request-scoped attribute
//      * when adding/editing a user.
//      */
//     public static final String AVAILABLE_ROLES = "availableRoles";
// 
//     /**
//      * The name of the CSS Theme setting.
//      * @deprecated No longer used to set themes.
//      */
//     public static final String CSS_THEME = "csstheme";
// }


import com.raibledesigns.Constants;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockServletContext;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.WebApplicationContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import static org.junit.Assert.*;
package com.raibledesigns.webapp.listener;





/**
 * This class tests the StartupListener class to verify that variables are
 * placed into the servlet context.
 *
 * @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
 */
public class StartupListenerTest {
    private MockServletContext sc = null;
    private ServletContextListener listener = null;
    private ContextLoaderListener springListener = null;

    @Before
    public void setUp() throws Exception {
        sc = new MockServletContext("");

        // initialize Spring
        sc.addInitParameter(ContextLoader.CONFIG_LOCATION_PARAM,
            "classpath:/applicationContext-dao.xml, " +
                "classpath:/applicationContext-service.xml, " +
                "classpath:/applicationContext-resources.xml");

        springListener = new ContextLoaderListener();
        springListener.contextInitialized(new ServletContextEvent(sc));
        listener = new StartupListener();
    }

    @After
    public void tearDown() throws Exception {
        // cleanup: close sessionFactory and related resources (search index locks)
        springListener.closeWebApplicationContext(sc);
        springListener = null;
        listener = null;
        sc = null;
    }

    @Test
    public void testContextInitialized() {
        listener.contextInitialized(new ServletContextEvent(sc));

        assertTrue(sc.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) != null);
        assertTrue(sc.getAttribute(Constants.AVAILABLE_ROLES) != null);
// Path: src/main/java/com/raibledesigns/Constants.java
// public final class Constants {
// 
//     private Constants() {
//         // hide me
//     }
//     //~ Static fields/initializers =============================================
// 
//     /**
//      * Assets Version constant
//      */
//     public static final String ASSETS_VERSION = "assetsVersion";
//     /**
//      * The name of the ResourceBundle used in this application
//      */
//     public static final String BUNDLE_KEY = "ApplicationResources";
// 
//     /**
//      * File separator from System properties
//      */
//     public static final String FILE_SEP = System.getProperty("file.separator");
// 
//     /**
//      * User home from System properties
//      */
//     public static final String USER_HOME = System.getProperty("user.home") + FILE_SEP;
// 
//     /**
//      * The name of the configuration hashmap stored in application scope.
//      */
//     public static final String CONFIG = "appConfig";
// 
//     /**
//      * Session scope attribute that holds the locale set by the user. By setting this key
//      * to the same one that Struts uses, we get synchronization in Struts w/o having
//      * to do extra work or have two session-level variables.
//      */
//     public static final String PREFERRED_LOCALE_KEY = "org.apache.struts2.action.LOCALE";
// 
//     /**
//      * The request scope attribute under which an editable user form is stored
//      */
//     public static final String USER_KEY = "userForm";
// 
//     /**
//      * The request scope attribute that holds the user list
//      */
//     public static final String USER_LIST = "userList";
// 
//     /**
//      * The request scope attribute for indicating a newly-registered user
//      */
//     public static final String REGISTERED = "registered";
// 
//     /**
//      * The name of the Administrator role, as specified in web.xml
//      */
//     public static final String ADMIN_ROLE = "ROLE_ADMIN";
// 
//     /**
//      * The name of the User role, as specified in web.xml
//      */
//     public static final String USER_ROLE = "ROLE_USER";
// 
//     /**
//      * The name of the user's role list, a request-scoped attribute
//      * when adding/editing a user.
//      */
//     public static final String USER_ROLES = "userRoles";
// 
//     /**
//      * The name of the available roles list, a request-scoped attribute
//      * when adding/editing a user.
//      */
//     public static final String AVAILABLE_ROLES = "availableRoles";
// 
//     /**
//      * The name of the CSS Theme setting.
//      * @deprecated No longer used to set themes.
//      */
//     public static final String CSS_THEME = "csstheme";
// }


// Path: src/test/java/com/raibledesigns/webapp/listener/StartupListenerTest.java
import com.raibledesigns.Constants;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockServletContext;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.WebApplicationContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import static org.junit.Assert.*;

package com.raibledesigns.webapp.listener;





/**
 * This class tests the StartupListener class to verify that variables are
 * placed into the servlet context.
 *
 * @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
 */
public class StartupListenerTest {
    private MockServletContext sc = null;
    private ServletContextListener listener = null;
    private ContextLoaderListener springListener = null;

    @Before
    public void setUp() throws Exception {
        sc = new MockServletContext("");

        // initialize Spring
        sc.addInitParameter(ContextLoader.CONFIG_LOCATION_PARAM,
            "classpath:/applicationContext-dao.xml, " +
                "classpath:/applicationContext-service.xml, " +
                "classpath:/applicationContext-resources.xml");

        springListener = new ContextLoaderListener();
        springListener.contextInitialized(new ServletContextEvent(sc));
        listener = new StartupListener();
    }

    @After
    public void tearDown() throws Exception {
        // cleanup: close sessionFactory and related resources (search index locks)
        springListener.closeWebApplicationContext(sc);
        springListener = null;
        listener = null;
        sc = null;
    }

    @Test
    public void testContextInitialized() {
        listener.contextInitialized(new ServletContextEvent(sc));

        assertTrue(sc.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) != null);
        assertTrue(sc.getAttribute(Constants.AVAILABLE_ROLES) != null);
        assertNotNull(sc.getAttribute(Constants.ASSETS_VERSION));