1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.jxpath.servlet;
19
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertFalse;
22 import static org.junit.jupiter.api.Assertions.assertNotNull;
23 import static org.junit.jupiter.api.Assertions.assertNull;
24 import static org.junit.jupiter.api.Assertions.assertSame;
25 import static org.junit.jupiter.api.Assertions.assertTrue;
26
27 import java.util.Iterator;
28
29 import javax.servlet.ServletContext;
30
31 import org.apache.commons.jxpath.JXPathContext;
32 import org.apache.commons.jxpath.Pointer;
33 import org.apache.commons.jxpath.Variables;
34 import org.junit.jupiter.api.Test;
35
36 import com.mockrunner.mock.web.MockHttpServletRequest;
37 import com.mockrunner.mock.web.MockHttpSession;
38 import com.mockrunner.mock.web.MockPageContext;
39 import com.mockrunner.mock.web.MockServletConfig;
40 import com.mockrunner.mock.web.MockServletContext;
41
42
43
44 public class JXPathServletContextTest {
45
46 private void checkPointerIterator(final JXPathContext context) {
47 final Iterator<Pointer> it = context.iteratePointers("/*");
48 assertTrue(it.hasNext(), "Empty context");
49 while (it.hasNext()) {
50 final Pointer pointer = it.next();
51 assertNotNull(pointer, "null pointer");
52 assertNotNull(pointer.asPath(), "null path");
53 }
54 }
55
56 private ServletContext getServletContext() {
57 final MockServletContext context = new MockServletContext();
58 context.setAttribute("app", "OK");
59 return context;
60 }
61
62 @Test
63 public void testPageContext() {
64 final MockServletContext servletContext = new MockServletContext();
65 servletContext.setAttribute("app", "app");
66 final MockServletConfig servletConfig = new MockServletConfig();
67 servletConfig.setServletContext(servletContext);
68 final MockHttpSession session = new MockHttpSession();
69 session.setupServletContext(servletContext);
70 session.setAttribute("session", "session");
71 final MockHttpServletRequest request = new MockHttpServletRequest();
72 request.setAttribute("request", "request");
73 request.setSession(session);
74 final MockPageContext pageContext = new MockPageContext();
75 pageContext.setServletConfig(servletConfig);
76 pageContext.setServletRequest(request);
77 pageContext.setAttribute("page", "page");
78 assertSame(session, request.getSession(), "Request session");
79 final JXPathContext context = JXPathServletContexts.getPageContext(pageContext);
80 context.setLenient(true);
81 checkPointerIterator(context);
82 assertEquals("page", context.getValue("page"), "Page Scope");
83 assertEquals("request", context.getValue("request"), "Request Scope");
84 assertEquals("session", context.getValue("session"), "Session Scope");
85 assertEquals("app", context.getValue("app"), "Application Scope");
86 assertEquals("page", context.getValue("$page/page"), "Explicit Page Scope");
87 assertEquals("request", context.getValue("$request/request"), "Explicit Request Scope");
88 assertEquals("session", context.getValue("$session/session"), "Explicit Session Scope");
89 assertEquals("app", context.getValue("$application/app"), "Explicit Application Scope");
90
91 final Iterator<Pointer> it = context.iteratePointers("$page/*");
92 assertTrue(it.hasNext(), "element not found");
93 it.next();
94 it.next();
95 assertFalse(it.hasNext(), "too many elements");
96
97 context.setValue("/foo1", "bar1");
98 assertEquals("bar1", context.getValue("/foo1"), "Context property");
99 context.setValue("$page/foo2", "bar2");
100 assertEquals("bar2", context.getValue("$page/foo2"), "Context property");
101 }
102
103 @Test
104 public void testServletContext() {
105 final ServletContext context = getServletContext();
106 final JXPathContext appContext = JXPathServletContexts.getApplicationContext(context);
107 assertSame(appContext, JXPathServletContexts.getApplicationContext(context), "Cached context not property returned");
108 assertEquals("OK", appContext.getValue("app"), "Application Context");
109 checkPointerIterator(appContext);
110
111 appContext.setValue("/foo", "bar");
112 assertEquals("bar", appContext.getValue("/foo"), "Context property");
113
114 final Variables variables = appContext.getVariables();
115 assertNotNull(variables.getVariable("application"), "$application variable");
116 assertNull(variables.getVariable("$foo"), "$foo variable");
117 }
118
119 @Test
120 public void testServletRequest() {
121 final ServletContext context = getServletContext();
122 final MockHttpSession session = new MockHttpSession();
123 session.setupServletContext(context);
124 session.setUpIsNew(true);
125 final Integer count = Integer.valueOf(10);
126 session.setAttribute("count", count);
127 final MockHttpServletRequest request = new MockHttpServletRequest();
128 request.setSession(session);
129 request.setAttribute("attr", "OK");
130 request.setupAddParameter("parm", "OK");
131 request.setupAddParameter("multiparam", new String[] { "value1", "value2" });
132 request.setupAddParameter("emptyparam", new String[0]);
133 assertSame(session, request.getSession(), "Request session");
134 final JXPathContext reqContext = JXPathServletContexts.getRequestContext(request, context);
135 assertSame(reqContext, JXPathServletContexts.getRequestContext(request, context), "Cached context not property returned");
136 final JXPathContext sessionContext = JXPathServletContexts.getSessionContext(session, context);
137 assertSame(sessionContext, JXPathServletContexts.getSessionContext(session, context), "Cached context not property returned");
138 assertEquals("OK", reqContext.getValue("attr"), "Request Context Attribute");
139 assertEquals("OK", reqContext.getValue("parm"), "Request Context Parameter");
140 assertTrue(reqContext.getValue("multiparam").getClass().isArray(), "Request Context Parameter (Array)");
141 assertNull(reqContext.getValue("emptyparam"), "Request Context Parameter (Empty)");
142 assertEquals(count, sessionContext.getValue("count"), "Session Context Parameter");
143 assertEquals("OK", reqContext.getValue("app"), "Application Context via Request Context");
144 assertEquals(count, reqContext.getValue("count"), "Session Context via Request Context");
145 assertEquals("OK", sessionContext.getValue("app"), "Application Context via Session Context");
146 checkPointerIterator(reqContext);
147 checkPointerIterator(sessionContext);
148
149 reqContext.setValue("/foo1", "bar1");
150 assertEquals("bar1", reqContext.getValue("/foo1"), "Context property");
151 sessionContext.setValue("/foo2", "bar2");
152 assertEquals("bar2", sessionContext.getValue("/foo2"), "Context property");
153 }
154
155 @Test
156 public void testServletRequestWithoutSession() {
157 final ServletContext context = getServletContext();
158 final MockHttpServletRequest request = new MockHttpServletRequest();
159 final JXPathContext reqContext = JXPathServletContexts.getRequestContext(request, context);
160 assertEquals("OK", reqContext.getValue("app"), "Application Context via Request Context");
161 }
162 }