Author: cbrisson
Date: Tue Jan  3 10:12:52 2017
New Revision: 1777104

URL: http://svn.apache.org/viewvc?rev=1777104&view=rev
Log:
[tools] more testcases for JsonTool and XmlTool, plus some bugfixes

Added:
    
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/JsonToolTests.java
    
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/XmlToolTests.java
    velocity/tools/trunk/velocity-tools-view/src/test/resources/inclasspath.json
    velocity/tools/trunk/velocity-tools-view/src/test/resources/inclasspath.xml
    velocity/tools/trunk/velocity-tools-view/src/test/resources/webapp_mocking/
    
velocity/tools/trunk/velocity-tools-view/src/test/resources/webapp_mocking/inwebapp.json
    
velocity/tools/trunk/velocity-tools-view/src/test/resources/webapp_mocking/inwebapp.xml
Modified:
    
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/ImportSupport.java
    
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/JsonTool.java
    
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/XmlTool.java
    velocity/tools/trunk/velocity-tools-view/pom.xml
    
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/RequestAdaptor.java
    
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/ResponseAdaptor.java
    
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/ServletContextAdaptor.java

Modified: 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/ImportSupport.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/ImportSupport.java?rev=1777104&r1=1777103&r2=1777104&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/ImportSupport.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/ImportSupport.java
 Tue Jan  3 10:12:52 2017
@@ -91,6 +91,12 @@ public class ImportSupport extends SafeC
         super.configure(values);
     }
 
+    @Override
+    public void setSafeMode(boolean safe)
+    {
+        super.setSafeMode(safe);
+    }
+
     /**
      *
      * @param url the URL resource to return as string
@@ -380,7 +386,7 @@ public class ImportSupport extends SafeC
      */
     public static boolean isRemoteURL(String url)
     {
-        return getProtocol(url) == null;
+        return getProtocol(url) != null;
     }
 
     /**

Modified: 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/JsonTool.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/JsonTool.java?rev=1777104&r1=1777103&r2=1777104&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/JsonTool.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/JsonTool.java
 Tue Jan  3 10:12:52 2017
@@ -122,7 +122,11 @@ public class JsonTool extends ImportSupp
             String url = values.getString(ImportSupport.URL_KEY);
             if (url != null)
             {
+                /* temporary disable safe mode */
+                boolean safeMode = importSupport.isSafeMode();
+                importSupport.setSafeMode(false);
                 fetch(url);
+                importSupport.setSafeMode(safeMode);
             }
         }
     }
@@ -209,7 +213,7 @@ public class JsonTool extends ImportSupp
      * Parses the given JSON string and uses the resulting {@link Document}
      * as the root {@link Node}.
      */
-    public void parse(String xml) throws Exception
+    public void parse(String xml)
     {
         if (xml != null)
         {

Modified: 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/XmlTool.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/XmlTool.java?rev=1777104&r1=1777103&r2=1777104&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/XmlTool.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/XmlTool.java
 Tue Jan  3 10:12:52 2017
@@ -120,7 +120,11 @@ public class XmlTool extends SafeConfig
             String url = values.getString(ImportSupport.URL_KEY);
             if (url != null)
             {
+                /* temporary disable safe mode */
+                boolean safeMode = importSupport.isSafeMode();
+                importSupport.setSafeMode(false);
                 fetch(url);
+                importSupport.setSafeMode(safeMode);
             }
         }
     }

Modified: velocity/tools/trunk/velocity-tools-view/pom.xml
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/pom.xml?rev=1777104&r1=1777103&r2=1777104&view=diff
==============================================================================
--- velocity/tools/trunk/velocity-tools-view/pom.xml (original)
+++ velocity/tools/trunk/velocity-tools-view/pom.xml Tue Jan  3 10:12:52 2017
@@ -82,5 +82,11 @@
             <version>3.4</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+            <version>${slf4j.version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>

Added: 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/JsonToolTests.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/JsonToolTests.java?rev=1777104&view=auto
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/JsonToolTests.java
 (added)
+++ 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/JsonToolTests.java
 Tue Jan  3 10:12:52 2017
@@ -0,0 +1,247 @@
+package org.apache.velocity.tools.test.blackbox;
+
+/*
+ * 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.
+ */
+
+import org.apache.velocity.tools.view.JsonTool;
+import static org.junit.Assert.*;
+
+import org.apache.velocity.tools.view.ViewContext;
+import org.junit.Test;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.lang.reflect.Proxy;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>CookieTool tests.</p>
+ *
+ * @author Claude Brisson
+ * @version $Id$
+ */
+
+public class JsonToolTests
+{
+    private JsonTool newJsonTool()
+    {
+        return newJsonTool(new HashMap(), null, null);
+    }
+
+    private JsonTool newJsonTool(Map config)
+    {
+        return newJsonTool(config, null, null);
+    }
+
+    private JsonTool newJsonTool(Map config, Object requestProxy, Object 
responseProxy)
+    {
+        if (config == null)
+        {
+            config = new HashMap();
+        }
+
+        if (requestProxy == null)
+        {
+            requestProxy =
+                Proxy.newProxyInstance(this.getClass().getClassLoader(),
+                    new Class[]{HttpServletRequest.class},
+                    new RequestAdaptor());
+        }
+
+        HttpServletRequest request = (HttpServletRequest)requestProxy;
+
+        if (responseProxy == null)
+        {
+            responseProxy =
+                Proxy.newProxyInstance(this.getClass().getClassLoader(),
+                    new Class[]{HttpServletResponse.class},
+                    new ResponseAdaptor());
+        }
+
+        HttpServletResponse response = (HttpServletResponse)responseProxy;
+
+        Object contextProxy
+            = Proxy.newProxyInstance(this.getClass().getClassLoader(),
+            new Class[]{ServletContext.class},
+            new ServletContextAdaptor()
+            {
+                @Override
+                protected URL getResource(String resource)
+                {
+                    // redirect towards classpath resources
+                    if (!resource.startsWith("/"))
+                    {
+                        resource = "/" + resource;
+                    }
+                    resource = "webapp_mocking" + resource;
+                    return getClass().getClassLoader().getResource(resource);
+                }
+
+                @Override
+                protected InputStream getResourceAsStream(String resource)
+                {
+                    // redirect towards classpath resources
+                    if (!resource.startsWith("/"))
+                    {
+                        resource = "/" + resource;
+                    }
+                    resource = "webapp_mocking" + resource;
+                    return 
getClass().getClassLoader().getResourceAsStream(resource);
+                }
+
+                @Override
+                protected RequestDispatcher getRequestDispatcher(String url)
+                {
+                    return new RequestDispatcher()
+                    {
+                        @Override
+                        public void forward(ServletRequest request, 
ServletResponse response) throws ServletException, IOException
+                        {
+                            throw new ServletException("not implemented");
+                        }
+
+                        @Override
+                        public void include(ServletRequest request, 
ServletResponse response) throws ServletException, IOException
+                        {
+                            response.setContentType("application/json");
+                            response.getWriter().write("{ \"hey\" : \"bro\" 
}");
+                        }
+                    };
+                }
+
+            });
+
+        ServletContext servletContext = (ServletContext)contextProxy;
+
+        JsonTool json = new JsonTool();
+        config.put(ViewContext.REQUEST, request);
+        config.put(ViewContext.RESPONSE, response);
+        config.put(ViewContext.SERVLET_CONTEXT_KEY, servletContext);
+        json.configure(config);
+        return json;
+    }
+
+    public @Test void testConfigReadWebappResource()
+    {
+        Map config = new HashMap();
+        config.put("resource", "/inwebapp.json");
+        JsonTool json = newJsonTool(config);
+        assertEquals(json.get("hey"), "there");
+    }
+
+    public @Test void testConfigReadClasspathResource()
+    {
+        Map config = new HashMap();
+        config.put("resource", "/inclasspath.json");
+        JsonTool json = newJsonTool(config);
+        assertEquals(json.get("hey"), "brother");
+    }
+
+    public @Test void testConfigFetchLocalSource()
+    {
+        Map config = new HashMap();
+        config.put("url", "/local-url.json");
+        JsonTool json = newJsonTool(config);
+        assertEquals(json.get("hey"), "bro");
+    }
+
+    public @Test void testConfigFetchRemoteSource()
+    {
+        Map config = new HashMap();
+        config.put("url", 
"http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/test/resources/foo.json?revision=1776916&view=co&pathrev=1776916";);
+        JsonTool json = newJsonTool(config);
+        assertEquals(json.get("foo"), "bar");
+    }
+
+    public @Test void testRequestContent()
+    {
+        final String content = "{ \"hey\" : \"sister\" }";
+        Object requestProxy =
+            Proxy.newProxyInstance(this.getClass().getClassLoader(),
+                new Class[]{HttpServletRequest.class},
+                new RequestAdaptor()
+                {
+                    @Override
+                    protected int getContentLength()
+                    {
+                        return content.length();
+                    }
+
+                    @Override
+                    protected String getContentType()
+                    {
+                        return "application/json";
+                    }
+
+                    @Override
+                    protected BufferedReader getReader()
+                    {
+                        return new BufferedReader(new StringReader(content));
+                    }
+                });
+        JsonTool json = newJsonTool(null, requestProxy, null);
+        assertEquals(json.get("hey"), "sister");
+    }
+
+    public @Test void testParseString()
+    {
+        JsonTool json = newJsonTool();
+        json.parse("{\"hey\": \"you\"}");
+        assertEquals(json.get("hey"), "you");
+    }
+
+    public @Test void testReadWebappResource()
+    {
+        JsonTool json = newJsonTool();
+        json.read("/inwebapp.json");
+        assertEquals(json.get("hey"), "there");
+    }
+
+    public @Test void testReadClasspathResource()
+    {
+        JsonTool json = newJsonTool();
+        json.read("/inclasspath.json");
+        assertEquals(json.get("hey"), "brother");
+    }
+
+    public @Test void testFetchLocalSource()
+    {
+        JsonTool json = newJsonTool();
+        json.fetch("/local-url.json");
+        assertEquals(json.get("hey"), "bro");
+    }
+
+    public @Test void testFetchRemoteSource()
+    {
+        JsonTool json = newJsonTool();
+        
json.fetch("http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/test/resources/foo.json?revision=1776916&view=co&pathrev=1776916";);
+        assertNull(json.get("foo")); // CB TODO - also check there is a 
warning about safe mode in the logs
+    }
+}

Modified: 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/RequestAdaptor.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/RequestAdaptor.java?rev=1777104&r1=1777103&r2=1777104&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/RequestAdaptor.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/RequestAdaptor.java
 Tue Jan  3 10:12:52 2017
@@ -21,6 +21,7 @@ package org.apache.velocity.tools.test.b
 
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
+import java.io.BufferedReader;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.util.Collections;
@@ -51,6 +52,11 @@ public class RequestAdaptor implements I
     private String _contextPath;
     private String _pathInfo;
 
+    public RequestAdaptor()
+    {
+        this(null, null, null);
+    }
+
     public RequestAdaptor(Map cookies)
     {
         this(null, null, cookies);
@@ -214,10 +220,41 @@ public class RequestAdaptor implements I
             }
             return jar;
         }
+        else if ("getContentLength".equals(methodName))
+        {
+            return getContentLength();
+        }
+        else if ("getContentType".equals(methodName))
+        {
+            return getContentType();
+        }
+        else if ("getReader".equals(methodName))
+        {
+            return getReader();
+        }
+        else if ("toString".equals(methodName))
+        {
+            return toString();
+        }
         else
         {
             throw new IllegalStateException("Unexpected method call: "
                                             + method);
         }
     }
+
+    protected int getContentLength()
+    {
+        return -1;
+    }
+
+    protected String getContentType()
+    {
+        return null;
+    }
+
+    protected BufferedReader getReader()
+    {
+        return null;
+    }
 }

Modified: 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/ResponseAdaptor.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/ResponseAdaptor.java?rev=1777104&r1=1777103&r2=1777104&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/ResponseAdaptor.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/ResponseAdaptor.java
 Tue Jan  3 10:12:52 2017
@@ -37,6 +37,11 @@ public class ResponseAdaptor implements
     // the params now also serve as a cookie jar for CookieToolTests
     private Map _params;
 
+    public ResponseAdaptor()
+    {
+        this(null);
+    }
+
     public ResponseAdaptor(Map params)
     {
         _params = params;
@@ -93,6 +98,10 @@ public class ResponseAdaptor implements
         {
             return "UTF-8";
         }
+        else if ("toString".equals(methodName))
+        {
+            return toString();
+        }
         else
         {
             throw new IllegalStateException("Unexpected method call: "

Modified: 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/ServletContextAdaptor.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/ServletContextAdaptor.java?rev=1777104&r1=1777103&r2=1777104&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/ServletContextAdaptor.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/ServletContextAdaptor.java
 Tue Jan  3 10:12:52 2017
@@ -19,9 +19,12 @@ package org.apache.velocity.tools.test.b
  * under the License.
  */
 
+import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletContext;
+import java.io.InputStream;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
+import java.net.URL;
 
 /**
  * <p>Helper class for LinkToolTests class</p>
@@ -33,6 +36,11 @@ public class ServletContextAdaptor imple
 {
     private String _contextPath;
 
+    public ServletContextAdaptor()
+    {
+        this(null);
+    }
+
     public ServletContextAdaptor(String contextPath)
     {
         _contextPath = contextPath;
@@ -68,6 +76,22 @@ public class ServletContextAdaptor imple
         {
             return _contextPath;
         }
+        else if ("getResource".equals(methodName))
+        {
+            return getResource((String)args[0]);
+        }
+        else if ("getResourceAsStream".equals(methodName))
+        {
+            return getResourceAsStream((String)args[0]);
+        }
+        else if ("getRequestDispatcher".equals(methodName))
+        {
+            return getRequestDispatcher((String)args[0]);
+        }
+        else if ("toString".equals(methodName))
+        {
+            return toString();
+        }
         else
         {
             throw new IllegalStateException("Unexpected method call: "
@@ -75,4 +99,18 @@ public class ServletContextAdaptor imple
         }
     }
 
+    protected URL getResource(String path)
+    {
+        return null;
+    }
+
+    protected InputStream getResourceAsStream(String path)
+    {
+        return null;
+    }
+
+    protected RequestDispatcher getRequestDispatcher(String url)
+    {
+        return null;
+    }
 }

Added: 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/XmlToolTests.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/XmlToolTests.java?rev=1777104&view=auto
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/XmlToolTests.java
 (added)
+++ 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/test/blackbox/XmlToolTests.java
 Tue Jan  3 10:12:52 2017
@@ -0,0 +1,248 @@
+package org.apache.velocity.tools.test.blackbox;
+
+/*
+ * 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.
+ */
+
+import org.apache.velocity.tools.view.ViewContext;
+import org.apache.velocity.tools.view.XmlTool;
+import org.junit.Test;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.lang.reflect.Proxy;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+/**
+ * <p>CookieTool tests.</p>
+ *
+ * @author Claude Brisson
+ * @version $Id$
+ */
+
+public class XmlToolTests
+{
+    private XmlTool newXmlTool()
+    {
+        return newXmlTool(new HashMap(), null, null);
+    }
+
+    private XmlTool newXmlTool(Map config)
+    {
+        return newXmlTool(config, null, null);
+    }
+
+    private XmlTool newXmlTool(Map config, Object requestProxy, Object 
responseProxy)
+    {
+        if (config == null)
+        {
+            config = new HashMap();
+        }
+
+        if (requestProxy == null)
+        {
+            requestProxy =
+                Proxy.newProxyInstance(this.getClass().getClassLoader(),
+                    new Class[]{HttpServletRequest.class},
+                    new RequestAdaptor());
+        }
+
+        HttpServletRequest request = (HttpServletRequest)requestProxy;
+
+        if (responseProxy == null)
+        {
+            responseProxy =
+                Proxy.newProxyInstance(this.getClass().getClassLoader(),
+                    new Class[]{HttpServletResponse.class},
+                    new ResponseAdaptor());
+        }
+
+        HttpServletResponse response = (HttpServletResponse)responseProxy;
+
+        Object contextProxy
+            = Proxy.newProxyInstance(this.getClass().getClassLoader(),
+            new Class[]{ServletContext.class},
+            new ServletContextAdaptor()
+            {
+                @Override
+                protected URL getResource(String resource)
+                {
+                    // redirect towards classpath resources
+                    if (!resource.startsWith("/"))
+                    {
+                        resource = "/" + resource;
+                    }
+                    resource = "webapp_mocking" + resource;
+                    return getClass().getClassLoader().getResource(resource);
+                }
+
+                @Override
+                protected InputStream getResourceAsStream(String resource)
+                {
+                    // redirect towards classpath resources
+                    if (!resource.startsWith("/"))
+                    {
+                        resource = "/" + resource;
+                    }
+                    resource = "webapp_mocking" + resource;
+                    return 
getClass().getClassLoader().getResourceAsStream(resource);
+                }
+
+                @Override
+                protected RequestDispatcher getRequestDispatcher(String url)
+                {
+                    return new RequestDispatcher()
+                    {
+                        @Override
+                        public void forward(ServletRequest request, 
ServletResponse response) throws ServletException, IOException
+                        {
+                            throw new ServletException("not implemented");
+                        }
+
+                        @Override
+                        public void include(ServletRequest request, 
ServletResponse response) throws ServletException, IOException
+                        {
+                            response.setContentType("application/xml");
+                            response.getWriter().write("<hey>bro</hey>");
+                        }
+                    };
+                }
+
+            });
+
+        ServletContext servletContext = (ServletContext)contextProxy;
+
+        XmlTool xml = new XmlTool();
+        config.put(ViewContext.REQUEST, request);
+        config.put(ViewContext.RESPONSE, response);
+        config.put(ViewContext.SERVLET_CONTEXT_KEY, servletContext);
+        xml.configure(config);
+        return xml;
+    }
+
+    public @Test void testConfigReadWebappResource()
+    {
+        Map config = new HashMap();
+        config.put("resource", "/inwebapp.xml");
+        XmlTool xml = newXmlTool(config);
+        assertEquals("there", xml.getText());
+    }
+
+    public @Test void testConfigReadClasspathResource()
+    {
+        Map config = new HashMap();
+        config.put("resource", "/inclasspath.xml");
+        XmlTool xml = newXmlTool(config);
+        assertEquals("brother", xml.getText());
+    }
+
+    public @Test void testConfigFetchLocalSource()
+    {
+        Map config = new HashMap();
+        config.put("url", "/local-url.json");
+        XmlTool xml = newXmlTool(config);
+        assertEquals("bro", xml.getText());
+    }
+
+    public @Test void testConfigFetchRemoteSource()
+    {
+        Map config = new HashMap();
+        config.put("url", 
"http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/test/resources/file.xml?revision=1776916&view=co&pathrev=1776916";);
+        XmlTool xml = newXmlTool(config);
+        assertEquals("woogie\n  wiggie", xml.getText());
+    }
+
+    public @Test void testRequestContent()
+    {
+        final String content = "<?xml version=\"1.0\"?><hey>sister</hey>";
+        Object requestProxy =
+            Proxy.newProxyInstance(this.getClass().getClassLoader(),
+                new Class[]{HttpServletRequest.class},
+                new RequestAdaptor()
+                {
+                    @Override
+                    protected int getContentLength()
+                    {
+                        return content.length();
+                    }
+
+                    @Override
+                    protected String getContentType()
+                    {
+                        return "application/xml";
+                    }
+
+                    @Override
+                    protected BufferedReader getReader()
+                    {
+                        return new BufferedReader(new StringReader(content));
+                    }
+                });
+        XmlTool xml = newXmlTool(null, requestProxy, null);
+        assertEquals("sister", xml.getText());
+    }
+
+    public @Test void testParseString()
+    {
+        XmlTool xml = newXmlTool();
+        xml.parse("<?xml version=\"1.0\"?><hey>you</hey>");
+        assertEquals("you", xml.getText());
+    }
+
+    public @Test void testReadWebappResource()
+    {
+        XmlTool xml = newXmlTool();
+        xml.read("/inwebapp.xml");
+        assertEquals("there", xml.getText());
+    }
+
+    public @Test void testReadClasspathResource()
+    {
+        XmlTool xml = newXmlTool();
+        xml.read("/inclasspath.xml");
+        assertEquals("brother", xml.getText());
+    }
+
+    public @Test void testFetchLocalSource()
+    {
+        XmlTool xml = newXmlTool();
+        xml.fetch("/local-url.json");
+        assertEquals("bro", xml.getText());
+    }
+
+    public @Test void testFetchRemoteSource()
+    {
+        XmlTool xml = newXmlTool();
+        
xml.fetch("http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/test/resources/file.xml?revision=1776916&view=co&pathrev=1776916";);
+        assertNull(xml.getText()); // CB TODO - also check there is a warning 
about safe mode in the logs
+    }
+}

Added: 
velocity/tools/trunk/velocity-tools-view/src/test/resources/inclasspath.json
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/test/resources/inclasspath.json?rev=1777104&view=auto
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/test/resources/inclasspath.json 
(added)
+++ 
velocity/tools/trunk/velocity-tools-view/src/test/resources/inclasspath.json 
Tue Jan  3 10:12:52 2017
@@ -0,0 +1 @@
+{"hey" : "brother" }

Added: 
velocity/tools/trunk/velocity-tools-view/src/test/resources/inclasspath.xml
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/test/resources/inclasspath.xml?rev=1777104&view=auto
==============================================================================
--- velocity/tools/trunk/velocity-tools-view/src/test/resources/inclasspath.xml 
(added)
+++ velocity/tools/trunk/velocity-tools-view/src/test/resources/inclasspath.xml 
Tue Jan  3 10:12:52 2017
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hey>brother</hey>
+

Added: 
velocity/tools/trunk/velocity-tools-view/src/test/resources/webapp_mocking/inwebapp.json
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/test/resources/webapp_mocking/inwebapp.json?rev=1777104&view=auto
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/test/resources/webapp_mocking/inwebapp.json
 (added)
+++ 
velocity/tools/trunk/velocity-tools-view/src/test/resources/webapp_mocking/inwebapp.json
 Tue Jan  3 10:12:52 2017
@@ -0,0 +1 @@
+{"hey" : "there" }

Added: 
velocity/tools/trunk/velocity-tools-view/src/test/resources/webapp_mocking/inwebapp.xml
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/test/resources/webapp_mocking/inwebapp.xml?rev=1777104&view=auto
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/test/resources/webapp_mocking/inwebapp.xml
 (added)
+++ 
velocity/tools/trunk/velocity-tools-view/src/test/resources/webapp_mocking/inwebapp.xml
 Tue Jan  3 10:12:52 2017
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hey>there</hey>
+


Reply via email to