Skip to content

Instantly share code, notes, and snippets.

@yume190
Created January 21, 2015 07:19
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save yume190/0391e786610a74b5b065 to your computer and use it in GitHub Desktop.
Save yume190/0391e786610a74b5b065 to your computer and use it in GitHub Desktop.
package com.yume190.tw.test;
import android.os.Environment;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.FileAsyncHttpResponseHandler;
import com.loopj.android.http.SyncHttpClient;
import com.maxwin.busstop.advance.YumeFile;
import junit.framework.TestCase;
import org.apache.http.Header;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.ProtocolVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.entity.InputStreamEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.util.EntityUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.HttpResponseGenerator;
import org.robolectric.tester.org.apache.http.FakeHttpLayer;
import org.robolectric.tester.org.apache.http.HttpEntityStub;
import org.robolectric.tester.org.apache.http.RequestMatcher;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
@RunWith(RobolectricTestRunner.class)
@Config(emulateSdk = 18)
public class Temp2Test extends TestCase {
HttpResponse successResponse;
HttpResponse failResponse;
@Before
public void setUp() throws Exception {
super.setUp();
ProtocolVersion httpProtocolVersion = new ProtocolVersion("HTTP", 1, 1);
successResponse = new BasicHttpResponse(httpProtocolVersion, 200, "OK");
successResponse.setEntity(new StringEntity("Yume S"));
failResponse = new BasicHttpResponse(httpProtocolVersion, 404, "Not Found");
failResponse.setEntity(new StringEntity("Yume F"));
}
@After
public void tearDown() throws Exception {
Robolectric.clearHttpResponseRules();
Robolectric.clearPendingHttpResponses();
super.tearDown();
}
@Test
public void testHttpResponseRule1() throws Exception {
HttpClient client = new DefaultHttpClient();
String url = "http://www.test.com/test1.html";
Robolectric.addHttpResponseRule("GET",url,successResponse);
assertFalse(Robolectric.httpRequestWasMade());
assertFalse(Robolectric.httpRequestWasMade(url));
URI uri = new URI( url);
HttpGet request = new HttpGet(uri);
HttpResponse response;
response = client.execute(request);
assertEquals(200,response.getStatusLine().getStatusCode());
assertEquals("Yume S", EntityUtils.toString(response.getEntity()));
assertTrue(Robolectric.httpRequestWasMade());
assertTrue(Robolectric.httpRequestWasMade(url));
}
@Test
public void testHttpResponseRule2() throws Exception {
HttpClient client = new DefaultHttpClient();
String url = "http://www.test.com/test2.html";
Robolectric.addHttpResponseRule(url,successResponse);
assertFalse(Robolectric.httpRequestWasMade());
assertFalse(Robolectric.httpRequestWasMade(url));
URI uri = new URI( url);
HttpGet request = new HttpGet(uri);
HttpResponse response;
response = client.execute(request);
assertEquals(200,response.getStatusLine().getStatusCode());
assertEquals("Yume S", EntityUtils.toString(response.getEntity()));
assertTrue(Robolectric.httpRequestWasMade());
assertTrue(Robolectric.httpRequestWasMade(url));
}
@Test
public void testHttpResponseRule3() throws Exception {
HttpClient client = new DefaultHttpClient();
String url = "http://www.test.com/test3.html";
Robolectric.addHttpResponseRule(url,"Yume S");
assertFalse(Robolectric.httpRequestWasMade());
assertFalse(Robolectric.httpRequestWasMade(url));
URI uri = new URI( url);
HttpGet request = new HttpGet(uri);
HttpResponse response;
response = client.execute(request);
assertEquals(200,response.getStatusLine().getStatusCode());
assertEquals("Yume S", EntityUtils.toString(response.getEntity()));
assertTrue(Robolectric.httpRequestWasMade());
assertTrue(Robolectric.httpRequestWasMade(url));
}
@Test
public void testHttpResponseRule4() throws Exception {
HttpClient client = new DefaultHttpClient();
String url = "http://www.test.com/test4.html";
RequestMatcher requestMatcher = new FakeHttpLayer.DefaultRequestMatcher("GET","http://www.test.com/test4.html");
Robolectric.addHttpResponseRule(requestMatcher,successResponse);
assertFalse(Robolectric.httpRequestWasMade());
assertFalse(Robolectric.httpRequestWasMade(url));
URI uri = new URI( url);
HttpGet request = new HttpGet(uri);
HttpResponse response;
response = client.execute(request);
assertEquals(200,response.getStatusLine().getStatusCode());
assertEquals("Yume S", EntityUtils.toString(response.getEntity()));
assertTrue(Robolectric.httpRequestWasMade());
assertTrue(Robolectric.httpRequestWasMade(url));
}
@Test
public void testHttpResponseRule5() throws Exception {
HttpClient client = new DefaultHttpClient();
String url = "http://www.test.com/test5.html";
RequestMatcher requestMatcher = new FakeHttpLayer.RequestMatcherBuilder()
.host("www.test.com")
.path("test5.html")
.method("GET");
List<HttpResponse> list = new ArrayList<>();
list.add(successResponse);
list.add(failResponse);
Robolectric.addHttpResponseRule(requestMatcher,list);
assertFalse(Robolectric.httpRequestWasMade());
assertFalse(Robolectric.httpRequestWasMade(url));
URI uri = new URI( url);
HttpGet request = new HttpGet(uri);
HttpResponse response;
response = client.execute(request);
assertEquals(200,response.getStatusLine().getStatusCode());
assertEquals("Yume S", EntityUtils.toString(response.getEntity()));
response = client.execute(request);
assertEquals(404,response.getStatusLine().getStatusCode());
assertEquals("Yume F", EntityUtils.toString(response.getEntity()));
assertTrue(Robolectric.httpRequestWasMade());
assertTrue(Robolectric.httpRequestWasMade(url));
}
@Test
public void testPendingHttpResponse1() throws Exception {
HttpClient client = new DefaultHttpClient();
String url = "http://www.test.com/testP1.html";
Robolectric.addPendingHttpResponse(successResponse);
Robolectric.addPendingHttpResponse(failResponse);
Robolectric.addPendingHttpResponse(successResponse);
assertFalse(Robolectric.httpRequestWasMade());
assertFalse(Robolectric.httpRequestWasMade(url));
URI uri = new URI( url);
HttpGet request = new HttpGet(uri);
HttpResponse response;
response = client.execute(request);
assertEquals(200,response.getStatusLine().getStatusCode());
assertEquals("Yume S", EntityUtils.toString(response.getEntity()));
response = client.execute(request);
assertEquals(404,response.getStatusLine().getStatusCode());
assertEquals("Yume F", EntityUtils.toString(response.getEntity()));
response = client.execute(request);
assertEquals(200,response.getStatusLine().getStatusCode());
assertEquals("Yume S", EntityUtils.toString(response.getEntity()));
assertTrue(Robolectric.httpRequestWasMade());
assertTrue(Robolectric.httpRequestWasMade(url));
}
@Test
public void testPendingHttpResponse2() throws Exception {
HttpClient client = new DefaultHttpClient();
String url = "http://www.test.com/testP2.html";
HttpResponseGenerator successHttpResponseGenerator = new HttpResponseGenerator() {
@Override
public HttpResponse getResponse(HttpRequest request) {
return successResponse;
}
};
HttpResponseGenerator failHttpResponseGenerator = new HttpResponseGenerator() {
@Override
public HttpResponse getResponse(HttpRequest request) {
return failResponse;
}
};
Robolectric.addPendingHttpResponse(successHttpResponseGenerator);
Robolectric.addPendingHttpResponse(failHttpResponseGenerator);
Robolectric.addPendingHttpResponse(successHttpResponseGenerator);
assertFalse(Robolectric.httpRequestWasMade());
assertFalse(Robolectric.httpRequestWasMade(url));
URI uri = new URI( url);
HttpGet request = new HttpGet(uri);
HttpResponse response;
response = client.execute(request);
assertEquals(200,response.getStatusLine().getStatusCode());
assertEquals("Yume S", EntityUtils.toString(response.getEntity()));
response = client.execute(request);
assertEquals(404,response.getStatusLine().getStatusCode());
assertEquals("Yume F", EntityUtils.toString(response.getEntity()));
response = client.execute(request);
assertEquals(200,response.getStatusLine().getStatusCode());
assertEquals("Yume S", EntityUtils.toString(response.getEntity()));
assertTrue(Robolectric.httpRequestWasMade());
assertTrue(Robolectric.httpRequestWasMade(url));
}
@Test
public void testPendingHttpResponse3() throws Exception {
HttpClient client = new DefaultHttpClient();
String url = "http://www.test.com/testP3.html";
Header[] headers = new Header[1];
headers[0] = new BasicHeader("Yume","Dream");
Robolectric.addPendingHttpResponse(200,"Yume S",headers);
Robolectric.addPendingHttpResponse(404,"Yume F",headers);
Robolectric.addPendingHttpResponse(200,"Yume S",headers);
assertFalse(Robolectric.httpRequestWasMade());
assertFalse(Robolectric.httpRequestWasMade(url));
URI uri = new URI( url);
HttpGet request = new HttpGet(uri);
HttpResponse response;
response = client.execute(request);
assertEquals(200,response.getStatusLine().getStatusCode());
assertEquals("Yume S", EntityUtils.toString(response.getEntity()));
response = client.execute(request);
assertEquals(404,response.getStatusLine().getStatusCode());
assertEquals("Yume F", EntityUtils.toString(response.getEntity()));
response = client.execute(request);
assertEquals(200,response.getStatusLine().getStatusCode());
assertEquals("Yume S", EntityUtils.toString(response.getEntity()));
assertTrue(Robolectric.httpRequestWasMade());
assertTrue(Robolectric.httpRequestWasMade(url));
}
@Test
public void testHttpResponseRule6DefaultHttpClient() throws Exception {
HttpClient client = new DefaultHttpClient();
String url = "http://www.test.com/test6.html";
Robolectric.getFakeHttpLayer().addHttpResponseRule(new MyResponseRule());
URI uri = new URI( url);
HttpGet request = new HttpGet(uri);
HttpResponse response;
response = client.execute(request);
assertEquals(200,response.getStatusLine().getStatusCode());
assertEquals("Yume S", EntityUtils.toString(response.getEntity()));
assertTrue(Robolectric.httpRequestWasMade());
assertTrue(Robolectric.httpRequestWasMade(url));
}
@Test
public void testHttpResponseRule6SyncHttpClientSuccess() throws Exception {
String url = "http://www.test.com/test6.html";
Robolectric.getFakeHttpLayer().addHttpResponseRule(new MyResponseRule());
SyncHttpClient syncHttpClient = new SyncHttpClient();
syncHttpClient.get(url,new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
try {
String decoded = new String(responseBody, "UTF-8");
assertEquals(200,statusCode);
assertEquals("Yume S", decoded);
} catch (UnsupportedEncodingException e) {
fail("never happen");
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
fail("never happen");
}
});
assertTrue(Robolectric.httpRequestWasMade());
assertTrue(Robolectric.httpRequestWasMade(url));
}
@Test
public void testHttpResponseRule6SyncHttpClientFail() throws Exception {
String url = "http://www.test.com/test7.html";
Robolectric.getFakeHttpLayer().addHttpResponseRule(new MyResponseRule());
SyncHttpClient syncHttpClient = new SyncHttpClient();
syncHttpClient.get(url,new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
fail("never happen");
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
System.out.print("Request Fail Happen");
}
});
}
@Test
public void testDownloadFile1() throws Exception {
String url = "http://www.test.com/test.js";
HttpResponse downloadResponse = new BasicHttpResponse(new ProtocolVersion("HTTP", 1, 1), 200, "OK");
InputStream is = Robolectric.getShadowApplication().getAssets().open("test/async_data_finder_factory.js");
downloadResponse.setEntity(new InputStreamEntity(is,737));
Robolectric.addHttpResponseRule(url,downloadResponse);
String folderName = Robolectric.getShadowApplication().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
YumeFile folder = new YumeFile(folderName);
folder.mkdirs();
YumeFile file = new YumeFile(folderName + "/" + "b.js");
SyncHttpClient syncHttpClient = new SyncHttpClient();
syncHttpClient.get(url,new FileAsyncHttpResponseHandler(file) {
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, File file) {
fail("never happen");
}
@Override
public void onSuccess(int statusCode, Header[] headers, File file) {
YumeFile yumeFile = new YumeFile(file.getAbsolutePath());
assertEquals(yumeFile.checksum(),"065710dfd1e9419deb9507d2e7fdaa98");
assertEquals(737,file.length());
}
});
File externalFileFolder = Robolectric.getShadowApplication().getExternalFilesDir("").getParentFile();
externalFileFolder.delete();
}
@Test
public void testDownloadFile2() throws Exception {
String url = "http://www.test.com/test.ttf";
HttpResponse downloadResponse = new BasicHttpResponse(new ProtocolVersion("HTTP", 1, 1), 200, "OK");
InputStream is = Robolectric.getShadowApplication().getAssets().open("test/RobotoCondensed-Bold.ttf");
downloadResponse.setEntity(new InputStreamEntity(is,737));
Robolectric.addHttpResponseRule(url,downloadResponse);
String folderName = Robolectric.getShadowApplication().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
YumeFile folder = new YumeFile(folderName);
folder.mkdirs();
YumeFile file = new YumeFile(folderName + "/" + "c.ttf");
SyncHttpClient syncHttpClient = new SyncHttpClient();
syncHttpClient.get(url,new FileAsyncHttpResponseHandler(file) {
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, File file) {
fail("never happen");
}
@Override
public void onSuccess(int statusCode, Header[] headers, File file) {
YumeFile yumeFile = new YumeFile(file.getAbsolutePath());
assertEquals("52f9b35f9f7cfa1be2644bcbac61a983",yumeFile.checksum());
assertEquals(141796,file.length());
}
});
File externalFileFolder = Robolectric.getShadowApplication().getExternalFilesDir("").getParentFile();
externalFileFolder.delete();
}
class MyResponseRule implements HttpEntityStub.ResponseRule {
@Override
public HttpResponse getResponse() throws HttpException, IOException {
HttpResponse response = new BasicHttpResponse(new ProtocolVersion("HTTP", 1, 1), 200, "OK");
response.addHeader(new BasicHeader("Yume","Dream"));
response.setEntity(new StringEntity("Yume S"));
return response;
}
@Override
public boolean matches(HttpRequest request) {
String uri = request.getRequestLine().getUri();
if (uri.equals("http://www.test.com/test6.html"))
return true;
return false;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment