blob: d68746c4a2e4cd4ab7692f78637d22e3ea878071 [file] [log] [blame]
package org.wordpress.android.mocks;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.wordpress.android.TestUtils;
import org.wordpress.android.util.AppLog;
import org.wordpress.android.util.AppLog.T;
import org.xmlrpc.android.LoggedInputStream;
import org.xmlrpc.android.XMLRPCCallback;
import org.xmlrpc.android.XMLRPCException;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Type;
import java.net.URI;
import java.util.HashMap;
public class XMLRPCClientCustomizableJSONMock extends XMLRPCClientCustomizableMockAbstract {
private LoggedInputStream mLoggedInputStream;
public XMLRPCClientCustomizableJSONMock(URI uri, String httpUser, String httpPassword) {
}
public void addQuickPostHeader(String type) {
}
public void setAuthorizationHeader(String authToken) {
}
private Object readFile(String method, String prefix) {
// method example: wp.getUsersBlogs
// Filename: default-wp.getUsersBlogs.json
String filename = prefix + "-" + method + ".json";
try {
Gson gson = new Gson();
mLoggedInputStream = new LoggedInputStream(mContext.getAssets().open(filename));
String jsonString = TestUtils.convertStreamToString(mLoggedInputStream);
AppLog.i(T.TESTS, "loading: " + filename);
try {
// Try to load a JSONArray
return TestUtils.injectDateInArray(gson.fromJson(jsonString, Object[].class));
} catch (Exception e) {
// If that fails, try to load a JSONObject
Type type = new TypeToken<HashMap<String, Object>>(){}.getType();
HashMap<String, Object> map = gson.fromJson(jsonString, type);
return TestUtils.injectDateInMap(map);
}
} catch (IOException e) {
AppLog.e(T.TESTS, "can't read file: " + filename);
}
return null;
}
public Object call(String method, Object[] params) throws XMLRPCException {
mLoggedInputStream = null;
AppLog.v(T.TESTS, "XMLRPCClientCustomizableJSONMock: call: " + method);
if ("login-failure".equals(mPrefix)) {
// Wrong login
throw new XMLRPCException("code 403");
}
Object retValue = readFile(method, mPrefix);
if (retValue == null) {
// failback to default
AppLog.w(T.TESTS, "failback to default");
retValue = readFile(method, "default");
}
return retValue;
}
public Object call(String method) throws XMLRPCException {
return null;
}
public Object call(String method, Object[] params, File tempFile) throws XMLRPCException {
return null;
}
public long callAsync(XMLRPCCallback listener, String methodName, Object[] params) {
return 0;
}
public long callAsync(XMLRPCCallback listener, String methodName, Object[] params, File tempFile) {
return 0;
}
public String getResponse() {
if (mLoggedInputStream == null) {
return "";
}
return mLoggedInputStream.getResponseDocument();
}
}