15f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski/*
25f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski * Copyright (C) 2010 The Android Open Source Project
35f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski *
45f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski * Licensed under the Apache License, Version 2.0 (the "License");
55f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski * you may not use this file except in compliance with the License.
65f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski * You may obtain a copy of the License at
75f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski *
85f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski *      http://www.apache.org/licenses/LICENSE-2.0
95f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski *
105f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski * Unless required by applicable law or agreed to in writing, software
115f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski * distributed under the License is distributed on an "AS IS" BASIS,
125f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski * See the License for the specific language governing permissions and
145f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski * limitations under the License.
155f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski */
165f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski
175f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowskipackage com.android.dumprendertree2;
185f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski
195f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowskiimport android.os.Environment;
205f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowskiimport android.os.Message;
215f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowskiimport java.io.File;
225f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowskiimport java.util.ArrayList;
235f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowskiimport java.util.LinkedList;
24cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Blockimport java.util.List;
255f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski
265f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski/**
275f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski * A Thread that is responsible for generating a lists of tests to run.
285f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski */
295f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowskipublic class TestsListPreloaderThread extends Thread {
305f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski
315f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski    private static final String LOG_TAG = "TestsListPreloaderThread";
325f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski
335f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski    /** A list containing relative paths of tests to run */
345f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski    private ArrayList<String> mTestsList = new ArrayList<String>();
355f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski
365f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski    private FileFilter mFileFilter;
375f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski
385f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski    /**
39cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block     * A relative path to the directory with the tests we want to run or particular test.
405f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski     * Used up to and including preloadTests().
415f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski     */
425f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski    private String mRelativePath;
435f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski
445f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski    private Message mDoneMsg;
455f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski
465f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski    /**
475f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski     * The given path must be relative to the root dir.
485f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski     *
495f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski     * @param path
505f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski     * @param doneMsg
515f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski     */
525f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski    public TestsListPreloaderThread(String path, Message doneMsg) {
535f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski        mRelativePath = path;
545f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski        mDoneMsg = doneMsg;
555f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski    }
565f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski
575f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski    @Override
585f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski    public void run() {
59cda9448206494b67c0812b9591cc066ca070a7a6Steve Block        mFileFilter = new FileFilter();
60c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski        if (FileFilter.isTestFile(mRelativePath)) {
61c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski            mTestsList.add(mRelativePath);
625f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski        } else {
63c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski            loadTestsFromUrl(mRelativePath);
645f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski        }
65a0a586cd2fb06277436736abc291122aecf6c4eaMaksymilian Osowski
665f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski        mDoneMsg.obj = mTestsList;
675f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski        mDoneMsg.sendToTarget();
685f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski    }
695f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski
705f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski    /**
71cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block     * Loads all the tests from the given directories and all the subdirectories
725f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski     * into mTestsList.
735f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski     *
745f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski     * @param dirRelativePath
755f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski     */
76cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block    private void loadTestsFromUrl(String rootRelativePath) {
77cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block        LinkedList<String> directoriesList = new LinkedList<String>();
78cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block        directoriesList.add(rootRelativePath);
795f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski
805f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski        String relativePath;
815f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski        String itemName;
82cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block        while (!directoriesList.isEmpty()) {
83cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block            relativePath = directoriesList.removeFirst();
84c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski
85cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block            List<String> dirRelativePaths = FsUtils.getLayoutTestsDirContents(relativePath, false, true);
86cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block            if (dirRelativePaths != null) {
87cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                for (String dirRelativePath : dirRelativePaths) {
88cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                    itemName = new File(dirRelativePath).getName();
89cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                    if (FileFilter.isTestDir(itemName)) {
90cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                        directoriesList.add(dirRelativePath);
91cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                    }
925f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski                }
93c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski            }
945f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski
95cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block            List<String> testRelativePaths = FsUtils.getLayoutTestsDirContents(relativePath, false, false);
96cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block            if (testRelativePaths != null) {
97cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                for (String testRelativePath : testRelativePaths) {
98cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                    itemName = new File(testRelativePath).getName();
99cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                    if (FileFilter.isTestFile(itemName)) {
100cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                        /** We choose to skip all the tests that are expected to crash. */
101cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                        if (!mFileFilter.isCrash(testRelativePath)) {
102cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                            mTestsList.add(testRelativePath);
103cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                        } else {
104cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                            /**
105cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                             * TODO: Summarizer is now in service - figure out how to send the info.
106cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                             * Previously: mSummarizer.addSkippedTest(relativePath);
107cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                             */
108cb98a3e621b7c56d1367a1bf77cd91dae3feb6daSteve Block                        }
1095f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski                    }
1105f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski                }
1115f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski            }
1125f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski        }
1135f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski    }
11434c68912be678ad50a70c1bfa54a91444e993df5Steve Block}
115