package jp.mixi.sample.test.test;
import android.app.Activity;
import android.app.Instrumentation.ActivityMonitor;
import android.content.pm.ActivityInfo;
import android.test.ActivityInstrumentationTestCase2;
import android.test.TouchUtils;
import android.widget.Button;
import android.widget.TextView;
import jp.mixi.sample.test.MainActivity;
import jp.mixi.sample.test.R;
import jp.mixi.sample.test.SubActivity;
// ActivityInstrumentationTestCase2 を継承して、機能テストを書く
public class SampleActivityInstrumentationTestCase extends
ActivityInstrumentationTestCase2<MainActivity> {
public SampleActivityInstrumentationTestCase() {
this(MainActivity.class);
}
public SampleActivityInstrumentationTestCase(Class<MainActivity> activityClass) {
super(activityClass);
}
public void testCountUpScenario() throws Exception {
// getActivity() の呼び出しで、テスト対象の Activity が立ち上がる
Activity activity = getActivity();
// UI 操作による View の状態を見るために、View のインスタンスを取り出す
TextView counter = (TextView) activity.findViewById(R.id.ClickCounter);
Button button = (Button) activity.findViewById(R.id.CountEventTrigger);
// 最初は 0
assertEquals("0", counter.getText().toString());
// ボタンのクリックをシミュレート
TouchUtils.clickView(this, button);
// クリックしたら、カウンタの値がインクリメントされる
assertEquals("1", counter.getText().toString());
TouchUtils.clickView(this, button);
// もう一度クリック
assertEquals("2", counter.getText().toString());
// 画面回転する
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Thread.sleep(1000L);
// クリック回数が引き継がれているはず
assertEquals("2", counter.getText().toString());
}
public void testCallSubActivityAndReturn() throws Exception {
Activity activity = getActivity();
// UI 操作による View の状態を見るために、View のインスタンスを取り出す
TextView counter = (TextView) activity.findViewById(R.id.ClickCounter);
Button button = (Button) activity.findViewById(R.id.CountEventTrigger);
Button button2 = (Button) activity.findViewById(R.id.CallSubActivity);
// 最初は 0
assertEquals("0", counter.getText().toString());
// ボタンのクリックをシミュレート
TouchUtils.clickView(this, button);
// クリックしたら、カウンタの値がインクリメントされる
assertEquals("1", counter.getText().toString());
// Activity の起動を監視する(厳密には Intent を監視する)オブジェクトを作る
ActivityMonitor monitor = new ActivityMonitor(SubActivity.class.getCanonicalName(), null, true);
// 監視オブジェクトを登録
getInstrumentation().addMonitor(monitor);
// Launch SubActivity をクリック
TouchUtils.clickView(this, button2);
// 起動を待つ
Activity newActivity = getInstrumentation().waitForMonitorWithTimeout(monitor, 3000L);
// 1 つの Activity が起動しているはず
assertEquals(1, monitor.getHits());
// 終わる
if (newActivity != null)
newActivity.finish();
// 戻ってきても状態が復帰できるはず
assertEquals("1", counter.getText().toString());
}
}