149 lines
4.8 KiB
Java
149 lines
4.8 KiB
Java
/*
|
|
* Copyright (C) 2011 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.emailcommon.utility;
|
|
|
|
import android.test.AndroidTestCase;
|
|
import android.test.MoreAsserts;
|
|
import android.test.suitebuilder.annotation.SmallTest;
|
|
|
|
@SmallTest
|
|
public class EmailAsyncTaskTests extends AndroidTestCase {
|
|
public void testAll() throws Exception {
|
|
// Because AsyncTask relies on the UI thread and how we use threads in test, we can't
|
|
// execute() these tasks.
|
|
// Instead, we directly call onPostExecute/onCancel.
|
|
|
|
final EmailAsyncTask.Tracker tracker = new EmailAsyncTask.Tracker();
|
|
|
|
// Initially empty
|
|
assertEquals(0, tracker.getTaskCountForTest());
|
|
|
|
// Start 4 tasks
|
|
final MyTask task1 = new MyTask(tracker);
|
|
assertEquals(1, tracker.getTaskCountForTest());
|
|
|
|
final MyTask task2 = new MyTask(tracker);
|
|
assertEquals(2, tracker.getTaskCountForTest());
|
|
|
|
final MyTask task3 = new MyTask(tracker);
|
|
assertEquals(3, tracker.getTaskCountForTest());
|
|
|
|
final MyTask task4 = new MyTask(tracker);
|
|
assertEquals(4, tracker.getTaskCountForTest());
|
|
|
|
// Check the piping for doInBackground
|
|
task1.mDoInBackgroundResult = "R";
|
|
assertEquals("R", task1.callDoInBackgroundForTest("1", "2"));
|
|
MoreAsserts.assertEquals(new String[] {"1", "2"}, task1.mDoInBackgroundArg);
|
|
|
|
// Finish task1
|
|
task1.callOnPostExecuteForTest("a");
|
|
|
|
// onPostExecute should unregister the instance
|
|
assertEquals(3, tracker.getTaskCountForTest());
|
|
// and call onPostExecuteInternal
|
|
assertEquals("a", task1.mOnPostExecuteArg);
|
|
assertNull(task1.mOnCancelledArg);
|
|
|
|
// Cancel task 3
|
|
task3.callOnCancelledForTest("b");
|
|
// onCancelled should unregister the instance too
|
|
assertEquals(2, tracker.getTaskCountForTest());
|
|
// and call onCancelledInternal
|
|
assertNull(task3.mOnPostExecuteArg);
|
|
assertEquals("b", task3.mOnCancelledArg);
|
|
|
|
// Task 2 and 4 are still registered.
|
|
|
|
// Cancel all left
|
|
tracker.cancelAllInterrupt();
|
|
|
|
// Check if they're canceled
|
|
assertEquals(0, tracker.getTaskCountForTest());
|
|
}
|
|
|
|
// Make sure null tracker will be accepted
|
|
public void testNullTracker() {
|
|
final MyTask task1 = new MyTask(null);
|
|
task1.unregisterSelf();
|
|
}
|
|
|
|
/**
|
|
* Test for {@link EmailAsyncTask.Tracker#cancelOthers}
|
|
*/
|
|
public void testCancellOthers() {
|
|
final EmailAsyncTask.Tracker tracker = new EmailAsyncTask.Tracker();
|
|
|
|
final MyTask task1 = new MyTask(tracker);
|
|
final MyTask task2 = new MyTask(tracker);
|
|
final MyTask task3 = new MyTask(tracker);
|
|
|
|
final MyTask sub1 = new MyTaskSubClass(tracker);
|
|
final MyTask sub2 = new MyTaskSubClass(tracker);
|
|
final MyTask sub3 = new MyTaskSubClass(tracker);
|
|
|
|
// All should be in the tracker.
|
|
assertEquals(6, tracker.getTaskCountForTest());
|
|
|
|
// This should remove task1, task2, but not task3 itself.
|
|
tracker.cancelOthers(task3);
|
|
|
|
assertEquals(4, tracker.getTaskCountForTest());
|
|
assertTrue(tracker.containsTaskForTest(task3));
|
|
|
|
// Same for sub1.
|
|
tracker.cancelOthers(sub1);
|
|
|
|
assertEquals(2, tracker.getTaskCountForTest());
|
|
assertTrue(tracker.containsTaskForTest(task3));
|
|
assertTrue(tracker.containsTaskForTest(sub1));
|
|
}
|
|
|
|
private static class MyTask extends EmailAsyncTask<String, String, String> {
|
|
public String[] mDoInBackgroundArg;
|
|
public String mDoInBackgroundResult;
|
|
public String mOnCancelledArg;
|
|
public String mOnPostExecuteArg;
|
|
|
|
public MyTask(Tracker tracker) {
|
|
super(tracker);
|
|
}
|
|
|
|
@Override
|
|
protected String doInBackground(String... params) {
|
|
mDoInBackgroundArg = params;
|
|
return mDoInBackgroundResult;
|
|
}
|
|
|
|
@Override
|
|
protected void onCancelled(String result) {
|
|
mOnCancelledArg = result;
|
|
}
|
|
|
|
@Override
|
|
protected void onSuccess(String result) {
|
|
mOnPostExecuteArg = result;
|
|
}
|
|
}
|
|
|
|
private static class MyTaskSubClass extends MyTask {
|
|
public MyTaskSubClass(Tracker tracker) {
|
|
super(tracker);
|
|
}
|
|
}
|
|
}
|