Package org.apache.commons.jxpath.servlet

Source Code of org.apache.commons.jxpath.servlet.JXPathServletContextTest

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.commons.jxpath.servlet;

import java.util.Iterator;
import javax.servlet.ServletContext;

import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.Pointer;
import org.apache.commons.jxpath.Variables;

import com.mockrunner.mock.web.MockHttpServletRequest;
import com.mockrunner.mock.web.MockHttpSession;
import com.mockrunner.mock.web.MockPageContext;
import com.mockrunner.mock.web.MockServletConfig;
import com.mockrunner.mock.web.MockServletContext;
import junit.framework.TestCase;

/**
* @author Emmanuel Bourg
* @version $Revision: 652848 $, $Date: 2008-05-02 12:53:50 -0500 (Fri, 02 May 2008) $
*/
public class JXPathServletContextTest extends TestCase {

    private ServletContext getServletContext() {
        MockServletContext context = new MockServletContext();
        context.setAttribute("app", "OK");

        return context;
    }
   
    public void testServletContext() {
        ServletContext context = getServletContext();
        JXPathContext appContext = JXPathServletContexts.getApplicationContext(context);

        assertSame("Cached context not property returned", appContext, JXPathServletContexts.getApplicationContext(context));

        assertEquals("Application Context", "OK", appContext.getValue("app"));

        checkPointerIterator(appContext);

        // test setting a value in the context
        appContext.setValue("/foo", "bar");
        assertEquals("Context property", "bar", appContext.getValue("/foo"));

        // test the variables
        Variables variables = appContext.getVariables();
        assertNotNull("$application variable", variables.getVariable("application"));
        assertNull("$foo variable", variables.getVariable("$foo"));
    }

    public void testServletRequest() {
        ServletContext context = getServletContext();

        MockHttpSession session = new MockHttpSession();
        session.setupServletContext(context);
        session.setUpIsNew(true);
        Integer count = new Integer(10);
        session.setAttribute("count", count);

        MockHttpServletRequest request = new MockHttpServletRequest();
        request.setSession(session);
        request.setAttribute("attr", "OK");
        request.setupAddParameter("parm", "OK");
        request.setupAddParameter("multiparam", new String[] { "value1", "value2" });
        request.setupAddParameter("emptyparam", new String[0]);

        assertSame("Request session", session, request.getSession());

        JXPathContext reqContext = JXPathServletContexts.getRequestContext(request, context);

        assertSame("Cached context not property returned", reqContext, JXPathServletContexts.getRequestContext(request, context));

        JXPathContext sessionContext = JXPathServletContexts.getSessionContext(session, context);

        assertSame("Cached context not property returned", sessionContext, JXPathServletContexts.getSessionContext(session, context));

        assertEquals("Request Context Attribute", "OK", reqContext.getValue("attr"));

        assertEquals("Request Context Parameter", "OK", reqContext.getValue("parm"));
        assertTrue("Request Context Parameter (Array)", reqContext.getValue("multiparam").getClass().isArray());
        assertEquals("Request Context Parameter (Empty)", null, reqContext.getValue("emptyparam"));

        assertEquals("Session Context Parameter", count, sessionContext.getValue("count"));
        assertEquals("Application Context via Request Context", "OK", reqContext.getValue("app"));
        assertEquals("Session Context via Request Context", count, reqContext.getValue("count"));
        assertEquals("Application Context via Session Context", "OK", sessionContext.getValue("app"));

        checkPointerIterator(reqContext);
        checkPointerIterator(sessionContext);

        // test setting a value in the context
        reqContext.setValue("/foo1", "bar1");
        assertEquals("Context property", "bar1", reqContext.getValue("/foo1"));

        sessionContext.setValue("/foo2", "bar2");
        assertEquals("Context property", "bar2", sessionContext.getValue("/foo2"));
    }

    public void testServletRequestWithoutSession() {
        ServletContext context = getServletContext();

        MockHttpServletRequest request = new MockHttpServletRequest();

        JXPathContext reqContext = JXPathServletContexts.getRequestContext(request, context);

        assertEquals("Application Context via Request Context", "OK", reqContext.getValue("app"));
    }

    private void checkPointerIterator(JXPathContext context) {
        Iterator it = context.iteratePointers("/*");
        assertTrue("Empty context", it.hasNext());
        while (it.hasNext())
        {
            Pointer pointer = (Pointer) it.next();
            assertNotNull("null pointer", pointer);
            assertNotNull("null path", pointer.asPath());
        }
    }

    public void testPageContext() {
        MockServletContext servletContext = new MockServletContext();
        servletContext.setAttribute("app", "app");

        MockServletConfig servletConfig = new MockServletConfig();
        servletConfig.setServletContext(servletContext);

        MockHttpSession session = new MockHttpSession();
        session.setupServletContext(servletContext);
        session.setAttribute("session", "session");

        MockHttpServletRequest request = new MockHttpServletRequest();
        request.setAttribute("request", "request");
        request.setSession(session);

        MockPageContext pageContext = new MockPageContext();
        pageContext.setServletConfig(servletConfig);
        pageContext.setServletRequest(request);
        pageContext.setAttribute("page", "page");

        assertSame("Request session", session, request.getSession());


        JXPathContext context = JXPathServletContexts.getPageContext(pageContext);
        context.setLenient(true);
       
        checkPointerIterator(context);

        assertEquals("Page Scope", "page", context.getValue("page"));
        assertEquals("Request Scope", "request", context.getValue("request"));
        assertEquals("Session Scope", "session", context.getValue("session"));
        assertEquals("Application Scope", "app", context.getValue("app"));

        assertEquals("Explicit Page Scope", "page", context.getValue("$page/page"));
        assertEquals("Explicit Request Scope", "request", context.getValue("$request/request"));
        assertEquals("Explicit Session Scope", "session", context.getValue("$session/session"));
        assertEquals("Explicit Application Scope", "app", context.getValue("$application/app"));

        // iterate through the elements of page context only (two elements expected, 'page' and the context)
        Iterator it = context.iteratePointers("$page/*");
        assertTrue("element not found", it.hasNext());
        it.next();
        it.next();
        assertFalse("too many elements", it.hasNext());

        // test setting a value in the context
        context.setValue("/foo1", "bar1");
        assertEquals("Context property", "bar1", context.getValue("/foo1"));

        context.setValue("$page/foo2", "bar2");
        assertEquals("Context property", "bar2", context.getValue("$page/foo2"));
    }
}
TOP

Related Classes of org.apache.commons.jxpath.servlet.JXPathServletContextTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.