diff options
Diffstat (limited to 'WordPress/src/androidTest/java/org/wordpress/android/mocks')
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} +} |