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}