12910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski/* 22910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * Copyright (C) 2010 The Android Open Source Project 32910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * 42910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * Licensed under the Apache License, Version 2.0 (the "License"); 52910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * you may not use this file except in compliance with the License. 62910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * You may obtain a copy of the License at 72910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * 82910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * http://www.apache.org/licenses/LICENSE-2.0 92910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * 102910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * Unless required by applicable law or agreed to in writing, software 112910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * distributed under the License is distributed on an "AS IS" BASIS, 122910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * See the License for the specific language governing permissions and 142910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * limitations under the License. 152910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski */ 162910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 172910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskipackage com.android.dumprendertree2; 182910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 192910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport android.util.Log; 202910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 21c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowskiimport com.android.dumprendertree2.forwarder.ForwarderManager; 22c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 232910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.io.BufferedReader; 242910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.io.File; 252910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.io.FileNotFoundException; 262910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.io.IOException; 27c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowskiimport java.io.InputStream; 28c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowskiimport java.io.InputStreamReader; 29c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowskiimport java.io.StringReader; 30c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowskiimport java.net.MalformedURLException; 31c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowskiimport java.net.URL; 32c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowskiimport java.net.URLConnection; 332910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.util.ArrayList; 342910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.util.Arrays; 352910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.util.HashSet; 362910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.util.List; 372910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.util.Set; 382910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 392910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski/** 402910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * A utility to filter out some files/directories from the views and tests that run. 412910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski */ 422910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskipublic class FileFilter { 432910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski private static final String LOG_TAG = "FileFilter"; 442910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 452910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski private static final String TEST_EXPECTATIONS_TXT_PATH = 462910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski "platform/android/test_expectations.txt"; 472910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 48c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski private static final String HTTP_TESTS_PATH = "http/tests/"; 49c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski private static final String SSL_PATH = "ssl/"; 50c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 515f21f5a4a9f240e1c35ab86b2f3a332f0d541cf0Maksymilian Osowski private static final String TOKEN_CRASH = "CRASH"; 526ae5ce4b409759d36f2350e96ff2242e1385b147Maksymilian Osowski private static final String TOKEN_FAIL = "FAIL"; 532910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski private static final String TOKEN_SLOW = "SLOW"; 542910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 555f21f5a4a9f240e1c35ab86b2f3a332f0d541cf0Maksymilian Osowski private final Set<String> mCrashList = new HashSet<String>(); 566ae5ce4b409759d36f2350e96ff2242e1385b147Maksymilian Osowski private final Set<String> mFailList = new HashSet<String>(); 572910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski private final Set<String> mSlowList = new HashSet<String>(); 582910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 5934c68912be678ad50a70c1bfa54a91444e993df5Steve Block public FileFilter() { 60c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski loadTestExpectations(); 612910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 622910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 632910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski private static final String trimTrailingSlashIfPresent(String path) { 642910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski File file = new File(path); 652910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski return file.getPath(); 662910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 672910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 68c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski public void loadTestExpectations() { 69c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski URL url = null; 702910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski try { 7184cc2dbb1d9f935182fcbeb1ef68dc340d2ebadePhilippe Marti url = new URL(ForwarderManager.getHostSchemePort(false) + 7284cc2dbb1d9f935182fcbeb1ef68dc340d2ebadePhilippe Marti "LayoutTests/" + TEST_EXPECTATIONS_TXT_PATH); 73c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } catch (MalformedURLException e) { 74c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski assert false; 75c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 762910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 77c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski try { 78c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski InputStream inputStream = null; 79c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski BufferedReader bufferedReader = null; 80c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski try { 8184cc2dbb1d9f935182fcbeb1ef68dc340d2ebadePhilippe Marti byte[] httpAnswer = FsUtils.readDataFromUrl(url); 8284cc2dbb1d9f935182fcbeb1ef68dc340d2ebadePhilippe Marti if (httpAnswer == null) { 8384cc2dbb1d9f935182fcbeb1ef68dc340d2ebadePhilippe Marti Log.w(LOG_TAG, "loadTestExpectations(): File not found: " + 8484cc2dbb1d9f935182fcbeb1ef68dc340d2ebadePhilippe Marti TEST_EXPECTATIONS_TXT_PATH); 8584cc2dbb1d9f935182fcbeb1ef68dc340d2ebadePhilippe Marti return; 8684cc2dbb1d9f935182fcbeb1ef68dc340d2ebadePhilippe Marti } 8784cc2dbb1d9f935182fcbeb1ef68dc340d2ebadePhilippe Marti bufferedReader = new BufferedReader(new StringReader( 8884cc2dbb1d9f935182fcbeb1ef68dc340d2ebadePhilippe Marti new String(httpAnswer))); 89c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski String line; 90c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski String entry; 91c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski String[] parts; 92c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski String path; 93c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski Set<String> tokens; 94c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski while (true) { 95c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski line = bufferedReader.readLine(); 96c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski if (line == null) { 97c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski break; 98c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 99c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 100c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski /** Remove the comment and trim */ 101c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski entry = line.split("//", 2)[0].trim(); 102c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 103c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski /** Omit empty lines, advance to next line */ 104c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski if (entry.isEmpty()) { 105c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski continue; 106c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 107c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 108c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski /** Split on whitespace into path part and the rest */ 109c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski parts = entry.split("\\s", 2); 110c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 111c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski /** At this point parts.length >= 1 */ 112c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski if (parts.length == 1) { 113c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski Log.w(LOG_TAG + "::reloadConfiguration", 114c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski "There are no options specified for the test!"); 115c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski continue; 116c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 117c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 118c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski path = trimTrailingSlashIfPresent(parts[0]); 119c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 120c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski /** Split on whitespace */ 12184cc2dbb1d9f935182fcbeb1ef68dc340d2ebadePhilippe Marti tokens = new HashSet<String>(Arrays.asList( 12284cc2dbb1d9f935182fcbeb1ef68dc340d2ebadePhilippe Marti parts[1].split("\\s", 0))); 123c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 124c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski /** Chose the right collections to add to */ 1255f21f5a4a9f240e1c35ab86b2f3a332f0d541cf0Maksymilian Osowski if (tokens.contains(TOKEN_CRASH)) { 1265f21f5a4a9f240e1c35ab86b2f3a332f0d541cf0Maksymilian Osowski mCrashList.add(path); 127c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 1286ae5ce4b409759d36f2350e96ff2242e1385b147Maksymilian Osowski /** If test is on skip list we ignore any further options */ 129c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski continue; 130c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 131c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 1326ae5ce4b409759d36f2350e96ff2242e1385b147Maksymilian Osowski if (tokens.contains(TOKEN_FAIL)) { 1336ae5ce4b409759d36f2350e96ff2242e1385b147Maksymilian Osowski mFailList.add(path); 134c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 135c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski if (tokens.contains(TOKEN_SLOW)) { 136c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski mSlowList.add(path); 137c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 1382910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 139c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } finally { 140c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski if (inputStream != null) { 141c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski inputStream.close(); 1422910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 143c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski if (bufferedReader != null) { 144c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski bufferedReader.close(); 1452910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 1462910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 1472910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } catch (IOException e) { 148c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski Log.e(LOG_TAG, "url=" + url, e); 1492910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 1502910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 1512910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 1522910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski /** 1535f21f5a4a9f240e1c35ab86b2f3a332f0d541cf0Maksymilian Osowski * Checks if test is expected to crash. 1542910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * 1552910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * <p> 1562910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * Path given should relative within LayoutTests folder, e.g. fast/dom/foo.html 1572910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * 1582910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * @param testPath 1592910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * - a relative path within LayoutTests folder 1602910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * @return if the test is supposed to be skipped 1612910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski */ 1625f21f5a4a9f240e1c35ab86b2f3a332f0d541cf0Maksymilian Osowski public boolean isCrash(String testPath) { 1632910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski for (String prefix : getPrefixes(testPath)) { 1645f21f5a4a9f240e1c35ab86b2f3a332f0d541cf0Maksymilian Osowski if (mCrashList.contains(prefix)) { 1652910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski return true; 1662910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 1672910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 1682910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 1692910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski return false; 1702910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 1712910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 1722910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski /** 1736ae5ce4b409759d36f2350e96ff2242e1385b147Maksymilian Osowski * Checks if test result is supposed to be "failed". 1742910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * 1752910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * <p> 1762910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * Path given should relative within LayoutTests folder, e.g. fast/dom/foo.html 1772910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * 1782910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * @param testPath 1792910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * - a relative path within LayoutTests folder 1806ae5ce4b409759d36f2350e96ff2242e1385b147Maksymilian Osowski * @return if the test result is supposed to be "failed" 1812910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski */ 1826ae5ce4b409759d36f2350e96ff2242e1385b147Maksymilian Osowski public boolean isFail(String testPath) { 1832910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski for (String prefix : getPrefixes(testPath)) { 1846ae5ce4b409759d36f2350e96ff2242e1385b147Maksymilian Osowski if (mFailList.contains(prefix)) { 1852910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski return true; 1862910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 1872910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 1882910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 1892910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski return false; 1902910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 1912910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 1922910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski /** 1932910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * Checks if test is slow and should have timeout increased. 1942910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * 1952910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * <p> 1962910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * Path given should relative within LayoutTests folder, e.g. fast/dom/foo.html 1972910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * 1982910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * @param testPath 1992910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * - a relative path within LayoutTests folder 2002910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * @return if the test is slow and should have timeout increased. 2012910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski */ 2022910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski public boolean isSlow(String testPath) { 2032910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski for (String prefix : getPrefixes(testPath)) { 2042910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski if (mSlowList.contains(prefix)) { 2052910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski return true; 2062910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 2072910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 2082910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 2092910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski return false; 2102910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 2112910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 2122910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski /** 2132910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * Returns the list of all path prefixes of the given path. 2142910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * 2152910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * <p> 2162910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * e.g. this/is/a/path returns the list: this this/is this/is/a this/is/a/path 2172910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * 2182910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * @param path 2192910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * @return the list of all path prefixes of the given path. 2202910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski */ 2212910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski private static List<String> getPrefixes(String path) { 2222910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski File file = new File(path); 2232910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski List<String> prefixes = new ArrayList<String>(8); 2242910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 2252910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski do { 2262910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski prefixes.add(file.getPath()); 2272910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski file = file.getParentFile(); 2282910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } while (file != null); 2292910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 2302910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski return prefixes; 2312910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 2322910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 2332910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski /** 2342910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * Checks if the directory may contain tests or contains just helper files. 2352910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * 2362910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * @param dirName 2372910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * @return 2382910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * if the directory may contain tests 2392910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski */ 2402910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski public static boolean isTestDir(String dirName) { 2412910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski return (!dirName.equals("script-tests") 2423c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski && !dirName.equals("resources") && !dirName.startsWith(".")); 2432910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 2442910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski 2452910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski /** 246177eb38ef571e8602547dfd9ba78376822e18e01Ben Murdoch * Checks if the file is a test. 247ace92b871a020a3d662511ea8b1aab30334015deIain Merrick * Currently we run .html, .xhtml and .php tests. 248ace92b871a020a3d662511ea8b1aab30334015deIain Merrick * 249ace92b871a020a3d662511ea8b1aab30334015deIain Merrick * @warning You MUST also call isTestDir() on the parent directory before 250ace92b871a020a3d662511ea8b1aab30334015deIain Merrick * assuming that a file is a test. 2512910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * 2522910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * @param testName 253ca501d20360ffee3a37fc87538daf8281f8a14edSteve Block * @return if the file is a test 2542910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski */ 2552910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski public static boolean isTestFile(String testName) { 256ace92b871a020a3d662511ea8b1aab30334015deIain Merrick return testName.endsWith(".html") 257ace92b871a020a3d662511ea8b1aab30334015deIain Merrick || testName.endsWith(".xhtml") 258ace92b871a020a3d662511ea8b1aab30334015deIain Merrick || testName.endsWith(".php"); 2592910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski } 2603c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski 2613c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski /** 262c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski * Return a URL of the test on the server. 263c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski * 264c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski * @param relativePath 265ca501d20360ffee3a37fc87538daf8281f8a14edSteve Block * @param allowHttps Whether to allow the use of HTTPS, even if the file is in the SSL 266ca501d20360ffee3a37fc87538daf8281f8a14edSteve Block * directory. 267c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski * @return a URL of the test on the server 268c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski */ 269ca501d20360ffee3a37fc87538daf8281f8a14edSteve Block public static URL getUrl(String relativePath, boolean allowHttps) { 270c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski String urlBase = ForwarderManager.getHostSchemePort(false); 271c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 272c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski /** 273c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski * URL is formed differently for HTTP vs non-HTTP tests, because HTTP tests 274c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski * expect different document root. See run_apache2.py and .conf file for details 275c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski */ 276c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski if (relativePath.startsWith(HTTP_TESTS_PATH)) { 277c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski relativePath = relativePath.substring(HTTP_TESTS_PATH.length()); 278ca501d20360ffee3a37fc87538daf8281f8a14edSteve Block if (relativePath.startsWith(SSL_PATH) && allowHttps) { 279c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski urlBase = ForwarderManager.getHostSchemePort(true); 280c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 281c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } else { 282c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski relativePath = "LayoutTests/" + relativePath; 283c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 284c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 285c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski try { 286c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski return new URL(urlBase + relativePath); 287c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } catch (MalformedURLException e) { 288c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski Log.e(LOG_TAG, "Malformed URL!", e); 289c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 290c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 291c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski return null; 292c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski } 293c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski 294c6a341d34c690c2b5948977cd803ec2ff668c4b7Maksymilian Osowski /** 2953c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * If the path contains extension (e.g .foo at the end of the file) then it changes 2963c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * this (.foo) into newEnding (so it has to contain the dot if we want to preserve it). 2973c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * 2983c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * <p>If the path doesn't contain an extension, it adds the ending to the path. 2993c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * 3003c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * @param relativePath 3013c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * @param newEnding 3023c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * @return 3033c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * a new path, containing the newExtension 3043c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski */ 3053c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski public static String setPathEnding(String relativePath, String newEnding) { 3063c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski int dotPos = relativePath.lastIndexOf('.'); 3073c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski if (dotPos == -1) { 3083c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski return relativePath + newEnding; 3093c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski } 3103c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski 3113c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski return relativePath.substring(0, dotPos) + newEnding; 3123c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski } 31334c68912be678ad50a70c1bfa54a91444e993df5Steve Block} 314