15fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski/* 25fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * Copyright (C) 2010 The Android Open Source Project 35fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * 45fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * Licensed under the Apache License, Version 2.0 (the "License"); 55fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * you may not use this file except in compliance with the License. 65fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * You may obtain a copy of the License at 75fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * 85fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * http://www.apache.org/licenses/LICENSE-2.0 95fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * 105fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * Unless required by applicable law or agreed to in writing, software 115fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * distributed under the License is distributed on an "AS IS" BASIS, 125fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * See the License for the specific language governing permissions and 145fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * limitations under the License. 155fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski */ 165fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 175fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowskipackage com.android.dumprendertree2.scriptsupport; 185fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 195fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowskiimport android.content.Intent; 205fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowskiimport android.test.ActivityInstrumentationTestCase2; 215fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowskiimport android.util.Log; 225fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 235fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowskiimport com.android.dumprendertree2.TestsListActivity; 24c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowskiimport com.android.dumprendertree2.forwarder.ForwarderManager; 255fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 265fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski/** 275fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * A class which provides methods that can be invoked by a script running on the host machine to 285fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * run the tests. 295fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * 305fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * It starts a TestsListActivity and does not return until all the tests finish executing. 315fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski */ 325fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowskipublic class Starter extends ActivityInstrumentationTestCase2<TestsListActivity> { 335fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski private static final String LOG_TAG = "Starter"; 345fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski private boolean mEverythingFinished; 355fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 365fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski public Starter() { 375fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski super(TestsListActivity.class); 385fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski } 395fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 405fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski /** 415fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * This method is called from adb to start executing the tests. It doesn't return 425fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * until everything is finished so that the script can wait for the end if it needs 435fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski * to. 445fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski */ 455fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski public void startLayoutTests() { 465fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski ScriptTestRunner runner = (ScriptTestRunner)getInstrumentation(); 475fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski String relativePath = runner.getTestsRelativePath(); 485fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 49c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski ForwarderManager.getForwarderManager().start(); 50c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 515fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski Intent intent = new Intent(); 525fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski intent.setClassName("com.android.dumprendertree2", "TestsListActivity"); 535fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski intent.setAction(Intent.ACTION_RUN); 545fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski intent.putExtra(TestsListActivity.EXTRA_TEST_PATH, relativePath); 555fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski setActivityIntent(intent); 565fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski getActivity().registerOnEverythingFinishedCallback(new OnEverythingFinishedCallback() { 575fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski /** This method is safe to call on any thread */ 585fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski @Override 595fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski public void onFinished() { 605fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski synchronized (Starter.this) { 615fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski mEverythingFinished = true; 625fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski Starter.this.notifyAll(); 635fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski } 645fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski } 655fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski }); 665fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 675fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski synchronized (this) { 685fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski while (!mEverythingFinished) { 695fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski try { 705fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski this.wait(); 715fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski } catch (InterruptedException e) { 722e5982a55ac031110ed39515a76f7a5ec9ff2c14Maksymilian Osowski Log.e(LOG_TAG, "startLayoutTests()", e); 735fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski } 745fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski } 755fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski } 76c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 77c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski ForwarderManager.getForwarderManager().stop(); 785fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski } 795fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski}