View Javadoc

    1   /*
    2    * $Id: MockHttpServletRequest.java 471754 2006-11-06 14:55:09Z husted $
    3    *
    4    * Licensed to the Apache Software Foundation (ASF) under one
    5    * or more contributor license agreements.  See the NOTICE file
    6    * distributed with this work for additional information
    7    * regarding copyright ownership.  The ASF licenses this file
    8    * to you under the Apache License, Version 2.0 (the
    9    * "License"); you may not use this file except in compliance
    10   * with the License.  You may obtain a copy of the License at
    11   *
    12   *  http://www.apache.org/licenses/LICENSE-2.0
    13   *
    14   * Unless required by applicable law or agreed to in writing,
    15   * software distributed under the License is distributed on an
    16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    17   * KIND, either express or implied.  See the License for the
    18   * specific language governing permissions and limitations
    19   * under the License.
    20   */
    21  package org.apache.struts.mock;
    22
    23  import javax.servlet.RequestDispatcher;
    24  import javax.servlet.ServletInputStream;
    25  import javax.servlet.http.Cookie;
    26  import javax.servlet.http.HttpServletRequest;
    27  import javax.servlet.http.HttpSession;
    28
    29  import java.io.BufferedReader;
    30
    31  import java.security.Principal;
    32
    33  import java.util.Enumeration;
    34  import java.util.HashMap;
    35  import java.util.Locale;
    36  import java.util.Map;
    37
    38  /**
    39   * <p>Mock <strong>HttpServletRequest</strong> object for low-level unit tests
    40   * of Struts controller components.  Coarser grained tests should be
    41   * implemented in terms of the Cactus framework, instead of the mock object
    42   * classes.</p>
    43   *
    44   * <p><strong>WARNING</strong> - Only the minimal set of methods needed to
    45   * create unit tests is provided, plus additional methods to configure this
    46   * object as necessary.  Methods for unsupported operations will throw
    47   * <code>UnsupportedOperationException</code>.</p>
    48   *
    49   * <p><strong>WARNING</strong> - Because unit tests operate in a single
    50   * threaded environment, no synchronization is performed.</p>
    51   *
    52   * @version $Rev: 471754 $ $Date: 2006-11-06 08:55:09 -0600 (Mon, 06 Nov 2006) $
    53   */
    54  public class MockHttpServletRequest implements HttpServletRequest {
    55      // ----------------------------------------------------- Instance Variables
    56
    57      /**
    58       * <p> The set of request attributes. </p>
    59       */
    60      protected HashMap attributes = new HashMap();
    61
    62      /**
    63       * <p> The context path for this request. </p>
    64       */
    65      protected String contextPath = null;
    66
    67      /**
    68       * <p> The preferred locale for this request. </p>
    69       */
    70      protected Locale locale = null;
    71
    72      /**
    73       * <p> The set of arrays of parameter values, keyed by parameter name.
    74       * </p>
    75       */
    76      protected HashMap parameters = new HashMap();
    77
    78      /**
    79       * <p> The extra path information for this request. v     * </p>
    80       */
    81      protected String pathInfo = null;
    82
    83      /**
    84       * <p> The authenticated user for this request. </p>
    85       */
    86      protected Principal principal = null;
    87
    88      /**
    89       * <p> The query string for this request. </p>
    90       */
    91      protected String queryString = null;
    92
    93      /**
    94       * <p> The servlet path for this request. </p>
    95       */
    96      protected String servletPath = null;
    97
    98      /**
    99       * <p> The HttpSession with which we are associated. </p>
    100      */
    101     protected HttpSession session = null;
    102
    103     /**
    104      * <p> The HTTP request method. </p>
    105      */
    106     protected String method = null;
    107
    108     /**
    109      * <p> The Content Type for this request. </p>
    110      */
    111     protected String contentType = null;
    112
    113     // ----------------------------------------------------------- Constructors
    114     public MockHttpServletRequest() {
    115         super();
    116     }
    117
    118     public MockHttpServletRequest(HttpSession session) {
    119         super();
    120         setHttpSession(session);
    121     }
    122
    123     public MockHttpServletRequest(String contextPath, String servletPath,
    124         String pathInfo, String queryString) {
    125         super();
    126         setPathElements(contextPath, servletPath, pathInfo, queryString);
    127     }
    128
    129     public MockHttpServletRequest(String contextPath, String servletPath,
    130         String pathInfo, String queryString, HttpSession session) {
    131         super();
    132         setPathElements(contextPath, servletPath, pathInfo, queryString);
    133         setHttpSession(session);
    134     }
    135
    136     // --------------------------------------------------------- Public Methods
    137     public void addParameter(String name, String value) {
    138         String[] values = (String[]) parameters.get(name);
    139
    140         if (values == null) {
    141             String[] results = new String[] { value };
    142
    143             parameters.put(name, results);
    144
    145             return;
    146         }
    147
    148         String[] results = new String[values.length + 1];
    149
    150         System.arraycopy(values, 0, results, 0, values.length);
    151         results[values.length] = value;
    152         parameters.put(name, results);
    153     }
    154
    155     public void setHttpSession(HttpSession session) {
    156         this.session = session;
    157     }
    158
    159     public void setLocale(Locale locale) {
    160         this.locale = locale;
    161     }
    162
    163     public void setMethod(String method) {
    164         this.method = method;
    165     }
    166
    167     public void setContentType(String contentType) {
    168         this.contentType = contentType;
    169     }
    170
    171     public void setPathElements(String contextPath, String servletPath,
    172         String pathInfo, String queryString) {
    173         this.contextPath = contextPath;
    174         this.servletPath = servletPath;
    175         this.pathInfo = pathInfo;
    176         this.queryString = queryString;
    177     }
    178
    179     public void setUserPrincipal(Principal principal) {
    180         this.principal = principal;
    181     }
    182
    183     // --------------------------------------------- HttpServletRequest Methods
    184     public String getAuthType() {
    185         throw new UnsupportedOperationException();
    186     }
    187
    188     public String getContextPath() {
    189         return (contextPath);
    190     }
    191
    192     public Cookie[] getCookies() {
    193         throw new UnsupportedOperationException();
    194     }
    195
    196     public long getDateHeader(String name) {
    197         throw new UnsupportedOperationException();
    198     }
    199
    200     public String getHeader(String name) {
    201         throw new UnsupportedOperationException();
    202     }
    203
    204     public Enumeration getHeaderNames() {
    205         throw new UnsupportedOperationException();
    206     }
    207
    208     public Enumeration getHeaders(String name) {
    209         throw new UnsupportedOperationException();
    210     }
    211
    212     public int getIntHeader(String name) {
    213         throw new UnsupportedOperationException();
    214     }
    215
    216     public String getMethod() {
    217         return (method);
    218     }
    219
    220     public String getPathInfo() {
    221         return (pathInfo);
    222     }
    223
    224     public String getPathTranslated() {
    225         throw new UnsupportedOperationException();
    226     }
    227
    228     public String getQueryString() {
    229         return (queryString);
    230     }
    231
    232     public String getRemoteUser() {
    233         if (principal != null) {
    234             return (principal.getName());
    235         } else {
    236             return (null);
    237         }
    238     }
    239
    240     public String getRequestedSessionId() {
    241         throw new UnsupportedOperationException();
    242     }
    243
    244     public String getRequestURI() {
    245         StringBuffer sb = new StringBuffer();
    246
    247         if (contextPath != null) {
    248             sb.append(contextPath);
    249         }
    250
    251         if (servletPath != null) {
    252             sb.append(servletPath);
    253         }
    254
    255         if (pathInfo != null) {
    256             sb.append(pathInfo);
    257         }
    258
    259         if (sb.length() > 0) {
    260             return (sb.toString());
    261         }
    262
    263         throw new UnsupportedOperationException();
    264     }
    265
    266     public StringBuffer getRequestURL() {
    267         throw new UnsupportedOperationException();
    268     }
    269
    270     public String getServletPath() {
    271         return (servletPath);
    272     }
    273
    274     public HttpSession getSession() {
    275         return (getSession(true));
    276     }
    277
    278     public HttpSession getSession(boolean create) {
    279         if (create && (session == null)) {
    280             session = new MockHttpSession();
    281
    282             // modified to act like the real deal,
    283             // call with (false) if you want null
    284             // throw new UnsupportedOperationException();
    285         }
    286
    287         return (session);
    288     }
    289
    290     public Principal getUserPrincipal() {
    291         return (principal);
    292     }
    293
    294     public boolean isRequestedSessionIdFromCookie() {
    295         throw new UnsupportedOperationException();
    296     }
    297
    298     public boolean isRequestedSessionIdFromUrl() {
    299         throw new UnsupportedOperationException();
    300     }
    301
    302     public boolean isRequestedSessionIdFromURL() {
    303         throw new UnsupportedOperationException();
    304     }
    305
    306     public boolean isRequestedSessionIdValid() {
    307         throw new UnsupportedOperationException();
    308     }
    309
    310     public boolean isUserInRole(String role) {
    311         if ((principal != null) && (principal instanceof MockPrincipal)) {
    312             return (((MockPrincipal) principal).isUserInRole(role));
    313         } else {
    314             return (false);
    315         }
    316     }
    317
    318     // ------------------------------------------------- ServletRequest Methods
    319     public Object getAttribute(String name) {
    320         return (attributes.get(name));
    321     }
    322
    323     public Enumeration getAttributeNames() {
    324         return (new MockEnumeration(attributes.keySet().iterator()));
    325     }
    326
    327     public String getCharacterEncoding() {
    328         throw new UnsupportedOperationException();
    329     }
    330
    331     public int getContentLength() {
    332         throw new UnsupportedOperationException();
    333     }
    334
    335     public String getContentType() {
    336         return (contentType);
    337     }
    338
    339     public ServletInputStream getInputStream() {
    340         throw new UnsupportedOperationException();
    341     }
    342
    343     public Locale getLocale() {
    344         return (locale);
    345     }
    346
    347     public Enumeration getLocales() {
    348         throw new UnsupportedOperationException();
    349     }
    350
    351     public String getParameter(String name) {
    352         String[] values = (String[]) parameters.get(name);
    353
    354         if (values != null) {
    355             return (values[0]);
    356         } else {
    357             return (null);
    358         }
    359     }
    360
    361     public Map getParameterMap() {
    362         return (parameters);
    363     }
    364
    365     public Enumeration getParameterNames() {
    366         return (new MockEnumeration(parameters.keySet().iterator()));
    367     }
    368
    369     public String[] getParameterValues(String name) {
    370         return ((String[]) parameters.get(name));
    371     }
    372
    373     public String getProtocol() {
    374         throw new UnsupportedOperationException();
    375     }
    376
    377     public BufferedReader getReader() {
    378         throw new UnsupportedOperationException();
    379     }
    380
    381     public String getRealPath(String path) {
    382         throw new UnsupportedOperationException();
    383     }
    384
    385     public String getRemoteAddr() {
    386         throw new UnsupportedOperationException();
    387     }
    388
    389     public String getRemoteHost() {
    390         throw new UnsupportedOperationException();
    391     }
    392
    393     public RequestDispatcher getRequestDispatcher(String path) {
    394         throw new UnsupportedOperationException();
    395     }
    396
    397     public String getScheme() {
    398         return ("http");
    399     }
    400
    401     public String getServerName() {
    402         return ("localhost");
    403     }
    404
    405     public int getServerPort() {
    406         return (8080);
    407     }
    408
    409     public boolean isSecure() {
    410         return (false);
    411     }
    412
    413     public void removeAttribute(String name) {
    414         attributes.remove(name);
    415     }
    416
    417     public void setAttribute(String name, Object value) {
    418         if (value == null) {
    419             attributes.remove(name);
    420         } else {
    421             attributes.put(name, value);
    422         }
    423     }
    424
    425     public void setCharacterEncoding(String name) {
    426         throw new UnsupportedOperationException();
    427     }
    428 }