aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/androidTest/java/org/wordpress/android/mocks
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/androidTest/java/org/wordpress/android/mocks')
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/mocks/OAuthAuthenticatorEmptyMock.java11
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/mocks/OAuthAuthenticatorFactoryTest.java24
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientCustomizableMock.java150
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientEmptyMock.java63
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientFactoryTest.java71
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/mocks/SystemServiceFactoryTest.java35
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCClientCustomizableJSONMock.java94
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCClientCustomizableMockAbstract.java23
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCClientCustomizableXMLMock.java90
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCClientEmptyMock.java43
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCFactoryTest.java75
11 files changed, 679 insertions, 0 deletions
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/mocks/OAuthAuthenticatorEmptyMock.java b/WordPress/src/androidTest/java/org/wordpress/android/mocks/OAuthAuthenticatorEmptyMock.java
new file mode 100644
index 000000000..2895cf0ed
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/mocks/OAuthAuthenticatorEmptyMock.java
@@ -0,0 +1,11 @@
+package org.wordpress.android.mocks;
+
+import org.wordpress.android.models.AccountHelper;
+import org.wordpress.android.networking.AuthenticatorRequest;
+import org.wordpress.android.networking.OAuthAuthenticator;
+
+public class OAuthAuthenticatorEmptyMock extends OAuthAuthenticator {
+ public void authenticate(AuthenticatorRequest request) {
+ AccountHelper.getDefaultAccount().setAccessToken("dead-parrot");
+ }
+}
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/mocks/OAuthAuthenticatorFactoryTest.java b/WordPress/src/androidTest/java/org/wordpress/android/mocks/OAuthAuthenticatorFactoryTest.java
new file mode 100644
index 000000000..d84962500
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/mocks/OAuthAuthenticatorFactoryTest.java
@@ -0,0 +1,24 @@
+package org.wordpress.android.mocks;
+
+import android.content.Context;
+
+import org.wordpress.android.networking.OAuthAuthenticator;
+import org.wordpress.android.networking.OAuthAuthenticatorFactoryAbstract;
+import org.wordpress.android.util.AppLog;
+import org.wordpress.android.util.AppLog.T;
+
+public class OAuthAuthenticatorFactoryTest implements OAuthAuthenticatorFactoryAbstract {
+ public enum Mode {EMPTY}
+
+ public static Mode sMode = Mode.EMPTY;
+ public static Context sContext;
+
+ public OAuthAuthenticator make() {
+ switch (sMode) {
+ case EMPTY:
+ default:
+ AppLog.v(T.TESTS, "make: OAuthAuthenticatorEmptyMock");
+ return new OAuthAuthenticatorEmptyMock();
+ }
+ }
+}
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientCustomizableMock.java b/WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientCustomizableMock.java
new file mode 100644
index 000000000..6f066d6d1
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientCustomizableMock.java
@@ -0,0 +1,150 @@
+package org.wordpress.android.mocks;
+
+import android.content.Context;
+
+import com.android.volley.NetworkResponse;
+import com.android.volley.Request.Method;
+import com.android.volley.TimeoutError;
+import com.android.volley.VolleyError;
+import com.wordpress.rest.RestClient;
+import com.wordpress.rest.RestRequest;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.wordpress.android.TestUtils;
+import org.wordpress.android.util.AppLog;
+import org.wordpress.android.util.AppLog.T;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class RestClientCustomizableMock extends RestClient {
+ private Context mContext;
+ private String mPrefix;
+
+ public void setContextAndPrefix(Context context, String prefix) {
+ mContext = context;
+ mPrefix = prefix;
+ }
+
+ public void setPrefix(String prefix) {
+ mPrefix = prefix;
+ }
+
+ public void setContext(Context context) {
+ mContext = context;
+ }
+
+ public RestClientCustomizableMock(com.android.volley.RequestQueue queue) {
+ super(queue);
+ }
+
+ public RestClientCustomizableMock(com.android.volley.RequestQueue queue, String token) {
+ super(queue, token, REST_API_ENDPOINT_URL_V1);
+ }
+
+ public String getAbsoluteURL(String url) {
+ return null;
+ }
+
+ public String getAbsoluteURL(String path, java.util.Map<String, String> params) {
+ return null;
+ }
+
+ public RestRequest get(String path, RestRequest.Listener listener, RestRequest.ErrorListener errorListener) {
+ AppLog.v(T.TESTS, this.getClass() + ": get(" + path + ")");
+ return new RestRequest(Method.GET, path, null, listener, errorListener);
+ }
+
+ public RestRequest post(String path, java.util.Map<String, String> body, RestRequest.Listener listener,
+ RestRequest.ErrorListener errorListener) {
+ AppLog.v(T.TESTS, this.getClass() + ": post(" + path + ")");
+ return new RestRequest(Method.POST, path, body, listener, errorListener);
+ }
+
+ private VolleyError forgeVolleyErrorFromFilename(String filename) {
+ String strData = fileToString(filename);
+ byte[] data = new byte[0];
+ if (strData != null) {
+ data = strData.getBytes();
+ }
+ NetworkResponse networkResponse = new NetworkResponse(400, data, null, false);
+ VolleyError ve = new VolleyError(networkResponse);
+ return ve;
+ }
+
+ private TimeoutError forgeVolleyTimeoutError() {
+ TimeoutError te = new TimeoutError();
+ return te;
+ }
+
+ private String fileToString(String filename) {
+ try {
+ InputStream is = mContext.getAssets().open(filename);
+ String data = TestUtils.convertStreamToString(is);
+ AppLog.v(T.TESTS, "file read:" + filename);
+ return data;
+ } catch (IOException e) {
+ AppLog.e(T.TESTS, "can't read file: " + filename + " - " + e.toString());
+ }
+ return null;
+ }
+
+ public RestRequest makeRequest(int method, String url, java.util.Map<String, String> params,
+ RestRequest.Listener listener, RestRequest.ErrorListener errorListener) {
+ AppLog.v(T.TESTS, this.getClass() + ": makeRequest(" + url + ")");
+ RestRequest dummyReturnValue = new RestRequest(method, url, params, listener, errorListener);
+ // URL example: https://public-api.wordpress.com/rest/v1/me
+ // Filename: default-public-api-wordpress-com-rest-v1-me.json
+ String filename = mPrefix + "-" + url.replace("https://", "").replace("/", "-").replace(".", "-").replace("?",
+ "-") + ".json";
+
+ if ("password-invalid".equals(mPrefix) && errorListener != null) {
+ errorListener.onErrorResponse(forgeVolleyErrorFromFilename(filename));
+ return dummyReturnValue;
+ }
+
+ if ("username-exists".equals(mPrefix) && errorListener != null) {
+ errorListener.onErrorResponse(forgeVolleyErrorFromFilename(filename));
+ return dummyReturnValue;
+ }
+
+ if ("timeout".equals(mPrefix) && errorListener != null) {
+ errorListener.onErrorResponse(forgeVolleyTimeoutError());
+ return dummyReturnValue;
+ }
+
+ if ("site-reserved".equals(mPrefix) && errorListener != null) {
+ errorListener.onErrorResponse(forgeVolleyErrorFromFilename(filename));
+ return dummyReturnValue;
+ }
+
+ String data = fileToString(filename);
+ if (data == null) {
+ AppLog.e(T.TESTS, "Can't read file: " + filename);
+ throw new RuntimeException("Can't read file: " + filename);
+ }
+
+ try {
+ JSONObject jsonObj = new JSONObject(data);
+ listener.onResponse(jsonObj);
+ } catch (JSONException je) {
+ AppLog.e(T.TESTS, je.toString());
+ }
+ return dummyReturnValue;
+ }
+
+ public RestRequest send(RestRequest request) {
+ return request;
+ }
+
+ public void setUserAgent(String userAgent) {
+ }
+
+ public void setAccessToken(String token) {
+ }
+
+ public boolean isAuthenticated() {
+ return true;
+ }
+}
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientEmptyMock.java b/WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientEmptyMock.java
new file mode 100644
index 000000000..b07b1b2a3
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientEmptyMock.java
@@ -0,0 +1,63 @@
+package org.wordpress.android.mocks;
+
+import com.android.volley.Request.Method;
+import com.wordpress.rest.RestClient;
+import com.wordpress.rest.RestRequest;
+
+import org.wordpress.android.util.AppLog;
+import org.wordpress.android.util.AppLog.T;
+
+public class RestClientEmptyMock extends RestClient {
+ public RestClientEmptyMock(com.android.volley.RequestQueue queue) {
+ super(queue);
+ }
+
+ public RestClientEmptyMock(com.android.volley.RequestQueue queue, java.lang.String token) {
+ super(queue, token, REST_API_ENDPOINT_URL_V1);
+ }
+
+ public java.lang.String getAbsoluteURL(java.lang.String url) {
+ return null;
+ }
+
+ public java.lang.String getAbsoluteURL(java.lang.String path,
+ java.util.Map<java.lang.String, java.lang.String> params) {
+ return null;
+ }
+
+ public com.wordpress.rest.RestRequest get(java.lang.String path, com.wordpress.rest.RestRequest.Listener listener,
+ com.wordpress.rest.RestRequest.ErrorListener errorListener) {
+ AppLog.v(T.TESTS, this.getClass() + ": get(" + path + ")");
+ return new RestRequest(Method.GET, path, null, listener, errorListener);
+ }
+
+ public com.wordpress.rest.RestRequest post(java.lang.String path,
+ java.util.Map<java.lang.String, java.lang.String> body,
+ com.wordpress.rest.RestRequest.Listener listener,
+ com.wordpress.rest.RestRequest.ErrorListener errorListener) {
+ AppLog.v(T.TESTS, this.getClass() + ": post(" + path + ")");
+ return new RestRequest(Method.POST, path, body, listener, errorListener);
+ }
+
+ public com.wordpress.rest.RestRequest makeRequest(int method, java.lang.String url,
+ java.util.Map<java.lang.String, java.lang.String> params,
+ com.wordpress.rest.RestRequest.Listener listener,
+ com.wordpress.rest.RestRequest.ErrorListener errorListener) {
+ AppLog.v(T.TESTS, this.getClass() + ": makeRequest(" + url + ")");
+ return new RestRequest(method, url, params, listener, errorListener);
+ }
+
+ public com.wordpress.rest.RestRequest send(com.wordpress.rest.RestRequest request) {
+ return request;
+ }
+
+ public void setUserAgent(java.lang.String userAgent) {
+ }
+
+ public void setAccessToken(java.lang.String token) {
+ }
+
+ public boolean isAuthenticated() {
+ return true;
+ }
+}
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientFactoryTest.java b/WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientFactoryTest.java
new file mode 100644
index 000000000..f403e5126
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientFactoryTest.java
@@ -0,0 +1,71 @@
+package org.wordpress.android.mocks;
+
+import android.content.Context;
+
+import com.android.volley.RequestQueue;
+import com.wordpress.rest.RestClient;
+import com.wordpress.rest.RestClient.REST_CLIENT_VERSIONS;
+
+import org.wordpress.android.networking.RestClientFactoryAbstract;
+import org.wordpress.android.util.AppLog;
+import org.wordpress.android.util.AppLog.T;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class RestClientFactoryTest implements RestClientFactoryAbstract {
+ public static String sPrefix = "default";
+ public static RestClient.REST_CLIENT_VERSIONS sVersion = REST_CLIENT_VERSIONS.V1;
+ public static Context sContext;
+ // keep a reference to each instances so we can update contexts and prefixes after instantiation
+ public static Set<RestClientCustomizableMock> sInstances = new HashSet<RestClientCustomizableMock>();
+
+ public static void setContextAllInstances(Context context) {
+ sContext = context;
+ if (sMode != Mode.CUSTOMIZABLE) {
+ AppLog.e(T.TESTS, "You try to change context on a non-customizable RestClient mock");
+ }
+ for (RestClientCustomizableMock client : sInstances) {
+ client.setContext(context);
+ }
+ }
+
+ public static void setPrefixAllInstances(String prefix) {
+ sPrefix = prefix;
+ if (sMode != Mode.CUSTOMIZABLE) {
+ AppLog.e(T.TESTS, "You try to change prefix on a non-customizable RestClient mock");
+ }
+ for (RestClientCustomizableMock client : sInstances) {
+ client.setPrefix(prefix);
+ }
+ }
+
+ public static Mode sMode = Mode.EMPTY;
+
+ public RestClient make(RequestQueue queue) {
+ switch (sMode) {
+ case CUSTOMIZABLE:
+ RestClientCustomizableMock client = new RestClientCustomizableMock(queue);
+ if (sContext != null) {
+ client.setContextAndPrefix(sContext, sPrefix);
+ } else {
+ AppLog.e(T.TESTS, "You have to set RestClientFactoryTest.sContext field before running tests");
+ throw new IllegalStateException();
+ }
+ AppLog.v(T.TESTS, "make: RestClientCustomizableMock");
+ sInstances.add(client);
+ return client;
+ case EMPTY:
+ default:
+ AppLog.v(T.TESTS, "make: RestClientEmptyMock");
+ return new RestClientEmptyMock(queue);
+ }
+ }
+
+ public RestClient make(RequestQueue queue, RestClient.REST_CLIENT_VERSIONS version) {
+ sVersion = version;
+ return make(queue);
+ }
+
+ public enum Mode {EMPTY, CUSTOMIZABLE}
+}
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/mocks/SystemServiceFactoryTest.java b/WordPress/src/androidTest/java/org/wordpress/android/mocks/SystemServiceFactoryTest.java
new file mode 100644
index 000000000..a099de8ef
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/mocks/SystemServiceFactoryTest.java
@@ -0,0 +1,35 @@
+package org.wordpress.android.mocks;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.content.Context;
+
+import org.mockito.stubbing.Answer;
+import org.wordpress.android.util.AppLog;
+import org.wordpress.android.util.AppLog.T;
+import org.wordpress.android.util.SystemServiceFactoryAbstract;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+
+public class SystemServiceFactoryTest implements SystemServiceFactoryAbstract {
+ public static Answer sNotificationCallback;
+
+ public Object get(Context context, String name) {
+ System.setProperty("dexmaker.dexcache", context.getCacheDir().getPath());
+ if (Context.NOTIFICATION_SERVICE.equals(name)) {
+ NotificationManager notificationManager = mock(NotificationManager.class);
+ if (sNotificationCallback != null) {
+ doAnswer(sNotificationCallback).when(notificationManager).notify(anyInt(), any(Notification.class));
+ doAnswer(sNotificationCallback).when(notificationManager).cancel(anyInt());
+ }
+ return notificationManager;
+ } else {
+ AppLog.e(T.TESTS, "SystemService:" + name + "No supported in SystemServiceFactoryTest");
+ }
+ return null;
+ }
+
+} \ No newline at end of file
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCClientCustomizableJSONMock.java b/WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCClientCustomizableJSONMock.java
new file mode 100644
index 000000000..d68746c4a
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCClientCustomizableJSONMock.java
@@ -0,0 +1,94 @@
+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();
+ }
+}
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCClientCustomizableMockAbstract.java b/WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCClientCustomizableMockAbstract.java
new file mode 100644
index 000000000..c8690f6b8
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCClientCustomizableMockAbstract.java
@@ -0,0 +1,23 @@
+package org.wordpress.android.mocks;
+
+import android.content.Context;
+
+import org.xmlrpc.android.XMLRPCClientInterface;
+
+public abstract class XMLRPCClientCustomizableMockAbstract implements XMLRPCClientInterface {
+ protected Context mContext;
+ protected String mPrefix;
+
+ public void setContextAndPrefix(Context context, String prefix) {
+ mContext = context;
+ mPrefix = prefix;
+ }
+
+ public void setPrefix(String prefix) {
+ mPrefix = prefix;
+ }
+
+ public void setContext(Context context) {
+ mContext = context;
+ }
+}
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCClientCustomizableXMLMock.java b/WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCClientCustomizableXMLMock.java
new file mode 100644
index 000000000..57e8291f9
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCClientCustomizableXMLMock.java
@@ -0,0 +1,90 @@
+package org.wordpress.android.mocks;
+
+import org.wordpress.android.util.AppLog;
+import org.wordpress.android.util.AppLog.T;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlrpc.android.LoggedInputStream;
+import org.xmlrpc.android.XMLRPCCallback;
+import org.xmlrpc.android.XMLRPCClient;
+import org.xmlrpc.android.XMLRPCException;
+import org.xmlrpc.android.XMLRPCFault;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URI;
+
+public class XMLRPCClientCustomizableXMLMock extends XMLRPCClientCustomizableMockAbstract {
+ XMLRPCClient mXmlRpcClient;
+ private LoggedInputStream mLoggedInputStream;
+
+ public XMLRPCClientCustomizableXMLMock(URI uri, String httpUser, String httpPassword) {
+ // Used to test ctor and preparePostMethod
+ mXmlRpcClient = new XMLRPCClient("", "", "");
+ }
+
+ public void addQuickPostHeader(String type) {
+ }
+
+ public void setAuthorizationHeader(String authToken) {
+ }
+
+ private Object readFile(String method, String prefix) throws IOException, XMLRPCException, XmlPullParserException {
+ // method example: wp.getUsersBlogs
+ // Filename: default-wp.getUsersBlogs.xml
+ String filename = prefix + "-" + method + ".xml";
+ try {
+ mLoggedInputStream = new LoggedInputStream(mContext.getAssets().open(filename));
+ return XMLRPCClient.parseXMLRPCResponse(mLoggedInputStream, null);
+ } catch (FileNotFoundException e) {
+ AppLog.e(T.TESTS, "file not found: " + filename);
+ }
+ return null;
+ }
+
+ public Object call(String method, Object[] params) throws XMLRPCException, IOException, XmlPullParserException {
+ mLoggedInputStream = null;
+ try {
+ mXmlRpcClient.preparePostMethod(method, params, null);
+ } catch (IOException e) {
+ // unexpected error, test must fail
+ throw new XMLRPCException("preparePostMethod failed");
+ }
+ AppLog.v(T.TESTS, "XMLRPCClientCustomizableXMLMock call: " + method);
+ if ("login-failure".equals(mPrefix)) {
+ // Wrong login
+ throw new XMLRPCFault("code 403", 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();
+ }
+}
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCClientEmptyMock.java b/WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCClientEmptyMock.java
new file mode 100644
index 000000000..f995e2446
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCClientEmptyMock.java
@@ -0,0 +1,43 @@
+package org.wordpress.android.mocks;
+
+import org.xmlrpc.android.XMLRPCCallback;
+import org.xmlrpc.android.XMLRPCClientInterface;
+import org.xmlrpc.android.XMLRPCException;
+
+import java.io.File;
+import java.net.URI;
+
+public class XMLRPCClientEmptyMock implements XMLRPCClientInterface {
+ public XMLRPCClientEmptyMock(URI uri, String httpUser, String httpPassword) {
+ }
+
+ public void addQuickPostHeader(String type) {
+ }
+
+ public void setAuthorizationHeader(String authToken) {
+ }
+
+ public Object call(String method, Object[] params) throws XMLRPCException {
+ return null;
+ }
+
+ 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() {
+ return null;
+ }
+}
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCFactoryTest.java b/WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCFactoryTest.java
new file mode 100644
index 000000000..60852f11c
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/mocks/XMLRPCFactoryTest.java
@@ -0,0 +1,75 @@
+package org.wordpress.android.mocks;
+
+import android.content.Context;
+
+import org.wordpress.android.util.AppLog;
+import org.wordpress.android.util.AppLog.T;
+import org.xmlrpc.android.XMLRPCClientInterface;
+import org.xmlrpc.android.XMLRPCFactoryAbstract;
+
+import java.net.URI;
+import java.util.HashSet;
+import java.util.Set;
+
+public class XMLRPCFactoryTest implements XMLRPCFactoryAbstract {
+ public static String sPrefix = "default";
+ public static Context sContext;
+ public static Mode sMode = Mode.EMPTY;
+ public static Set<XMLRPCClientCustomizableMockAbstract> sInstances =
+ new HashSet<XMLRPCClientCustomizableMockAbstract>();
+
+ public static void setContextAllInstances(Context context) {
+ sContext = context;
+ if (sMode != Mode.CUSTOMIZABLE_JSON && sMode != Mode.CUSTOMIZABLE_XML) {
+ AppLog.e(T.TESTS, "You tried to change context on a non-customizable XMLRPCClient mock");
+ }
+ for (XMLRPCClientCustomizableMockAbstract client : sInstances) {
+ client.setContext(context);
+ }
+ }
+
+ public static void setPrefixAllInstances(String prefix) {
+ sPrefix = prefix;
+ if (sMode != Mode.CUSTOMIZABLE_JSON && sMode != Mode.CUSTOMIZABLE_XML) {
+ AppLog.e(T.TESTS, "You tried to change prefix on a non-customizable XMLRPCClient mock");
+ }
+ for (XMLRPCClientCustomizableMockAbstract client : sInstances) {
+ client.setPrefix(prefix);
+ }
+ }
+
+ public XMLRPCClientInterface make(URI uri, String httpUser, String httpPassword) {
+ switch (sMode) {
+ case CUSTOMIZABLE_JSON:
+ XMLRPCClientCustomizableJSONMock clientJSONMock = new XMLRPCClientCustomizableJSONMock(uri, httpUser,
+ httpPassword);
+ if (sContext != null) {
+ clientJSONMock.setContextAndPrefix(sContext, sPrefix);
+ } else {
+ AppLog.e(T.TESTS, "You have to set XMLRPCFactoryTest.sContext field before running tests");
+ throw new IllegalStateException();
+ }
+ AppLog.v(T.TESTS, "make: XMLRPCClientCustomizableJSONMock");
+ sInstances.add(clientJSONMock);
+ return clientJSONMock;
+ case CUSTOMIZABLE_XML:
+ XMLRPCClientCustomizableXMLMock clientXMLMock = new XMLRPCClientCustomizableXMLMock(uri, httpUser,
+ httpPassword);
+ if (sContext != null) {
+ clientXMLMock.setContextAndPrefix(sContext, sPrefix);
+ } else {
+ AppLog.e(T.TESTS, "You have to set XMLRPCFactoryTest.sContext field before running tests");
+ throw new IllegalStateException();
+ }
+ AppLog.v(T.TESTS, "make: XMLRPCClientCustomizableXMLMock");
+ sInstances.add(clientXMLMock);
+ return clientXMLMock;
+ case EMPTY:
+ default:
+ AppLog.v(T.TESTS, "make: XMLRPCClientEmptyMock");
+ return new XMLRPCClientEmptyMock(uri, httpUser, httpPassword);
+ }
+ }
+
+ public enum Mode {EMPTY, CUSTOMIZABLE_JSON, CUSTOMIZABLE_XML}
+}