FileFilter.java revision 177eb38ef571e8602547dfd9ba78376822e18e01
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
212910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.io.BufferedReader;
222910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.io.File;
232910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.io.FileNotFoundException;
242910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.io.FileReader;
252910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.io.IOException;
262910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.util.ArrayList;
272910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.util.Arrays;
282910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.util.HashSet;
292910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.util.List;
302910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskiimport java.util.Set;
312910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
322910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski/**
332910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski * A utility to filter out some files/directories from the views and tests that run.
342910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski */
352910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowskipublic class FileFilter {
362910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    private static final String LOG_TAG = "FileFilter";
372910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
382910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    private static final String TEST_EXPECTATIONS_TXT_PATH =
392910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            "platform/android/test_expectations.txt";
402910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
412910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    private static final String TOKEN_SKIP = "SKIP";
422910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    private static final String TOKEN_IGNORE_RESULT = "IGNORE_RESULT";
432910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    private static final String TOKEN_SLOW = "SLOW";
442910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
452910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    private final Set<String> mSkipList = new HashSet<String>();
462910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    private final Set<String> mIgnoreResultList = new HashSet<String>();
472910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    private final Set<String> mSlowList = new HashSet<String>();
482910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
492910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    private final String mRootDirPath;
502910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
512910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    public FileFilter(String rootDirPath) {
522910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        /** It may or may not contain a trailing slash */
532910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        this.mRootDirPath = rootDirPath;
542910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
552910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        reloadConfiguration();
562910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    }
572910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
582910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    private static final String trimTrailingSlashIfPresent(String path) {
592910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        File file = new File(path);
602910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        return file.getPath();
612910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    }
622910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
632910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    public void reloadConfiguration() {
642910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        Log.d(LOG_TAG + "::reloadConfiguration", "Begin.");
652910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
662910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        File txt_exp = new File(mRootDirPath, TEST_EXPECTATIONS_TXT_PATH);
672910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
682910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        BufferedReader bufferedReader;
692910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        try {
702910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            bufferedReader =
712910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                    new BufferedReader(new FileReader(txt_exp));
722910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
732910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            String line;
742910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            String entry;
752910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            String[] parts;
762910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            String path;
772910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            Set<String> tokens;
782910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            Boolean skipped;
792910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            while (true) {
802910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                line = bufferedReader.readLine();
812910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                if (line == null) {
822910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                    break;
832910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                }
842910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
852910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                /** Remove the comment and trim */
862910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                entry = line.split("//", 2)[0].trim();
872910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
882910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                /** Omit empty lines, advance to next line */
892910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                if (entry.isEmpty()) {
902910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                    continue;
912910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                }
922910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
932910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                /** Split on whitespace into path part and the rest */
942910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                parts = entry.split("\\s", 2);
952910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
962910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                /** At this point parts.length >= 1 */
972910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                if (parts.length == 1) {
982910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                    Log.w(LOG_TAG + "::reloadConfiguration",
992910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                            "There are no options specified for the test!");
1002910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                    continue;
1012910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                }
1022910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
1032910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                path = trimTrailingSlashIfPresent(parts[0]);
1042910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
1052910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                /** Split on whitespace */
1062910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                tokens = new HashSet<String>(Arrays.asList(parts[1].split("\\s", 0)));
1072910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
1082910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                /** Chose the right collections to add to */
1092910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                skipped = false;
1102910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                if (tokens.contains(TOKEN_SKIP)) {
1112910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                    mSkipList.add(path);
1122910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                    skipped = true;
1132910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                }
1142910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
1152910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                /** If test is on skip list we ignore any further options */
1162910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                if (skipped) {
1172910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                    continue;
1182910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                }
1192910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
1202910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                if (tokens.contains(TOKEN_IGNORE_RESULT)) {
1212910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                    mIgnoreResultList.add(path);
1222910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                }
1232910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
1242910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                if (tokens.contains(TOKEN_SLOW)) {
1252910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                    mSlowList.add(path);
1262910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                }
1272910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            }
1282910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        } catch (FileNotFoundException e) {
1292910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            Log.w(LOG_TAG + "::reloadConfiguration", "File not found: " + txt_exp.getPath());
1302910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        } catch (IOException e) {
1312910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            Log.e(LOG_TAG + "::reloadConfiguration", "IOException: " + e.getMessage());
1322910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        }
1332910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    }
1342910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
1352910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    /**
1362910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * Checks if test is supposed to be skipped.
1372910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     *
1382910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * <p>
1392910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * Path given should relative within LayoutTests folder, e.g. fast/dom/foo.html
1402910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     *
1412910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * @param testPath
1422910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     *            - a relative path within LayoutTests folder
1432910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * @return if the test is supposed to be skipped
1442910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     */
1452910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    public boolean isSkip(String testPath) {
1462910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        for (String prefix : getPrefixes(testPath)) {
1472910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            if (mSkipList.contains(prefix)) {
1482910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                return true;
1492910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            }
1502910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        }
1512910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
1522910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        return false;
1532910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    }
1542910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
1552910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    /**
1562910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * Checks if test result is supposed to be ignored.
1572910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     *
1582910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * <p>
1592910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * Path given should relative within LayoutTests folder, e.g. fast/dom/foo.html
1602910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     *
1612910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * @param testPath
1622910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     *            - a relative path within LayoutTests folder
1632910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * @return if the test result is supposed to be ignored
1642910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     */
1652910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    public boolean isIgnoreRes(String testPath) {
1662910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        for (String prefix : getPrefixes(testPath)) {
1672910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            if (mIgnoreResultList.contains(prefix)) {
1682910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                return true;
1692910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            }
1702910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        }
1712910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
1722910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        return false;
1732910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    }
1742910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
1752910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    /**
1762910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * Checks if test is slow and should have timeout increased.
1772910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     *
1782910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * <p>
1792910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * Path given should relative within LayoutTests folder, e.g. fast/dom/foo.html
1802910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     *
1812910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * @param testPath
1822910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     *            - a relative path within LayoutTests folder
1832910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * @return if the test is slow and should have timeout increased.
1842910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     */
1852910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    public boolean isSlow(String testPath) {
1862910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        for (String prefix : getPrefixes(testPath)) {
1872910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            if (mSlowList.contains(prefix)) {
1882910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                return true;
1892910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            }
1902910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        }
1912910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
1922910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        return false;
1932910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    }
1942910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
1952910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    /**
1962910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * Returns the list of all path prefixes of the given path.
1972910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     *
1982910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * <p>
1992910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * e.g. this/is/a/path returns the list: this this/is this/is/a this/is/a/path
2002910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     *
2012910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * @param path
2022910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * @return the list of all path prefixes of the given path.
2032910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     */
2042910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    private static List<String> getPrefixes(String path) {
2052910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        File file = new File(path);
2062910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        List<String> prefixes = new ArrayList<String>(8);
2072910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
2082910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        do {
2092910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            prefixes.add(file.getPath());
2102910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski            file = file.getParentFile();
2112910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        } while (file != null);
2122910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
2132910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        return prefixes;
2142910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    }
2152910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
2162910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    /**
2172910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * Checks if the directory may contain tests or contains just helper files.
2182910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     *
2192910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * @param dirName
2202910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * @return
2212910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     *      if the directory may contain tests
2222910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     */
2232910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    public static boolean isTestDir(String dirName) {
2242910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski        return (!dirName.equals("script-tests")
2252910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                && !dirName.equals("resources")
2262910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski                && !dirName.startsWith("."));
2272910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    }
2282910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski
2292910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    /**
230177eb38ef571e8602547dfd9ba78376822e18e01Ben Murdoch     * Checks if the file is a test.
231177eb38ef571e8602547dfd9ba78376822e18e01Ben Murdoch     * Currently we run .html and .xhtml tests.
2322910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     *
2332910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * @param testName
2342910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     * @return
2352910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     *      if the file is a test
2362910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski     */
2372910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    public static boolean isTestFile(String testName) {
238177eb38ef571e8602547dfd9ba78376822e18e01Ben Murdoch        return testName.endsWith(".html") || testName.endsWith(".xhtml");
2392910c123aade7619858fa972369cfae6c70e2087Maksymilian Osowski    }
240177eb38ef571e8602547dfd9ba78376822e18e01Ben Murdoch}
241