blob: 13acd1577a69a1fb28be8f15ec456c64e51eaeea [file] [log] [blame]
package com.xtremelabs.robolectric.tester.org.apache.http;
import com.xtremelabs.robolectric.shadows.StatusLineStub;
import org.apache.http.Header;
import org.apache.http.HeaderIterator;
import org.apache.http.HttpEntity;
import org.apache.http.HttpVersion;
import org.apache.http.ProtocolVersion;
import org.apache.http.StatusLine;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.NoSuchElementException;
public class TestHttpResponse extends HttpResponseStub {
private int statusCode;
private byte[] responseBody;
private TestStatusLine statusLine = new TestStatusLine();
private TestHttpEntity httpEntity = new TestHttpEntity();
private int openEntityContentStreamCount = 0;
private Header[] headers = new Header[0];
private HttpParams params = new BasicHttpParams();
public TestHttpResponse() {
this.statusCode = 200;
this.responseBody = new byte[0];
}
public TestHttpResponse(int statusCode, String responseBody) {
this.statusCode = statusCode;
this.responseBody = responseBody.getBytes();
}
public TestHttpResponse(int statusCode, String responseBody, Header... headers) {
this(statusCode, responseBody.getBytes(), headers);
}
public TestHttpResponse(int statusCode, byte[] responseBody, Header... headers) {
this.statusCode = statusCode;
this.responseBody = responseBody.clone();
this.headers = headers;
}
protected void setResponseBody(String responseBody) {
this.responseBody = responseBody.getBytes();
}
@Override public StatusLine getStatusLine() {
return statusLine;
}
@Override public HttpEntity getEntity() {
return httpEntity;
}
@Override public Header[] getAllHeaders() {
return headers;
}
@Override public Header getFirstHeader(String s) {
for (Header h : headers) {
if (s.equalsIgnoreCase(h.getName())) {
return h;
}
}
return null;
}
@Override public Header getLastHeader(String s) {
for (int i = headers.length -1; i >= 0; i--) {
if (headers[i].getName().equalsIgnoreCase(s)) {
return headers[i];
}
}
return null;
}
@Override public Header[] getHeaders(String s) {
List<Header> found = new ArrayList<Header>();
for (Header h : headers) {
if (h.getName().equalsIgnoreCase(s)) found.add(h);
}
return found.toArray(new Header[found.size()]);
}
@Override
public void addHeader(Header header) {
List<Header> temp = new ArrayList<Header>();
Collections.addAll(temp, headers);
temp.add(header);
headers = temp.toArray(new Header[temp.size()]);
}
@Override
public void setHeader(Header newHeader) {
for (int i = 0; i < headers.length; i++) {
Header header = headers[i];
if (header.getName().equals(newHeader.getName())) {
headers[i] = newHeader;
return;
}
}
}
@Override public HeaderIterator headerIterator() {
return new HeaderIterator() {
int index = 0;
@Override public boolean hasNext() {
return index < headers.length;
}
@Override public Header nextHeader() {
if (index >= headers.length) throw new NoSuchElementException();
return headers[index++];
}
@Override public Object next() {
return nextHeader();
}
@Override public void remove() {
throw new UnsupportedOperationException();
}
};
}
@Override public HeaderIterator headerIterator(final String s) {
return new HeaderIterator() {
int index = 0;
@Override public boolean hasNext() {
return nextIndex() != -1;
}
private int nextIndex() {
for (int i = index; i<headers.length; i++) {
if (headers[i].getName().equalsIgnoreCase(s)) {
return i;
}
}
return -1;
}
@Override public Header nextHeader() {
index = nextIndex();
if (index == -1) throw new NoSuchElementException();
return headers[index++];
}
@Override public Object next() {
return nextHeader();
}
@Override public void remove() {
throw new UnsupportedOperationException();
}
};
}
@Override public boolean containsHeader(String s) {
return getFirstHeader(s) != null;
}
@Override public HttpParams getParams() {
return params;
}
@Override public void setParams(HttpParams httpParams) {
this.params = httpParams;
}
public boolean entityContentStreamsHaveBeenClosed() {
return openEntityContentStreamCount == 0;
}
public class TestHttpEntity extends HttpEntityStub {
private ByteArrayInputStream inputStream;
@Override public long getContentLength() {
return responseBody.length;
}
@Override public Header getContentType() {
for (Header header : headers) {
if (header.getName().equals("Content-Type")) {
return header;
}
}
return null;
}
@Override public boolean isStreaming() {
return true;
}
@Override public boolean isRepeatable() {
return true;
}
@Override public InputStream getContent() throws IOException, IllegalStateException {
openEntityContentStreamCount++;
inputStream = new ByteArrayInputStream(responseBody) {
@Override
public void close() throws IOException {
openEntityContentStreamCount--;
super.close();
}
};
return inputStream;
}
@Override public void writeTo(OutputStream outputStream) throws IOException {
outputStream.write(responseBody);
}
@Override public void consumeContent() throws IOException {
}
}
public class TestStatusLine extends StatusLineStub {
@Override public ProtocolVersion getProtocolVersion() {
return new HttpVersion(1, 0);
}
@Override public int getStatusCode() {
return statusCode;
}
@Override public String getReasonPhrase() {
return "HTTP status " + statusCode;
}
@Override public String toString() {
return "TestStatusLine[" + getReasonPhrase() + "]";
}
}
}