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));
 


Reply via email to