package com.android_textbook.learnjunit.task;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import com.android_textbook.learnjunit.task.SimpleCountUpTask;
import android.test.InstrumentationTestCase;
public class SimpleCountUpTaskTest2 extends InstrumentationTestCase {
public static class SimpleCountUpTaskEx extends SimpleCountUpTask {
private CountDownLatch signal = new CountDownLatch(1);
private List<Integer> progress = new ArrayList<Integer>();
private Integer result;
@Override
protected void onProgressUpdate(Integer... values) {
progress.add(values[0]);
}
@Override
protected void onPostExecute(Integer result) {
this.result = result;
signal.countDown();
}
}
// UIスレッド上でインスタンスを生成させるためのクラス
class RunnableImpl implements Runnable {
SimpleCountUpTaskEx task;
int param;
public RunnableImpl(int param) {
this.param = param;
}
@Override
public void run() {
task = new SimpleCountUpTaskEx();
task.execute(param);
};
}
public void testSuccessPattern() throws Throwable {
// UIスレッド上でインスタンスを生成する
RunnableImpl r = new RunnableImpl(10);
runTestOnUiThread(r);
r.task.signal.await(10, TimeUnit.SECONDS);
// onProgressUpdate経由で通知された値が想定通りであることを確認する
assertEquals(10, r.task.progress.size());
assertEquals(1, r.task.progress.get(0).intValue());
assertEquals(2, r.task.progress.get(1).intValue());
/* 3〜9は省略 */
assertEquals(10, r.task.progress.get(9).intValue());
// onPostExecute経由で通知された値が想定通りであることを確認する
assertEquals(55, r.task.result.intValue());
}
}