Home | History | Annotate | Download | only in scriptsupport
      1 /*
      2  * Copyright (C) 2010 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.dumprendertree2.scriptsupport;
     18 
     19 import android.content.Intent;
     20 import android.test.ActivityInstrumentationTestCase2;
     21 import android.util.Log;
     22 
     23 import com.android.dumprendertree2.TestsListActivity;
     24 import com.android.dumprendertree2.forwarder.ForwarderManager;
     25 
     26 /**
     27  * A class which provides methods that can be invoked by a script running on the host machine to
     28  * run the tests.
     29  *
     30  * It starts a TestsListActivity and does not return until all the tests finish executing.
     31  */
     32 public class Starter extends ActivityInstrumentationTestCase2<TestsListActivity> {
     33     private static final String LOG_TAG = "Starter";
     34     private boolean mEverythingFinished;
     35 
     36     public Starter() {
     37         super(TestsListActivity.class);
     38     }
     39 
     40     /**
     41      * This method is called from adb to start executing the tests. It doesn't return
     42      * until everything is finished so that the script can wait for the end if it needs
     43      * to.
     44      */
     45     public void startLayoutTests() {
     46         ScriptTestRunner runner = (ScriptTestRunner)getInstrumentation();
     47         String relativePath = runner.getTestsRelativePath();
     48 
     49         ForwarderManager.getForwarderManager().start();
     50 
     51         Intent intent = new Intent();
     52         intent.setClassName("com.android.dumprendertree2", "TestsListActivity");
     53         intent.setAction(Intent.ACTION_RUN);
     54         intent.putExtra(TestsListActivity.EXTRA_TEST_PATH, relativePath);
     55         setActivityIntent(intent);
     56         getActivity().registerOnEverythingFinishedCallback(new OnEverythingFinishedCallback() {
     57             /** This method is safe to call on any thread */
     58             @Override
     59             public void onFinished() {
     60                 synchronized (Starter.this) {
     61                     mEverythingFinished = true;
     62                     Starter.this.notifyAll();
     63                 }
     64             }
     65         });
     66 
     67         synchronized (this) {
     68             while (!mEverythingFinished) {
     69                 try {
     70                     this.wait();
     71                 } catch (InterruptedException e) {
     72                     Log.e(LOG_TAG, "startLayoutTests()", e);
     73                 }
     74             }
     75         }
     76 
     77         ForwarderManager.getForwarderManager().stop();
     78     }
     79 }