Package org.richfaces.test

Source Code of org.richfaces.test.LocalWebResponse

/**
*
*/
package org.richfaces.test;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;

import org.apache.commons.httpclient.NameValuePair;
import org.richfaces.test.staging.StagingConnection;

import com.gargoylesoftware.htmlunit.WebRequestSettings;
import com.gargoylesoftware.htmlunit.WebResponse;

/**
* This implementation realise WebResponse wrapper for a staging server
* connection. This class is used by the {@link LocalWebClient}, but also can be used to analise response rendering:
* <pre>
* ............
* @Test
* public void testRender() {
* setupFacesRequest();
* // Prepare view etc
* ..................
* lifecycle.render(facesContext);
* WebClient webClient = new LocalWebClient(facesServer);
* HtmlPage page = (HtmlPage) webClient.loadWebResponseInto(new LocalWebResponse(connection), webClient.getCurrentWindow());
* // analyse response
* assertTrue(....)
* }
* </pre>
*
* @author asmirnov
*
*/
public class LocalWebResponse implements WebResponse {
 
  private WebRequestSettings settings;
 
  private final StagingConnection serverConnection;
 
  private final long loadTime;

  public LocalWebResponse(StagingConnection serverConnection,long l) {
    this.serverConnection = serverConnection;
    this.loadTime = l;
  }

  public LocalWebResponse(WebRequestSettings settings,
      StagingConnection connection, long l) {
    this(connection,l);
    this.settings = settings;
  }

  /*
   * (non-Javadoc)
   *
   * @see com.gargoylesoftware.htmlunit.WebResponse#getContentAsStream()
   */
  public InputStream getContentAsStream() throws IOException {
    return new ByteArrayInputStream(getResponseBody());
  }

  /*
   * (non-Javadoc)
   *
   * @see com.gargoylesoftware.htmlunit.WebResponse#getContentAsString()
   */
  public String getContentAsString() {
    return serverConnection.getContentAsString();
  }

  /*
   * (non-Javadoc)
   *
   * @see com.gargoylesoftware.htmlunit.WebResponse#getContentCharSet()
   */
  public String getContentCharSet() {
    return serverConnection.getResponseCharacterEncoding();
  }

  public String getContentType() {
    return serverConnection.getResponseContentType();
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * com.gargoylesoftware.htmlunit.WebResponse#getLoadTimeInMilliSeconds()
   */
  public long getLoadTimeInMilliSeconds() {
    return loadTime;
  }

  /*
   * (non-Javadoc)
   *
   * @see com.gargoylesoftware.htmlunit.WebResponse#getRequestMethod()
   */
  public com.gargoylesoftware.htmlunit.HttpMethod getRequestMethod() {
    return com.gargoylesoftware.htmlunit.HttpMethod
        .valueOf(serverConnection.getRequestMethod().toString());
  }

  /*
   * (non-Javadoc)
   *
   * @see com.gargoylesoftware.htmlunit.WebResponse#getRequestSettings()
   */
  public WebRequestSettings getRequestSettings() {
    if (settings == null) {
      settings = new WebRequestSettings(this.getUrl(), getRequestMethod());
    }
    return settings;
  }

  /*
   * (non-Javadoc)
   *
   * @see com.gargoylesoftware.htmlunit.WebResponse#getResponseBody()
   */
  public byte[] getResponseBody() {
    return serverConnection.getResponseBody();
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * com.gargoylesoftware.htmlunit.WebResponse#getResponseHeaderValue(java
   * .lang.String)
   */
  public String getResponseHeaderValue(String headerName) {
    String[] values = serverConnection.getResponseHeaders().get(headerName);
    if(null != values && values.length >0){
      return values[0];
    }
    return null;
  }

  /*
   * (non-Javadoc)
   *
   * @see com.gargoylesoftware.htmlunit.WebResponse#getStatusCode()
   */
  public int getStatusCode() {
    return serverConnection.getResponseStatus();
  }

  /*
   * (non-Javadoc)
   *
   * @see com.gargoylesoftware.htmlunit.WebResponse#getStatusMessage()
   */
  public String getStatusMessage() {
    return serverConnection.getErrorMessage();
  }

  /*
   * (non-Javadoc)
   *
   * @see com.gargoylesoftware.htmlunit.WebResponse#getUrl()
   */
  public URL getUrl() {
    return serverConnection.getUrl();
  }

  /*
   * (non-Javadoc)
   *
   * @see com.gargoylesoftware.htmlunit.WebResponse#getResponseHeaders()
   */
  public List<NameValuePair> getResponseHeaders() {
    ArrayList<NameValuePair> headers = new ArrayList<NameValuePair>(10);
    for (Entry<String, String[]> entry : serverConnection
        .getResponseHeaders().entrySet()) {
      for (String value : entry.getValue()) {
        headers.add(new NameValuePair(entry.getKey(), value));
      }
    }
    int contentLength = serverConnection.getResponseContentLength();
    if(contentLength>=0){
      headers.add(new NameValuePair("Content-Length", String.valueOf(contentLength)));
    }
    return headers;
  }

  /* (non-Javadoc)
   * @see com.gargoylesoftware.htmlunit.WebResponse#getContentAsBytes()
   */
  public byte[] getContentAsBytes() {
    return serverConnection.getResponseBody();
  }

  /* (non-Javadoc)
   * @see com.gargoylesoftware.htmlunit.WebResponse#getContentAsString(java.lang.String)
   */
  public String getContentAsString(String encoding) {
    byte[] body = serverConnection.getResponseBody();
    String content;
    try {
      content = new String(body,encoding);
    } catch (UnsupportedEncodingException e) {
      content = new String(body);
    }
    return content;
  }

  /* (non-Javadoc)
   * @see com.gargoylesoftware.htmlunit.WebResponse#getLoadTime()
   */
  public long getLoadTime() {
    return loadTime;
  }

  /* (non-Javadoc)
   * @see com.gargoylesoftware.htmlunit.WebResponse#getRequestUrl()
   */
  public URL getRequestUrl() {
    // TODO Auto-generated method stub
    return serverConnection.getUrl();
  }
}
TOP

Related Classes of org.richfaces.test.LocalWebResponse

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.