Author: cbrisson
Date: Thu Apr 18 10:16:55 2019
New Revision: 1857730
URL: http://svn.apache.org/viewvc?rev=1857730&view=rev
Log:
[tools/model] Minor tweaks and code cleaning in view tools
Added:
velocity/tools/branches/model/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/BaseWebappMockTest.java
Modified:
velocity/tools/branches/model/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ServletUtils.java
velocity/tools/branches/model/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ViewToolManager.java
velocity/tools/branches/model/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/VelocityViewTest.java
Modified:
velocity/tools/branches/model/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ServletUtils.java
URL:
http://svn.apache.org/viewvc/velocity/tools/branches/model/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ServletUtils.java?rev=1857730&r1=1857729&r2=1857730&view=diff
==============================================================================
---
velocity/tools/branches/model/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ServletUtils.java
(original)
+++
velocity/tools/branches/model/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ServletUtils.java
Thu Apr 18 10:16:55 2019
@@ -477,6 +477,45 @@ public class ServletUtils
return lock;
}
+ /**
+ * If end is null, this will return start and vice versa.
+ * If neither is null, this will append the end to the start,
+ * making sure that there is only one '/' character between
+ * the two values.
+ * @param before start path
+ * @param after end path
+ * @return combined path
+ */
+ public static String combinePath(String before, String after)
+ {
+ // code taken from generics LinkTool.
+ // TODO - it should be factorize somewhere in generics tools.
+ if (after == null)
+ {
+ return before;
+ }
+ if (before == null)
+ {
+ return after;
+ }
+
+ // make sure we don't get // or nothing between start and end
+ boolean startEnds = before.endsWith("/");
+ boolean endStarts = after.startsWith("/");
+ if (startEnds ^ endStarts) //one
+ {
+ return before + after;
+ }
+ else if (startEnds & endStarts) //both
+ {
+ return before + after.substring(1, after.length());
+ }
+ else //neither
+ {
+ return before + '/' + after;
+ }
+ }
+
private static class SessionMutex implements java.io.Serializable
{
}
Modified:
velocity/tools/branches/model/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ViewToolManager.java
URL:
http://svn.apache.org/viewvc/velocity/tools/branches/model/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ViewToolManager.java?rev=1857730&r1=1857729&r2=1857730&view=diff
==============================================================================
---
velocity/tools/branches/model/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ViewToolManager.java
(original)
+++
velocity/tools/branches/model/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ViewToolManager.java
Thu Apr 18 10:16:55 2019
@@ -203,10 +203,13 @@ public class ViewToolManager extends Too
/**
* Publish {@link Scope#APPLICATION} Toolbox.
*/
- protected void publishApplicationTools()
+ public synchronized void publishApplicationTools()
{
- servletContext.setAttribute(this.toolboxKey, getApplicationToolbox());
- appToolsPublished = true;
+ if (!appToolsPublished)
+ {
+ servletContext.setAttribute(this.toolboxKey,
getApplicationToolbox());
+ appToolsPublished = true;
+ }
}
/**
@@ -242,9 +245,11 @@ public class ViewToolManager extends Too
protected void addToolboxes(ToolContext context)
{
super.addToolboxes(context);
- if (hasSessionTools())
+ if (hasSessionTools() && context != null && context instanceof
ViewToolContext)
{
- context.addToolbox(getSessionToolbox());
+ ViewToolContext viewContext = (ViewToolContext)context;
+ HttpSession session = viewContext.getSession();
+ context.addToolbox(getSessionToolbox(session));
}
}
@@ -291,7 +296,7 @@ public class ViewToolManager extends Too
}
}
- protected boolean hasSessionTools()
+ public boolean hasSessionTools()
{
return hasTools(Scope.SESSION);
}
@@ -301,6 +306,11 @@ public class ViewToolManager extends Too
return createToolbox(Scope.SESSION);
}
+ public Toolbox getSessionToolbox(HttpSession session)
+ {
+ return (Toolbox)session.getAttribute(this.toolboxKey);
+ }
+
/**
* Places the {@link Scope#REQUEST} {@link Toolbox} (if any)
* into the {@link ServletRequest} attributes using
Added:
velocity/tools/branches/model/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/BaseWebappMockTest.java
URL:
http://svn.apache.org/viewvc/velocity/tools/branches/model/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/BaseWebappMockTest.java?rev=1857730&view=auto
==============================================================================
---
velocity/tools/branches/model/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/BaseWebappMockTest.java
(added)
+++
velocity/tools/branches/model/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/BaseWebappMockTest.java
Thu Apr 18 10:16:55 2019
@@ -0,0 +1,100 @@
+package org.apache.velocity.tools.view;
+
+import org.easymock.EasyMockRule;
+import org.easymock.IAnswer;
+import org.easymock.Mock;
+import org.junit.Rule;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import static org.easymock.EasyMock.replay;
+
+public class BaseWebappMockTest
+{
+ protected static Logger logger = LoggerFactory.getLogger("webapp-mock");
+ /**
+ * Unique point of passage for non-void calls
+ * @param value value to return
+ * @param <T> type of returned value
+ * @return value
+ */
+ protected static <T> IAnswer<T> eval(final T value)
+ {
+ return new IAnswer<T>()
+ {
+ public T answer() throws Throwable
+ {
+ String caller = null;
+ String mocked = null;
+ String test = null;
+ StackTraceElement[] stackTrace =
Thread.currentThread().getStackTrace();
+ for (StackTraceElement line : stackTrace)
+ {
+ String at = line.toString();
+ if (mocked == null)
+ {
+ if (at.startsWith("com.sun.proxy"))
+ {
+ int dot = at.lastIndexOf('.');
+ dot = at.lastIndexOf('.', dot - 1);
+ int par = at.indexOf('(', dot + 1);
+ mocked = at.substring(dot + 1, par) + "()";
+ }
+ }
+ if (at.startsWith("org.apache"))
+ {
+ if (at.contains("Test"))
+ {
+ if (test == null && !at.contains(".answer(") &&
!(at.contains("$")))
+ {
+ test = at.replaceAll("\\b[a-z]+\\.|\\(.*\\)",
"");
+ }
+ }
+ else if (caller == null)
+ {
+ caller = at;
+ }
+ }
+ }
+ // good place for a breakpoint
+ logger.trace("XXX [{}] mocked {} called from {}, returning
{}", test, mocked, caller, value);
+ return value;
+ }
+ };
+ }
+
+ @Rule
+ public EasyMockRule rule = new EasyMockRule(this);
+
+ @Mock
+ protected FilterConfig filterConfig;
+
+ @Mock
+ protected ServletContext servletContext;
+
+ @Mock
+ protected HttpServletRequest request;
+
+ @Mock
+ protected HttpServletResponse response;
+
+ @Mock
+ protected FilterChain filterChain;
+
+ @Mock
+ protected HttpSession httpSession;
+
+ protected void replayAll()
+ {
+ replay(filterConfig, servletContext, request, response, filterChain,
httpSession);
+ }
+
+
+}
Modified:
velocity/tools/branches/model/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/VelocityViewTest.java
URL:
http://svn.apache.org/viewvc/velocity/tools/branches/model/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/VelocityViewTest.java?rev=1857730&r1=1857729&r2=1857730&view=diff
==============================================================================
---
velocity/tools/branches/model/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/VelocityViewTest.java
(original)
+++
velocity/tools/branches/model/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/VelocityViewTest.java
Thu Apr 18 10:16:55 2019
@@ -45,47 +45,12 @@ import org.slf4j.LoggerFactory;
* Tests {@link VelocityView}.
*
*/
-public class VelocityViewTest
+public class VelocityViewTest extends BaseWebappMockTest
{
static Logger logger = LoggerFactory.getLogger(VelocityViewTest.class);
/**
- * Unique point of passage for non-void calls
- * @param value value to return
- * @param <T> type of returned value
- * @return value
- */
- static <T> IAnswer<T> eval(final T value)
- {
- return new IAnswer<T>()
- {
- public T answer() throws Throwable
- {
- String caller = null;
- String callee = null;
- StackTraceElement stackTrace[] =
Thread.currentThread().getStackTrace();
- String previous = null;
- for (StackTraceElement line : stackTrace)
- {
- String at = line.toString();
- if (at.contains("org.apache") &&
!at.contains("VelocityViewTest"))
- {
- caller = at;
- break;
- }
- previous = at;
- }
- if (caller != null) callee = previous;
- else caller = callee = "???";
- // good place for a breakpoint
- logger.trace("[view] method {} called, expecting {}, at {}",
value, caller);
- return value;
- }
- };
- }
-
- /**
* Test method for {@link
org.apache.velocity.tools.view.VelocityView#getTemplate(javax.servlet.http.HttpServletRequest)}.
* Tests VELTOOLS-119
* @throws IOException If something goes wrong.
@@ -103,18 +68,18 @@ public class VelocityViewTest
Context context = createMock(Context.class);
expect(config.getServletContext()).andAnswer(eval(servletContext));
-
expect(config.findInitParameter(VelocityView.USER_OVERWRITE_KEY)).andAnswer(eval((String)null));
+
expect(config.findInitParameter(VelocityView.USER_OVERWRITE_KEY)).andAnswer(eval(null));
expect(config.findInitParameter(VelocityView.LOAD_DEFAULTS_KEY)).andAnswer(eval("false"));
-
expect(servletContext.getInitParameter(VelocityView.PROPERTIES_KEY)).andAnswer(eval((String)null));
+
expect(servletContext.getInitParameter(VelocityView.PROPERTIES_KEY)).andAnswer(eval(null));
expect(servletContext.getResourceAsStream(VelocityView.USER_PROPERTIES_PATH))
.andAnswer(eval(getClass().getResourceAsStream("/WEB-INF/velocity.properties")));
String root = new
File(getClass().getResource("/").getFile()).getAbsolutePath();
-
expect(config.getInitParameter(VelocityView.PROPERTIES_KEY)).andAnswer(eval((String)null));
-
expect(config.findInitParameter(VelocityView.CLEAN_CONFIGURATION_KEY)).andAnswer(eval((String)null));
-
expect(servletContext.getInitParameter(VelocityView.TOOLS_KEY)).andAnswer(eval((String)null));
-
expect(config.getInitParameter(VelocityView.TOOLS_KEY)).andAnswer(eval((String)null));
+
expect(config.getInitParameter(VelocityView.PROPERTIES_KEY)).andAnswer(eval(null));
+
expect(config.findInitParameter(VelocityView.CLEAN_CONFIGURATION_KEY)).andAnswer(eval(null));
+
expect(servletContext.getInitParameter(VelocityView.TOOLS_KEY)).andAnswer(eval(null));
+
expect(config.getInitParameter(VelocityView.TOOLS_KEY)).andAnswer(eval(null));
expect(servletContext.getAttribute(ServletUtils.CONFIGURATION_KEY)).andAnswer(eval((String)null));
-
expect(servletContext.getResource(VelocityView.USER_TOOLS_PATH)).andAnswer(eval((URL)null));
+
expect(servletContext.getResource(VelocityView.USER_TOOLS_PATH)).andAnswer(eval(null));
expect(request.getAttribute("javax.servlet.include.servlet_path")).andAnswer(eval("/charset-test.vm"));
expect(request.getAttribute("javax.servlet.include.path_info")).andAnswer(eval((String)null));