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