2011年12月31日土曜日

ActivityInstrumentationTestCase2 sendPointerSync

AndroidのActivityInstrumentationTestCase2を実装したClassで、sendPointerSync() APIを確認しました。対象のActivityは SurfaceViewとしました。

最初に、テストされる側のコードを紹介します。
SurfaceViewのLayoutのファイルです。main.xmlとしてres/layout/に保存されます。


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <SurfaceView
        android:id="@+id/surfaceView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

ActivityのonCreateでSurfaceViewを生成する部分です。main.xmlを追加します。
setContentView(R.layout.main);

SurfaceViewがタッチ(sendPoinsterSync())されたことを確認するために、タッチされた時に、ログを出力します。
@Override
public boolean onTouchEvent(MotionEvent me) {
 Log.d("surface", "x=" + me.getX() + " y=" + me.getY());
 return false;
 
}

次に、テストする側のコードです。ActivityInstrumentationTestCase2 Classのサブクラスです。.
setUp()です。かならずgetActivity()をします。たぶんですが、getActivity()でテストするActivityを生成していると思います。
public void setUp() throws Exception {
 super.setUp();
 mActivity = getActivity();
 mInstrumentation = getInstrumentation();
 
}
SurfaceViewをタッチする部分のコードです。時間をSystemClockクラスから取得しています。
long downtime = SystemClock.uptimeMillis();
long eventtime = SystemClock.uptimeMillis();
MotionEvent event = MotionEvent.obtain(downtime, eventtime, MotionEvent.ACTION_DOWN, 100, 100, 0); 
mInstrumentation.sendPointerSync(event);
eventtime = SystemClock.uptimeMillis() + 1000;
event = MotionEvent.obtain(downtime, eventtime, MotionEvent.ACTION_UP, 100, 100, 0); 
mInstrumentation.sendPointerSync(event);

これらのコードで、JUnitを実行すると、Logcatに以下のように表示され、sendPointerSyncが動作していることがわかります。
D/surface(1469): x=100.0 y=100.0
D/surface(1469): x=100.0 y=100.0

テストされる側のソースコードです。 ここ.
テストする側のソースコードです。 ここ.

0 件のコメント:

コメントを投稿