Change test code of ChooseMapAsyncTaskTest.

This commit is contained in:
youtaol
2012-03-09 11:51:45 +08:00
parent 4fd832d4a2
commit 472d49f241
2 changed files with 116 additions and 36 deletions
@@ -75,19 +75,32 @@ public class ChooseMapAsyncTask extends AsyncTask<Void, Integer, Boolean> {
private ArrayList<String> mapIds;
private ArrayList<MapsMapMetadata> mapData;
public ChooseMapAsyncTask(ChooseMapActivity activity, Account account) {
this.activity = activity;
this.account = account;
public ChooseMapAsyncTask(ChooseMapActivity activity, Account account) {
this(activity, account, activity.getApplicationContext(),
GDataClientFactory.getGDataClient(activity
.getApplicationContext()), new MapsClient(
GDataClientFactory.getGDataClient(activity
.getApplicationContext()),
new XmlMapsGDataParserFactory(
new AndroidXmlParserFactory())));
}
context = activity.getApplicationContext();
gDataClient = GDataClientFactory.getGDataClient(context);
mapsClient = new MapsClient(
gDataClient, new XmlMapsGDataParserFactory(new AndroidXmlParserFactory()));
/**
* Creates this constructor for test.
*/
public ChooseMapAsyncTask(ChooseMapActivity activity, Account account,
Context context, GDataClient gDataClient, MapsClient mapsClient) {
this.activity = activity;
this.account = account;
canRetry = true;
completed = false;
success = false;
}
this.context = context;
this.gDataClient = gDataClient;
this.mapsClient = mapsClient;
canRetry = true;
completed = false;
success = false;
}
/**
* Sets the activity associated with this AyncTask.
@@ -15,11 +15,18 @@
*/
package com.google.android.apps.mytracks.io.maps;
import com.google.android.apps.mytracks.io.gdata.maps.MapsClient;
import com.google.android.apps.mytracks.io.gdata.maps.XmlMapsGDataParserFactory;
import com.google.android.common.gdata.AndroidXmlParserFactory;
import com.google.android.testing.mocking.AndroidMock;
import com.google.android.testing.mocking.UsesMocks;
import com.google.wireless.gdata.client.GDataClient;
import android.accounts.Account;
import android.test.AndroidTestCase;
import java.util.ArrayList;
/**
* Tests {@link ChooseMapAsyncTask}.
*
@@ -29,8 +36,8 @@ public class ChooseMapAsyncTaskTest extends AndroidTestCase {
private ChooseMapActivity chooseMapActivityMock;
private Account account;
private final String ACCOUNT_NAME = "AccountName";
private final String ACCOUNT_TYPE = "AccountType";
private static final String ACCOUNT_NAME = "AccountName";
private static final String ACCOUNT_TYPE = "AccountType";
private boolean getMapsStatus = false;
public class ChooseMapAsyncTaskMock extends ChooseMapAsyncTask {
@@ -51,11 +58,31 @@ public class ChooseMapAsyncTaskTest extends AndroidTestCase {
}
/**
* Tests the method {@link ChooseMapAsyncTask#setActivity(ChooseMapActivity)}
* when the task is completed.
* Tests {@link ChooseMapAsyncTask#execute(Void...)} and makes sure
* {@link ChooseMapActivity#showProgressDialog()} will be run.
*/
@UsesMocks({ ChooseMapActivity.class, GDataClient.class, MapsClient.class })
public void testExecute() {
chooseMapActivityMock = AndroidMock.createMock(ChooseMapActivity.class);
chooseMapActivityMock.showProgressDialog();
GDataClient gDataClient = AndroidMock.createMock(GDataClient.class);
MapsClient mapsClient = AndroidMock.createMock(MapsClient.class, gDataClient,
new XmlMapsGDataParserFactory(new AndroidXmlParserFactory()));
AndroidMock.replay(chooseMapActivityMock, gDataClient, mapsClient);
ChooseMapAsyncTask asyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account,
getContext(), gDataClient, mapsClient);
asyncTask.execute();
AndroidMock.verify(chooseMapActivityMock);
}
/**
* Tests {@link ChooseMapAsyncTask#setActivity(ChooseMapActivity)} when the
* task is completed. Makes sure it calls
* {@link ChooseMapActivity#onAsyncTaskCompleted(boolean, ArrayList, ArrayList)}
* .
*/
public void testSetActivity_completed() {
createMockObjects();
setup();
chooseMapActivityMock.onAsyncTaskCompleted(false, null, null);
AndroidMock.replay(chooseMapActivityMock);
ChooseMapAsyncTask chooseMapAsyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account);
@@ -65,11 +92,13 @@ public class ChooseMapAsyncTaskTest extends AndroidTestCase {
}
/**
* Tests the method {@link ChooseMapAsyncTask#setActivity(ChooseMapActivity)}
* when the task is not completed.
* Test {@link ChooseMapAsyncTask#setActivity(ChooseMapActivity)} when the
* task is not completed. Makes sure
* {@link ChooseMapActivity#onAsyncTaskCompleted(boolean, ArrayList, ArrayList)}
* is not invoked.
*/
public void testSetActivity_notCompleted() {
createMockObjects();
setup();
AndroidMock.replay(chooseMapActivityMock);
ChooseMapAsyncTask chooseMapAsyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account);
chooseMapAsyncTask.setCompleted(false);
@@ -78,23 +107,28 @@ public class ChooseMapAsyncTaskTest extends AndroidTestCase {
}
/**
* Tests the method {@link ChooseMapAsyncTask#setActivity(ChooseMapActivity)}
* when the activity is null.
* Tests {@link ChooseMapAsyncTask#setActivity(ChooseMapActivity)} when the
* activity is null. Makes sure
* {@link ChooseMapActivity#onAsyncTaskCompleted(boolean, ArrayList, ArrayList)}
* is not invoked.
*/
public void testSetActivity_nullActivity() {
createMockObjects();
setup();
AndroidMock.replay(chooseMapActivityMock);
ChooseMapAsyncTask chooseMapAsyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account);
chooseMapAsyncTask.setCompleted(true);
chooseMapAsyncTask.setActivity(null);
AndroidMock.verify(chooseMapActivityMock);
}
/**
* Tests the method {@link ChooseMapAsyncTask#onPostExecute(Boolean)} when the
* result is true.
* result is true. Makes sure
* {@link ChooseMapActivity#onAsyncTaskCompleted(boolean, ArrayList, ArrayList)}
* is invoked.
*/
public void testOnPostExecute_trueResult() {
createMockObjects();
setup();
chooseMapActivityMock.onAsyncTaskCompleted(true, null, null);
AndroidMock.replay(chooseMapActivityMock);
ChooseMapAsyncTask chooseMapAsyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account);
@@ -104,10 +138,12 @@ public class ChooseMapAsyncTaskTest extends AndroidTestCase {
/**
* Tests the method {@link ChooseMapAsyncTask#onPostExecute(Boolean)} when the
* result is false.
* result is false. Makes sure
* {@link ChooseMapActivity#onAsyncTaskCompleted(boolean, ArrayList, ArrayList)}
* is invoked.
*/
public void testOnPostExecute_falseResult() {
createMockObjects();
setup();
chooseMapActivityMock.onAsyncTaskCompleted(false, null, null);
AndroidMock.replay(chooseMapActivityMock);
ChooseMapAsyncTask chooseMapAsyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account);
@@ -116,10 +152,26 @@ public class ChooseMapAsyncTaskTest extends AndroidTestCase {
}
/**
* Tests the method {@link ChooseMapAsyncTas#retryUpload()}.
* Tests the method {@link ChooseMapAsyncTask#retryUpload()}. Make sure can
* not retry again after have retried once and failed.
*/
public void testRetryUpload() throws Exception {
createMockObjects();
setup();
AndroidMock.replay(chooseMapActivityMock);
ChooseMapAsyncTaskMock chooseMapAsyncTaskTMock = new ChooseMapAsyncTaskMock(
chooseMapActivityMock, account);
chooseMapAsyncTaskTMock.setCanRetry(false);
getMapsStatus = true;
assertFalse(chooseMapAsyncTaskTMock.retryUpload());
AndroidMock.verify(chooseMapActivityMock);
}
/**
* Tests the method {@link ChooseMapAsyncTask#retryUpload()}. Make sure can
* retry after get maps failed and never retry before.
*/
public void testRetryUpload_retryOnce() throws Exception {
setup();
AndroidMock.replay(chooseMapActivityMock);
ChooseMapAsyncTaskMock chooseMapAsyncTaskTMock = new ChooseMapAsyncTaskMock(
chooseMapActivityMock, account);
@@ -128,25 +180,40 @@ public class ChooseMapAsyncTaskTest extends AndroidTestCase {
assertFalse(chooseMapAsyncTaskTMock.retryUpload());
// Can only retry once.
assertFalse(chooseMapAsyncTaskTMock.getCanRetry());
AndroidMock.verify(chooseMapActivityMock);
}
/**
* Tests the method {@link ChooseMapAsyncTask#retryUpload()}. Make sure will
* not retry after get maps successfully.
*/
public void testRetryUpload_successGetMaps() throws Exception {
setup();
AndroidMock.replay(chooseMapActivityMock);
ChooseMapAsyncTaskMock chooseMapAsyncTaskTMock = new ChooseMapAsyncTaskMock(
chooseMapActivityMock, account);
chooseMapAsyncTaskTMock.setCanRetry(true);
getMapsStatus = true;
assertTrue(chooseMapAsyncTaskTMock.retryUpload());
// Can only retry once.
assertFalse(chooseMapAsyncTaskTMock.getCanRetry());
chooseMapAsyncTaskTMock.setCanRetry(false);
getMapsStatus = true;
assertFalse(chooseMapAsyncTaskTMock.retryUpload());
AndroidMock.verify(chooseMapActivityMock);
}
/**
* Initials chooseMapActivityMock and account for test.
* Initials setup for test.
*/
private void createMockObjects() {
chooseMapActivityMock = AndroidMock.createMock(ChooseMapActivity.class);
void setup() {
setupChooseMapActivityMock();
account = new Account(ACCOUNT_NAME, ACCOUNT_TYPE);
}
/**
* Create a mock object of ChooseMapActivity.
*/
@UsesMocks(ChooseMapActivity.class)
private void setupChooseMapActivityMock() {
chooseMapActivityMock = AndroidMock.createMock(ChooseMapActivity.class);
// This is used in the constructor of ChooseMapAsyncTask.
AndroidMock.expect(chooseMapActivityMock.getApplicationContext()).andReturn(getContext());
}